]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0860.schema.deprecate-supersede-check-repairs.sql
LP1779158 Angular7 and ng-lint updates
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0860.schema.deprecate-supersede-check-repairs.sql
1 BEGIN;
2
3 -- oh, the irony
4 SELECT evergreen.upgrade_deps_block_check('0860', :eg_version);
5
6 CREATE OR REPLACE FUNCTION evergreen.array_overlap_check (/* field */) RETURNS TRIGGER AS $$
7 DECLARE
8     fld     TEXT;
9     cnt     INT;
10 BEGIN
11     fld := TG_ARGV[0];
12     EXECUTE 'SELECT COUNT(*) FROM '|| TG_TABLE_SCHEMA ||'.'|| TG_TABLE_NAME ||' WHERE '|| fld ||' && ($1).'|| fld INTO cnt USING NEW;
13     IF cnt > 0 THEN
14         RAISE EXCEPTION 'Cannot insert duplicate array into field % of table %', fld, TG_TABLE_SCHEMA ||'.'|| TG_TABLE_NAME;
15     END IF;
16     RETURN NEW;
17 END;
18 $$ LANGUAGE PLPGSQL;
19
20
21 CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_deprecates ( my_db_patch TEXT ) RETURNS SETOF evergreen.patch AS $$
22     SELECT  DISTINCT l.version
23       FROM  config.upgrade_log l
24             JOIN config.db_patch_dependencies d ON (l.version = ANY(d.deprecates))
25       WHERE d.db_patch = $1
26 $$ LANGUAGE SQL;
27
28 -- List applied db patches that are superseded by (and block the application of) my_db_patch
29 CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_supersedes ( my_db_patch TEXT ) RETURNS SETOF evergreen.patch AS $$
30     SELECT  DISTINCT l.version
31       FROM  config.upgrade_log l
32             JOIN config.db_patch_dependencies d ON (l.version = ANY(d.supersedes))
33       WHERE d.db_patch = $1
34 $$ LANGUAGE SQL;
35
36
37 CREATE OR REPLACE FUNCTION evergreen.upgrade_deps_block_check ( my_db_patch TEXT, my_applied_to TEXT ) RETURNS BOOL AS $$
38 DECLARE 
39     deprecates TEXT;
40     supersedes TEXT;
41 BEGIN
42     IF NOT evergreen.upgrade_verify_no_dep_conflicts( my_db_patch ) THEN
43         SELECT  STRING_AGG(patch, ', ') INTO deprecates FROM evergreen.upgrade_list_applied_deprecates(my_db_patch);
44         SELECT  STRING_AGG(patch, ', ') INTO supersedes FROM evergreen.upgrade_list_applied_supersedes(my_db_patch);
45         RAISE EXCEPTION '
46 Upgrade script % can not be applied:
47   applied deprecated scripts %
48   applied superseded scripts %
49   deprecated by %
50   superseded by %',
51             my_db_patch,
52             (SELECT ARRAY_AGG(patch) FROM evergreen.upgrade_list_applied_deprecates(my_db_patch)),
53             (SELECT ARRAY_AGG(patch) FROM evergreen.upgrade_list_applied_supersedes(my_db_patch)),
54             evergreen.upgrade_list_applied_deprecated(my_db_patch),
55             evergreen.upgrade_list_applied_superseded(my_db_patch);
56     END IF;
57
58     INSERT INTO config.upgrade_log (version, applied_to) VALUES (my_db_patch, my_applied_to);
59     RETURN TRUE;
60 END;
61 $$ LANGUAGE PLPGSQL;
62
63 COMMIT;
64