]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/oai.sql
LP#1729620 New optional feature: an OAI2 provider service.
[working/Evergreen.git] / Open-ILS / src / sql / Pg / oai.sql
1 -- VIEWS for the oai service
2 CREATE SCHEMA oai;
3
4 -- The view presents a lean table with unique bre.tc-numbers for oai paging;
5 CREATE VIEW oai.biblio AS
6   SELECT
7     bre.id                             AS tcn,
8     bre.edit_date                      AS datestamp,
9     bre.deleted                        AS deleted
10   FROM
11     biblio.record_entry bre
12   ORDER BY
13     bre.id;
14
15 -- The view presents a lean table with unique are.tc-numbers for oai paging;
16 CREATE VIEW oai.authority AS
17   SELECT
18     are.id               AS tcn,
19     are.edit_date        AS datestamp,
20     are.deleted          AS deleted
21   FROM
22     authority.record_entry AS are
23   ORDER BY
24     are.id;
25
26 -- If an edit date changes in the asset.call_number or asset.copy and you want this to persist to an OAI2 datestamp,
27 -- then add these stored procedures and triggers:
28 CREATE OR REPLACE FUNCTION oai.datestamp(rid BIGINT)
29   RETURNS VOID AS $$
30 BEGIN
31   UPDATE biblio.record_entry AS bre
32   SET edit_date = now()
33   WHERE bre.id = rid;
34 END
35 $$ LANGUAGE plpgsql;
36
37 CREATE OR REPLACE FUNCTION oai.call_number_datestamp()
38   RETURNS TRIGGER AS $$
39 BEGIN
40   IF TG_OP = 'DELETE'
41   THEN
42     PERFORM oai.datestamp(OLD.record);
43     RETURN OLD;
44   END IF;
45
46   PERFORM oai.datestamp(NEW.record);
47   RETURN NEW;
48
49 END
50 $$ LANGUAGE plpgsql;
51
52 CREATE OR REPLACE FUNCTION oai.copy_datestamp()
53   RETURNS TRIGGER AS $$
54 BEGIN
55   IF TG_OP = 'DELETE'
56   THEN
57     PERFORM oai.datestamp((SELECT acn.record FROM asset.call_number as acn WHERE acn.id = OLD.call_number));
58     RETURN OLD;
59   END IF;
60
61   PERFORM oai.datestamp((SELECT acn.record FROM asset.call_number as acn WHERE acn.id = NEW.call_number));
62   RETURN NEW;
63
64 END
65 $$ LANGUAGE plpgsql;
66
67 CREATE TRIGGER call_number_datestamp AFTER INSERT OR UPDATE OR DELETE ON asset.call_number FOR EACH ROW EXECUTE PROCEDURE oai.call_number_datestamp();
68 CREATE TRIGGER copy_datestamp AFTER INSERT OR UPDATE OR DELETE ON asset.copy FOR EACH ROW EXECUTE PROCEDURE oai.copy_datestamp();