LP#1997485: Include authority headings in symspell dict
[evergreen-equinox.git] / Open-ILS / src / sql / Pg / upgrade / YYYY.schema.DYM-authority-data-dictionary.sql
1 BEGIN;
2
3 -- Bring authorized headings into the symspell dictionary. Side
4 -- loader should be used for Real Sites.  See below the COMMIT.
5 /*
6 SELECT  search.symspell_build_and_merge_entries(h.value, m.field_class, NULL)
7   FROM  authority.simple_heading h
8         JOIN authority.control_set_auth_field_metabib_field_map_refs a ON (a.authority_field = a.atag)
9         JOIN config.metabib_field m ON (a.metabib_field=m.id);
10 */
11
12 CREATE OR REPLACE FUNCTION search.symspell_maintain_entries () RETURNS TRIGGER AS $f$
13 DECLARE
14     search_class    TEXT;
15     new_value       TEXT := NULL;
16     old_value       TEXT := NULL;
17 BEGIN
18
19     IF TG_TABLE_SCHEMA = 'authority' THEN
20         SELECT  m.field_class INTO search_class
21           FROM  authority.control_set_auth_field_metabib_field_map_refs a
22                 JOIN config.metabib_field m ON (a.metabib_field=m.id)
23           WHERE a.authority_field = NEW.atag;
24
25         IF NOT FOUND THEN
26             RETURN NULL;
27         END IF;
28     ELSE
29         search_class := COALESCE(TG_ARGV[0], SPLIT_PART(TG_TABLE_NAME,'_',1));
30     END IF;
31
32     IF TG_OP IN ('INSERT', 'UPDATE') THEN
33         new_value := NEW.value;
34     END IF;
35
36     IF TG_OP IN ('DELETE', 'UPDATE') THEN
37         old_value := OLD.value;
38     END IF;
39
40     PERFORM * FROM search.symspell_build_and_merge_entries(new_value, search_class, old_value);
41
42     RETURN NULL; -- always fired AFTER
43 END;
44 $f$ LANGUAGE PLPGSQL;
45
46 CREATE TRIGGER maintain_symspell_entries_tgr
47     AFTER INSERT OR UPDATE OR DELETE ON authority.simple_heading
48     FOR EACH ROW EXECUTE PROCEDURE search.symspell_maintain_entries();
49
50 COMMIT;
51
52 -- Generate symspell sideloader data with authority headings included.
53
54 /*
55
56 \a
57 \t
58
59 \o title
60 select value from metabib.title_field_entry;
61 select  h.value
62   from  authority.simple_heading h
63         join authority.control_set_auth_field_metabib_field_map_refs a on (a.authority_field = a.atag)
64         join config.metabib_field m on (a.metabib_field=m.id and m.field_class='title');
65
66 \o author
67 select value from metabib.author_field_entry;
68 select  h.value
69   from  authority.simple_heading h
70         join authority.control_set_auth_field_metabib_field_map_refs a on (a.authority_field = a.atag)
71         join config.metabib_field m on (a.metabib_field=m.id and m.field_class='author');
72
73 \o subject
74 select value from metabib.subject_field_entry;
75 select  h.value
76   from  authority.simple_heading h
77         join authority.control_set_auth_field_metabib_field_map_refs a on (a.authority_field = a.atag)
78         join config.metabib_field m on (a.metabib_field=m.id and m.field_class='subject');
79
80 \o series
81 select value from metabib.series_field_entry;
82
83 \o identifier
84 select value from metabib.identifier_field_entry;
85
86 \o keyword
87 select value from metabib.keyword_field_entry;
88
89 \o
90 \a
91 \t
92
93 */
94