]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/WWWW.schema.redo_config_metabib_field_sequence.sql
Upgrade script for config.metabib_field sequence redo
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / WWWW.schema.redo_config_metabib_field_sequence.sql
1 BEGIN;
2
3 -- check whether patch can be applied
4 --SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
5
6 ALTER TABLE config.metabib_search_alias DROP CONSTRAINT metabib_search_alias_field_fkey;
7 ALTER TABLE metabib.browse_entry_def_map DROP CONSTRAINT browse_entry_def_map_def_fkey;
8
9 ALTER TABLE config.metabib_search_alias ADD CONSTRAINT metabib_search_alias_field_fkey FOREIGN KEY (field) REFERENCES config.metabib_field(id) ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED;
10 ALTER TABLE metabib.browse_entry_def_map ADD CONSTRAINT browse_entry_def_map_def_fkey FOREIGN KEY (def) REFERENCES config.metabib_field(id) ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED;
11
12
13 DROP FUNCTION IF EXISTS config.modify_metabib_field(source INT, target INT);
14 CREATE FUNCTION config.modify_metabib_field(v_source INT, target INT) RETURNS INT AS $func$
15 DECLARE
16     f_class TEXT;
17     check_id INT;
18     target_id INT;
19 BEGIN
20     SELECT field_class INTO f_class FROM config.metabib_field WHERE id = v_source;
21     IF NOT FOUND THEN
22         RETURN 0;
23     END IF;
24     IF target IS NULL THEN
25         target_id = v_source + 1000;
26     ELSE
27         target_id = target;
28     END IF;
29     SELECT id FROM config.metabib_field INTO check_id WHERE id = target_id;
30     IF FOUND THEN
31         RAISE NOTICE 'Cannot bump config.metabib_field.id from % to %; the target ID already exists.', v_source, target_id;
32         RETURN 0;
33     END IF;
34     UPDATE config.metabib_field SET id = target_id WHERE id = v_source;
35     EXECUTE ' UPDATE metabib.' || f_class || '_field_entry SET field = ' || target_id || ' WHERE field = ' || v_source;
36     UPDATE config.metabib_field_index_norm_map SET field = target_id WHERE field = v_source;
37     UPDATE search.relevance_adjustment SET field = target_id WHERE field = v_source;
38     UPDATE config.metabib_search_alias SET field = target_id WHERE field = v_source;
39     UPDATE metabib.browse_entry_def_map SET def = target_id WHERE def = v_source;
40     RETURN 1;
41 END;
42 $func$ LANGUAGE PLPGSQL;
43
44 SELECT config.modify_metabib_field(id, NULL)
45     FROM config.metabib_field
46     WHERE id > 30;
47
48 SELECT SETVAL('config.metabib_field_id_seq', GREATEST(1000, (SELECT MAX(id) FROM config.metabib_field)));
49
50 COMMIT;