diff --git a/migrations/000.019.sql b/migrations/000.019.sql new file mode 100644 index 0000000..6b1c447 --- /dev/null +++ b/migrations/000.019.sql @@ -0,0 +1,45 @@ +-- P5-358 +DROP MATERIALIZED VIEW IF EXISTS v_esales_category_count; +CREATE MATERIALIZED VIEW v_esales_category_count +AS +SELECT id, locale_id, product_id, groupid, wallpapertype_id, + CASE + WHEN blacklist_id IS NULL AND visible = 1 AND browsable = 1 THEN true + ELSE false + END AS is_visible + FROM ( + SELECT p.id, + locales.id AS locale_id, + pc.product_id, + groupid, + CASE groupid + WHEN 2 THEN NULL + ELSE wallpapertype_id + END AS wallpapertype_id, + ( + SELECT id + FROM product_blacklist + WHERE product_id = pc.product_id + AND language_id = SUBSTR(locales.value, 1, 2) + AND territory_id = SUBSTR(locales.value, 4) + AND (group_id = groupid OR group_id IS NULL) + ) blacklist_id, + visible, + browsable + FROM categories p + JOIN categories c ON c.lft >= p.lft AND c.rgt <= p.rgt + JOIN product_category pc ON c.id = pc.category_id + JOIN ( + SELECT productid, + groupid + FROM "product-printproducts" + ) pp ON pc.product_id = pp.productid + JOIN (SELECT productid, visible, browsable FROM "product-products") prod ON pc.product_id = prod.productid + LEFT JOIN product_wallpapertypes pw ON pc.product_id = pw.product_id, + locales + ) main + GROUP BY id, locale_id, product_id, groupid, wallpapertype_id, visible, browsable, blacklist_id; + +-- DROP INDEX public.v_esales_category_count_id_idx; +CREATE UNIQUE INDEX v_esales_category_count_id_idx + ON v_esales_category_count (id, locale_id, product_id, groupid, wallpapertype_id);