74 lines
2.7 KiB
PL/PgSQL
74 lines
2.7 KiB
PL/PgSQL
-- P5-4335 replace canvas interior images
|
|
|
|
BEGIN;
|
|
|
|
-- temp lookup table: all products that exists as both canvas and poster
|
|
DROP TABLE IF EXISTS _poster_canvas_products;
|
|
|
|
CREATE TABLE _poster_canvas_products (
|
|
canvas_print_id integer,
|
|
poster_print_id integer
|
|
);
|
|
|
|
-- populate the table with values
|
|
INSERT INTO _poster_canvas_products (canvas_print_id, poster_print_id)
|
|
SELECT canvas_print_id, poster_print_id FROM (
|
|
SELECT canvas.printid AS canvas_print_id, poster.printid AS poster_print_id
|
|
FROM "product-products" products
|
|
LEFT JOIN "product-printproducts" canvas ON products.productid = canvas.productid AND canvas.groupid = 2
|
|
LEFT JOIN "product-printproducts" poster ON products.productid = poster.productid AND poster.groupid = 7
|
|
WHERE canvas.productid IS NOT NULL AND poster.productid IS NOT NULL
|
|
) x;
|
|
|
|
|
|
--temp lookup table: poster_room to canvas_room
|
|
DROP TABLE IF EXISTS _poster_canvas_rooms;
|
|
|
|
CREATE TABLE _poster_canvas_rooms (
|
|
poster_room_id integer,
|
|
canvas_room_id integer
|
|
);
|
|
|
|
INSERT INTO _poster_canvas_rooms
|
|
SELECT poster_rooms.id, canvas_rooms.id FROM rooms poster_rooms
|
|
JOIN rooms canvas_rooms ON canvas_rooms.name LIKE REPLACE(poster_rooms.name, 'poster', 'painting')
|
|
WHERE poster_rooms.name LIKE '%poster%';
|
|
|
|
|
|
----------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
-- delete interior images from all canvases that also exists as posters. Keep own uploaded interiors
|
|
DELETE FROM interiors WHERE
|
|
print_id IN (SELECT canvas_print_id FROM _poster_canvas_products)
|
|
AND room_id IN (SELECT id FROM rooms WHERE name LIKE '%painting%');
|
|
|
|
|
|
-- -- insert new interior images (based on the images used by posters)
|
|
INSERT INTO interiors (print_id, room_id, position)
|
|
SELECT * FROM (
|
|
SELECT
|
|
_poster_canvas_products.canvas_print_id as print_id,
|
|
_poster_canvas_rooms.canvas_room_id as room_id,
|
|
poster_interiors.position as position
|
|
FROM _poster_canvas_products
|
|
JOIN interiors poster_interiors ON poster_interiors.print_id = _poster_canvas_products.poster_print_id
|
|
JOIN _poster_canvas_rooms ON poster_interiors.room_id = _poster_canvas_rooms.poster_room_id
|
|
) x;
|
|
|
|
|
|
-- move own uploaded images last
|
|
UPDATE interiors i1 SET
|
|
position = (
|
|
SELECT max(position) + 1
|
|
FROM interiors i2
|
|
WHERE i1.print_id = i2.print_id
|
|
)
|
|
WHERE i1.room_id IS NULL AND i1.print_id IN (SELECT canvas_print_id from _poster_canvas_products);
|
|
|
|
|
|
-- finally delete the temporary tables
|
|
DROP TABLE _poster_canvas_products;
|
|
DROP TABLE _poster_canvas_rooms;
|
|
COMMIT;
|