diff --git a/migrations/000.033.sql b/migrations/000.033.sql new file mode 100644 index 0000000..4b0c1fc --- /dev/null +++ b/migrations/000.033.sql @@ -0,0 +1,63 @@ +-- Materialized View: public.v_categorytree +DO $$ + BEGIN + DROP MATERIALIZED VIEW IF EXISTS public.v_categorytree; + EXCEPTION WHEN others THEN + RAISE NOTICE 'Materialized view does not exist'; + END; +$$; + +DO $$ + BEGIN + DROP VIEW IF EXISTS public.v_categorytree; + EXCEPTION WHEN others THEN + RAISE NOTICE 'View does not exist'; + END; +$$; + +CREATE MATERIALIZED VIEW public.v_categorytree AS + SELECT c.id, + c.name, + ( SELECT array_to_string(array_agg(main.parent_name), '/'::text) AS path + FROM ( SELECT node.id, + parent.name AS parent_name + FROM categories node, + categories parent + WHERE node.lft >= parent.lft AND node.lft <= parent.rgt AND node.id = c.id + ORDER BY parent.lft) main + GROUP BY main.id) AS path, + ( SELECT array_to_string(array_agg(main.parent_id), '/'::text) AS path + FROM ( SELECT node.id, + parent.id AS parent_id + FROM categories node, + categories parent + WHERE node.lft >= parent.lft AND node.lft <= parent.rgt AND node.id = c.id + ORDER BY parent.lft) main + GROUP BY main.id) AS path_numeric, + CASE c.rgt - c.lft + WHEN 1 THEN 1 + ELSE 0 + END AS is_leaf, + ( SELECT count(*) - 1 + FROM categories node, + categories parent + WHERE node.lft >= parent.lft AND node.lft <= parent.rgt AND node.id = c.id) AS depth, + ( SELECT count(*) - 1 + FROM categories c1 + WHERE c1.lft >= c.lft AND c1.lft <= c.rgt) AS child_count, + c.lft, + c.rgt + FROM categories c + ORDER BY c.lft +WITH DATA; + +GRANT ALL ON TABLE v_categorytree TO photowall; + +-- Index: public.v_categorytree_key + +-- DROP INDEX public.v_categorytree_key; + +CREATE UNIQUE INDEX v_categorytree_key + ON public.v_categorytree + USING btree + (id);