--
-- Use stable and strict SQL functions for
--
-- * content_folder__is_folder
-- * content_folder__is_sub_folder, and
-- * content_folder__is_empty
--
-- with simpler boolean result.
--
--
-- procedure content_folder__is_folder/1
--
select define_function_args('content_folder__is_folder','item_id');
CREATE OR REPLACE FUNCTION content_folder__is_folder(
item_id integer
) RETURNS boolean AS $$
SELECT EXISTS (
SELECT 1 from cr_folders where folder_id = item_id
);
$$ LANGUAGE sql stable strict;
--
-- procedure content_folder__is_sub_folder/2
--
select define_function_args('content_folder__is_sub_folder','folder_id,target_folder_id');
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 $$
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 EXISTS (
SELECT 1 FROM parents WHERE parent_id = is_sub_folder__folder_id
);
$$ LANGUAGE sql stable strict;
--
-- procedure content_folder__is_empty/1
--
select define_function_args('content_folder__is_empty','folder_id');
CREATE OR REPLACE FUNCTION content_folder__is_empty(
is_empty__folder_id integer
) RETURNS boolean AS $$
SELECT NOT EXISTS (
SELECT 1 from cr_items where parent_id = is_empty__folder_id
);
$$ LANGUAGE sql stable strict;