/
add_old_release.sql
56 lines (46 loc) · 1.46 KB
/
add_old_release.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
CREATE OR REPLACE FUNCTION add_old_release(product_name text, new_version text, release_type release_enum DEFAULT 'major'::release_enum, release_date date DEFAULT ('now'::text)::date, is_featured boolean DEFAULT false) RETURNS boolean
LANGUAGE plpgsql
AS $$
DECLARE last_date DATE;
featured_count INT;
new_id INT;
BEGIN
IF release_type = 'major' THEN
last_date := release_date + ( 18 * 7 );
ELSE
last_date := release_date + ( 9 * 7 );
END IF;
IF is_featured THEN
-- check if we already have 4 featured
SELECT COUNT(*) INTO featured_count
FROM productdims JOIN product_visibility
ON productdims.id = product_visibility.productdims_id
WHERE featured
AND product = product_name
AND end_date >= current_date;
IF featured_count > 4 THEN
-- too many, drop one
UPDATE product_visibility
SET featured = false
WHERE productdims_id = (
SELECT id
FROM productdims
JOIN product_visibility viz2
ON productdims.id = viz2.productdims_id
WHERE product = product_name
AND featured
AND end_date >= current_date
ORDER BY viz2.end_date LIMIT 1
);
END IF;
END IF;
-- now add it
INSERT INTO productdims ( product, version, branch, release, version_sort )
VALUES ( product_name, new_version, '2.2', release_type, old_version_sort(new_version) )
RETURNING id
INTO new_id;
INSERT INTO product_visibility ( productdims_id, start_date, end_date,
featured, throttle )
VALUES ( new_id, release_date, last_date, is_featured, 100 );
RETURN TRUE;
END; $$;