8588929d1da80158a5393275af041957fb4bf97e
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade_simple_record.sql
1
2 BEGIN;
3
4 CREATE TABLE reporter.materialized_simple_record AS SELECT * FROM reporter.super_simple_record WHERE 1=0;
5
6 INSERT INTO reporter.materialized_simple_record
7     (id,fingerprint,quality,tcn_source,tcn_value,title,author,publisher,pubdate,isbn,issn)
8     SELECT DISTINCT ON (id) * FROM reporter.super_simple_record;
9
10 ALTER TABLE reporter.materialized_simple_record ADD PRIMARY KEY (id);
11
12 CREATE OR REPLACE VIEW reporter.super_simple_record AS SELECT * FROM reporter.materialized_simple_record;
13
14 CREATE OR REPLACE VIEW reporter.old_super_simple_record AS
15 SELECT  r.id,
16     r.fingerprint,
17     r.quality,
18     r.tcn_source,
19     r.tcn_value,
20     title.value AS title,
21     FIRST(author.value) AS author,
22     publisher.value AS publisher,
23     SUBSTRING(pubdate.value FROM $$\d+$$) AS pubdate,
24     ARRAY_ACCUM( SUBSTRING(isbn.value FROM $$^\S+$$) ) AS isbn,
25     ARRAY_ACCUM( SUBSTRING(issn.value FROM $$^\S+$$) ) AS issn
26   FROM  biblio.record_entry r
27     LEFT JOIN metabib.full_rec title ON (r.id = title.record AND title.tag = '245' AND title.subfield = 'a')
28     LEFT JOIN metabib.full_rec author ON (r.id = author.record AND author.tag IN ('100','110','111') AND author.subfield = 'a')
29     LEFT JOIN metabib.full_rec publisher ON (r.id = publisher.record AND publisher.tag = '260' AND publisher.subfield = 'b')
30     LEFT JOIN metabib.full_rec pubdate ON (r.id = pubdate.record AND pubdate.tag = '260' AND pubdate.subfield = 'c')
31     LEFT JOIN metabib.full_rec isbn ON (r.id = isbn.record AND isbn.tag IN ('024', '020') AND isbn.subfield IN ('a','z'))
32     LEFT JOIN metabib.full_rec issn ON (r.id = issn.record AND issn.tag = '022' AND issn.subfield = 'a')
33   GROUP BY 1,2,3,4,5,6,8,9;
34
35 CREATE OR REPLACE FUNCTION reporter.simple_rec_sync () RETURNS TRIGGER AS $$
36 BEGIN
37     IF TG_OP IN ('UPDATE','DELETE') THEN
38         DELETE FROM reporter.materialized_simple_record WHERE id = OLD.record;
39     END IF;
40
41     IF TG_OP IN ('INSERT','UPDATE') AND NOT NEW.deleted THEN
42         INSERT INTO reporter.materialized_simple_record SELECT * FROM reporter.old_super_simple_record WHERE id = NEW.record;
43     END IF;
44
45 END;
46 $$ LANGUAGE PLPGSQL;
47
48 CREATE TRIGGER zzz_update_materialized_simple_record_tgr
49     AFTER INSERT OR UPDATE OR DELETE ON metabib.full_rec
50     FOR EACH ROW EXECUTE PROCEDURE reporter.simple_rec_sync();
51
52 COMMIT;
53