LP#1552861: add upgrade script
authorGalen Charlton <gmc@equinoxinitiative.org>
Wed, 10 May 2017 17:00:46 +0000 (10:00 -0700)
committerGalen Charlton <gmc@equinoxinitiative.org>
Mon, 15 May 2017 21:02:09 +0000 (17:02 -0400)
Also, a test plan for the fix:

[1] Set the vandelay.default_match_set setting for several
    org units. In at least one case, set it to the ID
    of a valid vandelay.match_set entry; in another case,
    set it to a numeric ID that doesn't match any existing
    vms rows; and finally, in another case set it to the
    name of a match set.
[2] Apply the patch and run the database update. Verify that
    the update script will indicate that there are invalid
    settings, then delete.
[3] Open the library settings editor and verify that in the
    case where a valid match set was used, the editor provides
    a drop-down with possible vms values with the correct
    one selected.

Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Open-ILS/src/sql/Pg/upgrade/XXXX.data.change_default_match_set_ous_type.sql [new file with mode: 0644]

diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.data.change_default_match_set_ous_type.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.change_default_match_set_ous_type.sql
new file mode 100644 (file)
index 0000000..67ac116
--- /dev/null
@@ -0,0 +1,38 @@
+BEGIN;
+
+-- SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
+
+UPDATE config.org_unit_setting_type
+SET datatype = 'link', fm_class = 'vms'
+WHERE name = 'vandelay.default_match_set'
+AND   datatype = 'string'
+AND   fm_class IS NULL;
+
+\echo Existing vandelay.default_match_set that do not
+\echo correspond to match sets
+SELECT aou.shortname, aous.value
+FROM   actor.org_unit_setting aous
+JOIN   actor.org_unit aou ON (aou.id = aous.org_unit)
+WHERE  aous.name = 'vandelay.default_match_set'
+AND    (
+  value !~ '^"[0-9]+"$'
+  OR
+    oils_json_to_text(aous.value)::INT NOT IN (
+      SELECT id FROM vandelay.match_set
+    )
+);
+
+\echo And now deleting the bad values, as otherwise they
+\echo will break the Library Settings Editor.
+DELETE
+FROM actor.org_unit_setting aous
+WHERE  aous.name = 'vandelay.default_match_set'
+AND    (
+  value !~ '^"[0-9]+"$'
+  OR
+    oils_json_to_text(aous.value)::INT NOT IN (
+      SELECT id FROM vandelay.match_set
+    )
+);
+
+COMMIT;