From cc62a5cd0591e6da61ce6daa8b7b89fde2e843ca Mon Sep 17 00:00:00 2001 From: Ruslan Getmansky Date: Fri, 15 Sep 2017 13:59:20 +0300 Subject: [PATCH] P5-1676: Make sure that the URLs for all categories have "-" and not "_" --- migrations/000.047.sql | 97 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 migrations/000.047.sql diff --git a/migrations/000.047.sql b/migrations/000.047.sql new file mode 100644 index 0000000..7d21924 --- /dev/null +++ b/migrations/000.047.sql @@ -0,0 +1,97 @@ +-- P5-1676 + +CREATE OR REPLACE FUNCTION public.getsafexmlpath( + val character varying, + with_root integer DEFAULT 0) + RETURNS character varying AS +$BODY$ +BEGIN + IF with_root = 1 THEN + val = regexp_replace(val, '^\w+', 'root'); + ELSIF with_root = 2 THEN + val = regexp_replace(val, '^\w+/', ''); + END IF; + + val = UNACCENT(val); + val = REGEXP_REPLACE(val, '[\., _]', '-', 'g'); + val = REPLACE(val, '&', '-'); /* ampersand should always be blank but it gets fixed in below */ + val = lower(val); + val = REGEXP_REPLACE(val, '-+', '-', 'g'); + val = REGEXP_REPLACE(val, '[^\/\w\-]', '', 'g'); + + RETURN val; + +END; $BODY$ +LANGUAGE plpgsql VOLATILE +COST 100; +ALTER FUNCTION public.getsafexmlpath(character varying, integer) +OWNER TO photowall; +GRANT EXECUTE ON FUNCTION public.getsafexmlpath(character varying, integer) TO public; +GRANT EXECUTE ON FUNCTION public.getsafexmlpath(character varying, integer) TO photowall; + + +DROP MATERIALIZED VIEW public.v_esales_categorytree_i18n; +CREATE MATERIALIZED VIEW public.v_esales_categorytree_i18n AS + SELECT main.id, + main.parent_id, + main.locale_id, + main.locale, + main.name, + main.path, + main.is_leaf, + main.depth, + main.child_count, + main.lft, + main.rgt + FROM ( SELECT c.id, + ( SELECT s.id + FROM categories s + WHERE s.lft < c.lft AND s.rgt > c.rgt + ORDER BY (s.rgt - c.rgt) + LIMIT 1) AS parent_id, + c.locale_id, + c.locale, + c.name, + ( SELECT lower(array_to_string(array_agg(main_1.parent_name), '/'::text)) AS path + FROM ( SELECT node.id, + ( SELECT category_texts.name + FROM category_texts + WHERE category_texts.locale_id = c.locale_id AND category_texts.category_id = parent.id) 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_1 + GROUP BY main_1.id) AS path, + 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 ( SELECT c_1.id, + s.id AS locale_id, + s.value AS locale, + lower(s_t.name::text) AS name, + c_1.rgt, + c_1.lft + FROM locales s + JOIN category_texts s_t ON s.id = s_t.locale_id + JOIN categories c_1 ON s_t.category_id = c_1.id + ORDER BY s.id, c_1.lft) c) main +WITH DATA; + +ALTER TABLE public.v_esales_categorytree_i18n + OWNER TO photowall; + +CREATE UNIQUE INDEX v_esales_categorytree_i18n_id_locale_id + ON public.v_esales_categorytree_i18n + USING btree + (id, locale_id); +