From f9f00c41370c310baa9518a9a23db43eb4293030 Mon Sep 17 00:00:00 2001 From: Chris Sharp Date: Fri, 14 Sep 2012 11:49:30 -0400 Subject: [PATCH] continual experimentation with script --- .../sql/Pg/version-upgrade/2.1-2.2-upgrade-db.sql | 311 +++++++++++---------- .../src/sql/Pg/version-upgrade/pines-blu-ray.sql | 5 +- .../version-upgrade/pines-pre-2.1-2.2-upgrade.sql | 3 +- .../version-upgrade/pines-upgrade-dep-tracking.sql | 115 ++++++++ 4 files changed, 276 insertions(+), 158 deletions(-) create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/pines-upgrade-dep-tracking.sql diff --git a/Open-ILS/src/sql/Pg/version-upgrade/2.1-2.2-upgrade-db.sql b/Open-ILS/src/sql/Pg/version-upgrade/2.1-2.2-upgrade-db.sql index fb7784feb5..c06836a85d 100644 --- a/Open-ILS/src/sql/Pg/version-upgrade/2.1-2.2-upgrade-db.sql +++ b/Open-ILS/src/sql/Pg/version-upgrade/2.1-2.2-upgrade-db.sql @@ -3,120 +3,120 @@ -- Don't require use of -vegversion=something \set eg_version '''2.2.0''' --- DROP objects that might have existed from a prior run of 0526 --- Yes this is ironic. -DROP TABLE IF EXISTS config.db_patch_dependencies; -ALTER TABLE config.upgrade_log DROP COLUMN IF EXISTS applied_to; -DROP FUNCTION IF EXISTS evergreen.upgrade_list_applied_deprecates(TEXT); -DROP FUNCTION IF EXISTS evergreen.upgrade_list_applied_supersedes(TEXT); - -BEGIN; -INSERT INTO config.upgrade_log (version) VALUES ('2.2.0'); - -INSERT INTO config.upgrade_log (version) VALUES ('0526'); --miker - -CREATE TABLE config.db_patch_dependencies ( - db_patch TEXT PRIMARY KEY, - supersedes TEXT[], - deprecates TEXT[] -); - -CREATE OR REPLACE FUNCTION evergreen.array_overlap_check (/* field */) RETURNS TRIGGER AS $$ -DECLARE - fld TEXT; - cnt INT; -BEGIN - fld := TG_ARGV[1]; - EXECUTE 'SELECT COUNT(*) FROM '|| TG_TABLE_SCHEMA ||'.'|| TG_TABLE_NAME ||' WHERE '|| fld ||' && ($1).'|| fld INTO cnt USING NEW; - IF cnt > 0 THEN - RAISE EXCEPTION 'Cannot insert duplicate array into field % of table %', fld, TG_TABLE_SCHEMA ||'.'|| TG_TABLE_NAME; - END IF; - RETURN NEW; -END; -$$ LANGUAGE PLPGSQL; - -CREATE TRIGGER no_overlapping_sups - BEFORE INSERT OR UPDATE ON config.db_patch_dependencies - FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('supersedes'); - -CREATE TRIGGER no_overlapping_deps - BEFORE INSERT OR UPDATE ON config.db_patch_dependencies - FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates'); - -ALTER TABLE config.upgrade_log - ADD COLUMN applied_to TEXT; - --- Provide a named type for patching functions -CREATE TYPE evergreen.patch AS (patch TEXT); - --- List applied db patches that are deprecated by (and block the application of) my_db_patch -CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_deprecates ( my_db_patch TEXT ) RETURNS SETOF evergreen.patch AS $$ - SELECT DISTINCT l.version - FROM config.upgrade_log l - JOIN config.db_patch_dependencies d ON (l.version::TEXT[] && d.deprecates) - WHERE d.db_patch = $1 -$$ LANGUAGE SQL; - --- List applied db patches that are superseded by (and block the application of) my_db_patch -CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_supersedes ( my_db_patch TEXT ) RETURNS SETOF evergreen.patch AS $$ - SELECT DISTINCT l.version - FROM config.upgrade_log l - JOIN config.db_patch_dependencies d ON (l.version::TEXT[] && d.supersedes) - WHERE d.db_patch = $1 -$$ LANGUAGE SQL; - --- List applied db patches that deprecates (and block the application of) my_db_patch -CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_deprecated ( my_db_patch TEXT ) RETURNS TEXT AS $$ - SELECT db_patch - FROM config.db_patch_dependencies - WHERE ARRAY[$1]::TEXT[] && deprecates -$$ LANGUAGE SQL; - --- List applied db patches that supersedes (and block the application of) my_db_patch -CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_superseded ( my_db_patch TEXT ) RETURNS TEXT AS $$ - SELECT db_patch - FROM config.db_patch_dependencies - WHERE ARRAY[$1]::TEXT[] && supersedes -$$ LANGUAGE SQL; - --- Make sure that no deprecated or superseded db patches are currently applied -CREATE OR REPLACE FUNCTION evergreen.upgrade_verify_no_dep_conflicts ( my_db_patch TEXT ) RETURNS BOOL AS $$ - SELECT COUNT(*) = 0 - FROM (SELECT * FROM evergreen.upgrade_list_applied_deprecates( $1 ) - UNION - SELECT * FROM evergreen.upgrade_list_applied_supersedes( $1 ) - UNION - SELECT * FROM evergreen.upgrade_list_applied_deprecated( $1 ) - UNION - SELECT * FROM evergreen.upgrade_list_applied_superseded( $1 ))x -$$ LANGUAGE SQL; - --- Raise an exception if there are, in fact, dep/sup confilct -CREATE OR REPLACE FUNCTION evergreen.upgrade_deps_block_check ( my_db_patch TEXT, my_applied_to TEXT ) RETURNS BOOL AS $$ -DECLARE - deprecates TEXT; - supersedes TEXT; -BEGIN - IF NOT evergreen.upgrade_verify_no_dep_conflicts( my_db_patch ) THEN - SELECT STRING_AGG(patch, ', ') INTO deprecates FROM evergreen.upgrade_list_applied_deprecates(my_db_patch); - SELECT STRING_AGG(patch, ', ') INTO supersedes FROM evergreen.upgrade_list_applied_supersedes(my_db_patch); - RAISE EXCEPTION ' -Upgrade script % can not be applied: - applied deprecated scripts % - applied superseded scripts % - deprecated by % - superseded by %', - my_db_patch, - ARRAY_AGG(evergreen.upgrade_list_applied_deprecates(my_db_patch)), - ARRAY_AGG(evergreen.upgrade_list_applied_supersedes(my_db_patch)), - evergreen.upgrade_list_applied_deprecated(my_db_patch), - evergreen.upgrade_list_applied_superseded(my_db_patch); - END IF; - - INSERT INTO config.upgrade_log (version, applied_to) VALUES (my_db_patch, my_applied_to); - RETURN TRUE; -END; -$$ LANGUAGE PLPGSQL; +---- DROP objects that might have existed from a prior run of 0526 +---- Yes this is ironic. +--DROP TABLE IF EXISTS config.db_patch_dependencies; +--ALTER TABLE config.upgrade_log DROP COLUMN IF EXISTS applied_to; +--DROP FUNCTION IF EXISTS evergreen.upgrade_list_applied_deprecates(TEXT); +--DROP FUNCTION IF EXISTS evergreen.upgrade_list_applied_supersedes(TEXT); +-- +--BEGIN; +--INSERT INTO config.upgrade_log (version) VALUES ('2.2.0'); +-- +--INSERT INTO config.upgrade_log (version) VALUES ('0526'); --miker +-- +--CREATE TABLE config.db_patch_dependencies ( +-- db_patch TEXT PRIMARY KEY, +-- supersedes TEXT[], +-- deprecates TEXT[] +--); +-- +--CREATE OR REPLACE FUNCTION evergreen.array_overlap_check (/* field */) RETURNS TRIGGER AS $$ +--DECLARE +-- fld TEXT; +-- cnt INT; +--BEGIN +-- fld := TG_ARGV[1]; +-- EXECUTE 'SELECT COUNT(*) FROM '|| TG_TABLE_SCHEMA ||'.'|| TG_TABLE_NAME ||' WHERE '|| fld ||' && ($1).'|| fld INTO cnt USING NEW; +-- IF cnt > 0 THEN +-- RAISE EXCEPTION 'Cannot insert duplicate array into field % of table %', fld, TG_TABLE_SCHEMA ||'.'|| TG_TABLE_NAME; +-- END IF; +-- RETURN NEW; +--END; +--$$ LANGUAGE PLPGSQL; +-- +--CREATE TRIGGER no_overlapping_sups +-- BEFORE INSERT OR UPDATE ON config.db_patch_dependencies +-- FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('supersedes'); +-- +--CREATE TRIGGER no_overlapping_deps +-- BEFORE INSERT OR UPDATE ON config.db_patch_dependencies +-- FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates'); +-- +--ALTER TABLE config.upgrade_log +-- ADD COLUMN applied_to TEXT; +-- +---- Provide a named type for patching functions +--CREATE TYPE evergreen.patch AS (patch TEXT); +-- +---- List applied db patches that are deprecated by (and block the application of) my_db_patch +--CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_deprecates ( my_db_patch TEXT ) RETURNS SETOF evergreen.patch AS $$ +-- SELECT DISTINCT l.version +-- FROM config.upgrade_log l +-- JOIN config.db_patch_dependencies d ON (l.version::TEXT[] && d.deprecates) +-- WHERE d.db_patch = $1 +--$$ LANGUAGE SQL; +-- +---- List applied db patches that are superseded by (and block the application of) my_db_patch +--CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_supersedes ( my_db_patch TEXT ) RETURNS SETOF evergreen.patch AS $$ +-- SELECT DISTINCT l.version +-- FROM config.upgrade_log l +-- JOIN config.db_patch_dependencies d ON (l.version::TEXT[] && d.supersedes) +-- WHERE d.db_patch = $1 +--$$ LANGUAGE SQL; +-- +---- List applied db patches that deprecates (and block the application of) my_db_patch +--CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_deprecated ( my_db_patch TEXT ) RETURNS TEXT AS $$ +-- SELECT db_patch +-- FROM config.db_patch_dependencies +-- WHERE ARRAY[$1]::TEXT[] && deprecates +--$$ LANGUAGE SQL; +-- +---- List applied db patches that supersedes (and block the application of) my_db_patch +--CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_superseded ( my_db_patch TEXT ) RETURNS TEXT AS $$ +-- SELECT db_patch +-- FROM config.db_patch_dependencies +-- WHERE ARRAY[$1]::TEXT[] && supersedes +--$$ LANGUAGE SQL; +-- +---- Make sure that no deprecated or superseded db patches are currently applied +--CREATE OR REPLACE FUNCTION evergreen.upgrade_verify_no_dep_conflicts ( my_db_patch TEXT ) RETURNS BOOL AS $$ +-- SELECT COUNT(*) = 0 +-- FROM (SELECT * FROM evergreen.upgrade_list_applied_deprecates( $1 ) +-- UNION +-- SELECT * FROM evergreen.upgrade_list_applied_supersedes( $1 ) +-- UNION +-- SELECT * FROM evergreen.upgrade_list_applied_deprecated( $1 ) +-- UNION +-- SELECT * FROM evergreen.upgrade_list_applied_superseded( $1 ))x +--$$ LANGUAGE SQL; +-- +---- Raise an exception if there are, in fact, dep/sup confilct +--CREATE OR REPLACE FUNCTION evergreen.upgrade_deps_block_check ( my_db_patch TEXT, my_applied_to TEXT ) RETURNS BOOL AS $$ +--DECLARE +-- deprecates TEXT; +-- supersedes TEXT; +--BEGIN +-- IF NOT evergreen.upgrade_verify_no_dep_conflicts( my_db_patch ) THEN +-- SELECT STRING_AGG(patch, ', ') INTO deprecates FROM evergreen.upgrade_list_applied_deprecates(my_db_patch); +-- SELECT STRING_AGG(patch, ', ') INTO supersedes FROM evergreen.upgrade_list_applied_supersedes(my_db_patch); +-- RAISE EXCEPTION ' +--Upgrade script % can not be applied: +-- applied deprecated scripts % +-- applied superseded scripts % +-- deprecated by % +-- superseded by %', +-- my_db_patch, +-- ARRAY_AGG(evergreen.upgrade_list_applied_deprecates(my_db_patch)), +-- ARRAY_AGG(evergreen.upgrade_list_applied_supersedes(my_db_patch)), +-- evergreen.upgrade_list_applied_deprecated(my_db_patch), +-- evergreen.upgrade_list_applied_superseded(my_db_patch); +-- END IF; +-- +-- INSERT INTO config.upgrade_log (version, applied_to) VALUES (my_db_patch, my_applied_to); +-- RETURN TRUE; +--END; +--$$ LANGUAGE PLPGSQL; -- Evergreen DB patch 0536.schema.lazy_circ-barcode_lookup.sql -- @@ -9749,49 +9749,50 @@ INSERT INTO vandelay.import_error ( code, description ) ----- Evergreen DB patch 0685.data.bluray_vr_format.sql ----- ----- FIXME: insert description of change, if needed ----- --- --- ----- check whether patch can be applied ---SELECT evergreen.upgrade_deps_block_check('0685', :eg_version); --- ----- FIXME: add/check SQL statements to perform the upgrade ---DO $FUNC$ ---DECLARE --- same_marc BOOL; ---BEGIN --- -- Check if it is already there --- PERFORM * FROM config.marc21_physical_characteristic_value_map v --- JOIN config.marc21_physical_characteristic_subfield_map s ON v.ptype_subfield = s.id --- WHERE s.ptype_key = 'v' AND s.subfield = 'e' AND s.start_pos = '4' AND s.length = '1' --- AND v.value = 's'; --- --- -- If it is, bail. --- IF FOUND THEN --- RETURN; --- END IF; +-- Evergreen DB patch 0685.data.bluray_vr_format.sql -- --- -- Otherwise, insert it --- INSERT INTO config.marc21_physical_characteristic_value_map (value,ptype_subfield,label) --- SELECT 's',id,'Blu-ray' --- FROM config.marc21_physical_characteristic_subfield_map --- WHERE ptype_key = 'v' AND subfield = 'e' AND start_pos = '4' AND length = '1'; +-- FIXME: insert description of change, if needed -- --- -- And reingest the blue-ray items so that things see the new value --- SELECT INTO same_marc enabled FROM config.internal_flag WHERE name = 'ingest.reingest.force_on_same_marc'; --- UPDATE config.internal_flag SET enabled = true WHERE name = 'ingest.reingest.force_on_same_marc'; --- UPDATE biblio.record_entry SET marc=marc WHERE id IN (SELECT record --- FROM --- metabib.full_rec a JOIN metabib.full_rec b USING (record) --- WHERE --- a.tag = 'LDR' AND a.value LIKE '______g%' --- AND b.tag = '007' AND b.value LIKE 'v___s%'); --- UPDATE config.internal_flag SET enabled = same_marc WHERE name = 'ingest.reingest.force_on_same_marc'; ---END; ---$FUNC$; + + +-- check whether patch can be applied +SELECT evergreen.upgrade_deps_block_check('0685', :eg_version); + +-- FIXME: add/check SQL statements to perform the upgrade +DO $FUNC$ +DECLARE + same_marc BOOL; +BEGIN + -- Check if it is already there + PERFORM * FROM config.marc21_physical_characteristic_value_map v + JOIN config.marc21_physical_characteristic_subfield_map s ON v.ptype_subfield = s.id + WHERE s.ptype_key = 'v' AND s.subfield = 'e' AND s.start_pos = '4' AND s.length = '1' + AND v.value = 's'; + + -- If it is, bail. + IF FOUND THEN + RETURN; + END IF; + + -- Otherwise, insert it + INSERT INTO config.marc21_physical_characteristic_value_map (value,ptype_subfield,label) + SELECT 's',id,'Blu-ray' + FROM config.marc21_physical_characteristic_subfield_map + WHERE ptype_key = 'v' AND subfield = 'e' AND start_pos = '4' AND length = '1'; + + -- And reingest the blue-ray items so that things see the new value + SELECT INTO same_marc enabled FROM config.internal_flag WHERE name = 'ingest.reingest.force_on_same_marc'; + UPDATE config.internal_flag SET enabled = true WHERE name = 'ingest.reingest.force_on_same_marc'; + UPDATE biblio.record_entry SET marc=marc WHERE id IN (SELECT record + FROM + metabib.full_rec a JOIN metabib.full_rec b USING (record) + WHERE + a.tag = 'LDR' AND a.value LIKE '______g%' + AND b.tag = '007' AND b.value LIKE 'v___s%') + AND NOT deleted; -- csharp + UPDATE config.internal_flag SET enabled = same_marc WHERE name = 'ingest.reingest.force_on_same_marc'; +END; +$FUNC$; -- Evergreen DB patch 0686.schema.auditor_boost.sql diff --git a/Open-ILS/src/sql/Pg/version-upgrade/pines-blu-ray.sql b/Open-ILS/src/sql/Pg/version-upgrade/pines-blu-ray.sql index 95dda74cd5..eb15668ea1 100644 --- a/Open-ILS/src/sql/Pg/version-upgrade/pines-blu-ray.sql +++ b/Open-ILS/src/sql/Pg/version-upgrade/pines-blu-ray.sql @@ -4,7 +4,7 @@ -- BEGIN; - +\set eg_version '''2.2.0''' -- check whether patch can be applied SELECT evergreen.upgrade_deps_block_check('0685', :eg_version); @@ -38,7 +38,8 @@ BEGIN metabib.full_rec a JOIN metabib.full_rec b USING (record) WHERE a.tag = 'LDR' AND a.value LIKE '______g%' - AND b.tag = '007' AND b.value LIKE 'v___s%'); + AND b.tag = '007' AND b.value LIKE 'v___s%') + AND NOT deleted; UPDATE config.internal_flag SET enabled = same_marc WHERE name = 'ingest.reingest.force_on_same_marc'; END; $FUNC$; diff --git a/Open-ILS/src/sql/Pg/version-upgrade/pines-pre-2.1-2.2-upgrade.sql b/Open-ILS/src/sql/Pg/version-upgrade/pines-pre-2.1-2.2-upgrade.sql index 06c6180257..ebcb22c805 100644 --- a/Open-ILS/src/sql/Pg/version-upgrade/pines-pre-2.1-2.2-upgrade.sql +++ b/Open-ILS/src/sql/Pg/version-upgrade/pines-pre-2.1-2.2-upgrade.sql @@ -45,5 +45,6 @@ ALTER TABLE biblio.record_entry ENABLE TRIGGER ALL; ALTER TABLE asset.copy DISABLE TRIGGER ALL; -- go ahead and find problem records if any exist because we don't want them to interfere with progress +\o /tmp/problem-bib-records.out SELECT id FROM biblio.record_entry WHERE is_valid_marcxml(marc) IS FALSE; - +\o diff --git a/Open-ILS/src/sql/Pg/version-upgrade/pines-upgrade-dep-tracking.sql b/Open-ILS/src/sql/Pg/version-upgrade/pines-upgrade-dep-tracking.sql new file mode 100644 index 0000000000..16ff50d700 --- /dev/null +++ b/Open-ILS/src/sql/Pg/version-upgrade/pines-upgrade-dep-tracking.sql @@ -0,0 +1,115 @@ +-- DROP objects that might have existed from a prior run of 0526 +-- Yes this is ironic. +DROP TABLE IF EXISTS config.db_patch_dependencies; +ALTER TABLE config.upgrade_log DROP COLUMN applied_to; +DROP FUNCTION evergreen.upgrade_list_applied_deprecates(TEXT); +DROP FUNCTION evergreen.upgrade_list_applied_supersedes(TEXT); + +BEGIN; + +INSERT INTO config.upgrade_log (version) VALUES ('0526'); --miker + +CREATE TABLE config.db_patch_dependencies ( + db_patch TEXT PRIMARY KEY, + supersedes TEXT[], + deprecates TEXT[] +); + +CREATE OR REPLACE FUNCTION evergreen.array_overlap_check (/* field */) RETURNS TRIGGER AS $$ +DECLARE + fld TEXT; + cnt INT; +BEGIN + fld := TG_ARGV[1]; + EXECUTE 'SELECT COUNT(*) FROM '|| TG_TABLE_SCHEMA ||'.'|| TG_TABLE_NAME ||' WHERE '|| fld ||' && ($1).'|| fld INTO cnt USING NEW; + IF cnt > 0 THEN + RAISE EXCEPTION 'Cannot insert duplicate array into field % of table %', fld, TG_TABLE_SCHEMA ||'.'|| TG_TABLE_NAME; + END IF; + RETURN NEW; +END; +$$ LANGUAGE PLPGSQL; + +CREATE TRIGGER no_overlapping_sups + BEFORE INSERT OR UPDATE ON config.db_patch_dependencies + FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('supersedes'); + +CREATE TRIGGER no_overlapping_deps + BEFORE INSERT OR UPDATE ON config.db_patch_dependencies + FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates'); + +ALTER TABLE config.upgrade_log + ADD COLUMN applied_to TEXT; + +-- Provide a named type for patching functions +CREATE TYPE evergreen.patch AS (patch TEXT); + +-- List applied db patches that are deprecated by (and block the application of) my_db_patch +CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_deprecates ( my_db_patch TEXT ) RETURNS SETOF evergreen.patch AS $$ + SELECT DISTINCT l.version + FROM config.upgrade_log l + JOIN config.db_patch_dependencies d ON (l.version::TEXT[] && d.deprecates) + WHERE d.db_patch = $1 +$$ LANGUAGE SQL; + +-- List applied db patches that are superseded by (and block the application of) my_db_patch +CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_supersedes ( my_db_patch TEXT ) RETURNS SETOF evergreen.patch AS $$ + SELECT DISTINCT l.version + FROM config.upgrade_log l + JOIN config.db_patch_dependencies d ON (l.version::TEXT[] && d.supersedes) + WHERE d.db_patch = $1 +$$ LANGUAGE SQL; + +-- List applied db patches that deprecates (and block the application of) my_db_patch +CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_deprecated ( my_db_patch TEXT ) RETURNS TEXT AS $$ + SELECT db_patch + FROM config.db_patch_dependencies + WHERE ARRAY[$1]::TEXT[] && deprecates +$$ LANGUAGE SQL; + +-- List applied db patches that supersedes (and block the application of) my_db_patch +CREATE OR REPLACE FUNCTION evergreen.upgrade_list_applied_superseded ( my_db_patch TEXT ) RETURNS TEXT AS $$ + SELECT db_patch + FROM config.db_patch_dependencies + WHERE ARRAY[$1]::TEXT[] && supersedes +$$ LANGUAGE SQL; + +-- Make sure that no deprecated or superseded db patches are currently applied +CREATE OR REPLACE FUNCTION evergreen.upgrade_verify_no_dep_conflicts ( my_db_patch TEXT ) RETURNS BOOL AS $$ + SELECT COUNT(*) = 0 + FROM (SELECT * FROM evergreen.upgrade_list_applied_deprecates( $1 ) + UNION + SELECT * FROM evergreen.upgrade_list_applied_supersedes( $1 ) + UNION + SELECT * FROM evergreen.upgrade_list_applied_deprecated( $1 ) + UNION + SELECT * FROM evergreen.upgrade_list_applied_superseded( $1 ))x +$$ LANGUAGE SQL; + +-- Raise an exception if there are, in fact, dep/sup confilct +CREATE OR REPLACE FUNCTION evergreen.upgrade_deps_block_check ( my_db_patch TEXT, my_applied_to TEXT ) RETURNS BOOL AS $$ +DECLARE + deprecates TEXT; + supersedes TEXT; +BEGIN + IF NOT evergreen.upgrade_verify_no_dep_conflicts( my_db_patch ) THEN + SELECT STRING_AGG(patch, ', ') INTO deprecates FROM evergreen.upgrade_list_applied_deprecates(my_db_patch); + SELECT STRING_AGG(patch, ', ') INTO supersedes FROM evergreen.upgrade_list_applied_supersedes(my_db_patch); + RAISE EXCEPTION ' +Upgrade script % can not be applied: + applied deprecated scripts % + applied superseded scripts % + deprecated by % + superseded by %', + my_db_patch, + ARRAY_AGG(evergreen.upgrade_list_applied_deprecates(my_db_patch)), + ARRAY_AGG(evergreen.upgrade_list_applied_supersedes(my_db_patch)), + evergreen.upgrade_list_applied_deprecated(my_db_patch), + evergreen.upgrade_list_applied_superseded(my_db_patch); + END IF; + + INSERT INTO config.upgrade_log (version, applied_to) VALUES (my_db_patch, my_applied_to); + RETURN TRUE; +END; +$$ LANGUAGE PLPGSQL; + +COMMIT; -- 2.11.0