--
-- use recursive query and bottom up logic to improve the performance of the query
--
-- function is_sub_folder
select define_function_args('content_folder__is_sub_folder','folder_id,target_folder_id');
--
-- procedure content_folder__is_sub_folder/2
--
CREATE OR REPLACE FUNCTION content_folder__is_sub_folder(
is_sub_folder__folder_id integer,
is_sub_folder__target_folder_id integer
) RETURNS boolean AS $$
DECLARE
v_result integer;
BEGIN
With RECURSIVE parents AS (
select item_id, parent_id from cr_items where item_id = is_sub_folder__target_folder_id
UNION ALL
select cr_items.item_id, cr_items.parent_id from cr_items, parents
where cr_items.item_id = parents.parent_id
)
select count(*) into v_result from parents where parent_id = is_sub_folder__folder_id limit 1;
if v_result = 0 then
return 'f';
else
return 't';
end if;
END;
$$ LANGUAGE plpgsql;