--
-- Copyright 2023 The Android Open Source Project
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
--     https://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.

-- Creates a Stack consisting of one frame for a path in the
-- EXPERIMENTAL_PROTO_PATH table.
--
-- @arg path_id  INT Id of the path in EXPERIMENTAL_PROTO_PATH
-- @ret BYTES    Stack with one frame
SELECT CREATE_FUNCTION(
"EXPERIMENTAL_PROTO_PATH_TO_FRAME(path_id LONG)",
"BYTES",
"
SELECT
  CAT_STACKS(
    'event.name:' || EXTRACT_ARG(arg_set_id, 'event.name'),
    'event.category:' || EXTRACT_ARG(arg_set_id, 'event.category'),
    field_name,
    field_type)
FROM EXPERIMENTAL_PROTO_PATH
WHERE id = $path_id
");

-- Creates a Stack following the parent relations in EXPERIMENTAL_PROTO_PATH
-- table starting at the given path_id.
--
-- @arg path_id  INT Id of the path in EXPERIMENTAL_PROTO_PATH that will be
-- the leaf in the returned stack
-- @ret BYTES    Stack
SELECT CREATE_FUNCTION(
"EXPERIMENTAL_PROTO_PATH_TO_STACK(path_id LONG)",
"BYTES",
"
WITH
  R AS (
    -- Starting at the given path_id generate a stack
    SELECT
      EXPERIMENTAL_PROTO_PATH_TO_FRAME($path_id) AS stack,
      parent_id AS parent_id
    FROM EXPERIMENTAL_PROTO_PATH AS p
    WHERE id = $path_id
    UNION ALL
    -- And recursively add parent paths to the stack
    SELECT
      CAT_STACKS(
        EXPERIMENTAL_PROTO_PATH_TO_FRAME(p.id),
        c.stack)
        AS stack,
      p.parent_id AS parent_id
    FROM EXPERIMENTAL_PROTO_PATH AS p, R AS c
    WHERE p.id = c.parent_id
  )
-- Select only the last row in the recursion (the one that stopped it because
-- it had no parent, i.e. the root) as this will be the row that has the full
-- stack. All the others will only have partial stacks.
SELECT stack
FROM R
WHERE
  parent_id IS NULL
");