]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0537.schema.upgrade-dep-tracking-fix.sql
Update permission name to match existing ones
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0537.schema.upgrade-dep-tracking-fix.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0537'); --miker
4
5 DROP FUNCTION evergreen.upgrade_deps_block_check(text,text);
6 DROP FUNCTION evergreen.upgrade_verify_no_dep_conflicts(text);
7 DROP FUNCTION evergreen.upgrade_list_applied_deprecated(text);
8 DROP FUNCTION evergreen.upgrade_list_applied_superseded(text);
9
10 -- List applied db patches that deprecates (and block the application of) my_db_patch
11 CREATE FUNCTION evergreen.upgrade_list_applied_deprecated ( my_db_patch TEXT ) RETURNS SETOF TEXT AS $$
12     SELECT  db_patch
13       FROM  config.db_patch_dependencies
14       WHERE ARRAY[$1]::TEXT[] && deprecates
15 $$ LANGUAGE SQL;
16
17 -- List applied db patches that supersedes (and block the application of) my_db_patch
18 CREATE FUNCTION evergreen.upgrade_list_applied_superseded ( my_db_patch TEXT ) RETURNS SETOF TEXT AS $$
19     SELECT  db_patch
20       FROM  config.db_patch_dependencies
21       WHERE ARRAY[$1]::TEXT[] && supersedes
22 $$ LANGUAGE SQL;
23
24 -- Make sure that no deprecated or superseded db patches are currently applied
25 CREATE FUNCTION evergreen.upgrade_verify_no_dep_conflicts ( my_db_patch TEXT ) RETURNS BOOL AS $$
26     SELECT  COUNT(*) = 0
27       FROM  (SELECT * FROM evergreen.upgrade_list_applied_deprecates( $1 )
28                 UNION
29              SELECT * FROM evergreen.upgrade_list_applied_supersedes( $1 )
30                 UNION
31              SELECT * FROM evergreen.upgrade_list_applied_deprecated( $1 )
32                 UNION
33              SELECT * FROM evergreen.upgrade_list_applied_superseded( $1 ))x
34 $$ LANGUAGE SQL;
35
36 -- Raise an exception if there are, in fact, dep/sup confilct
37 CREATE FUNCTION evergreen.upgrade_deps_block_check ( my_db_patch TEXT, my_applied_to TEXT ) RETURNS BOOL AS $$
38 BEGIN
39     IF NOT evergreen.upgrade_verify_no_dep_conflicts( my_db_patch ) THEN
40         RAISE EXCEPTION '
41 Upgrade script % can not be applied:
42   applied deprecated scripts %
43   applied superseded scripts %
44   deprecated by %
45   superseded by %',
46             my_db_patch,
47             ARRAY_ACCUM(evergreen.upgrade_list_applied_deprecates(my_db_patch)),
48             ARRAY_ACCUM(evergreen.upgrade_list_applied_supersedes(my_db_patch)),
49             evergreen.upgrade_list_applied_deprecated(my_db_patch),
50             evergreen.upgrade_list_applied_superseded(my_db_patch);
51     END IF;
52
53     INSERT INTO config.upgrade_log (version, applied_to) VALUES (my_db_patch, my_applied_to);
54     RETURN TRUE;
55 END;
56 $$ LANGUAGE PLPGSQL;
57
58 COMMIT;