3 INSERT INTO config.upgrade_log (version) VALUES ('0526'); --miker
5 CREATE TABLE config.db_patch_dependencies (
6 db_patch TEXT PRIMARY KEY,
9 CONSTRAINT supersede_once EXCLUDE USING GIST ( supersedes WITH && ),
10 CONSTRAINT deprecate_once EXCLUDE USING GIST ( deprecates WITH && )
13 ALTER TABLE config.upgrade_log
14 ADD COLUMN applied_to TEXT;
16 -- List applied db patches that are deprecated by (and block the application of) my_db_patch
17 CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_deprecates ( my_db_patch TEXT ) RETURNS SETOF TEXT AS $$
18 SELECT DISTINCT l.version
19 FROM config.upgrade_log l
20 JOIN config.db_patch_dependencies d ON (l.version::TEXT[] && d.deprecates)
21 WHERE d.db_patch = my_db_patch
24 -- List applied db patches that are superseded by (and block the application of) my_db_patch
25 CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_supersedes ( my_db_patch TEXT ) RETURNS SETOF TEXT AS $$
26 SELECT DISTINCT l.version
27 FROM config.upgrade_log l
28 JOIN config.db_patch_dependencies d ON (l.version::TEXT[] && d.supersedes)
29 WHERE d.db_patch = my_db_patch
32 -- List applied db patches that deprecates (and block the application of) my_db_patch
33 CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_superseded ( my_db_patch TEXT ) RETURNS TEXT AS $$
35 FROM config.db_patch_dependencies
36 WHERE my_db_patch::TEXT[] && deprecates
39 -- List applied db patches that supersedes (and block the application of) my_db_patch
40 CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_superseded ( my_db_patch TEXT ) RETURNS TEXT AS $$
42 FROM config.db_patch_dependencies
43 WHERE my_db_patch::TEXT[] && supersedes
46 -- Make sure that no deprecated or superseded db patches are currently applied
47 CREATE OR REPLACE FUNCTION evergreen.upgrade_verify_no_dep_conflicts ( my_db_patch TEXT ) RETURNS BOOL AS $$
49 FROM (SELECT * FROM evergreen.upgrade_list_applied_deprecates( my_db_patch )
51 SELECT * FROM evergreen.upgrade_list_applied_supersedes( my_db_patch )
53 SELECT * FROM evergreen.upgrade_list_applied_deprecated( my_db_patch )
55 SELECT * FROM evergreen.upgrade_list_applied_superseded( my_db_patch ))x
58 -- Raise an exception if there are, in fact, dep/sup confilct
59 CREATE OR REPLACE FUNCTION evergreen.upgrade_deps_block_check ( my_db_patch TEXT, my_applied_to TEXT ) RETURNS BOOL AS $$
61 IF NOT evergreen.upgrade_verify_no_dep_conflicts( my_db_patch ) THEN
63 Upgrade script % can not be applied:
64 applied deprecated scripts %
65 applied superseded scripts %
69 ARRAY_ACUM(evergreen.upgrade_list_applied_deprecates(my_db_patch)),
70 ARRAY_ACUM(evergreen.upgrade_list_applied_supersedes(my_db_patch)),
71 evergreen.upgrade_list_applied_deprecated(my_db_patch),
72 evergreen.upgrade_list_applied_superseded(my_db_patch);
75 INSERT INTO config.upgrade_log (version, applied_to) VALUES (my_db_patch, my_applied_to);