-- -- 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 ");