]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0196.schema.vandelay.bib-tcn-extraction-function.sql
Fix 0752 and 0756 upgrade scripts
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0196.schema.vandelay.bib-tcn-extraction-function.sql
1
2 BEGIN;
3
4 INSERT INTO config.upgrade_log (version) VALUES ('0196'); -- miker
5
6 CREATE TYPE vandelay.tcn_data AS (tcn TEXT, tcn_source TEXT, used BOOL);
7 CREATE OR REPLACE FUNCTION vandelay.find_bib_tcn_data ( xml TEXT ) RETURNS SETOF vandelay.tcn_data AS $_$
8 DECLARE
9     eg_tcn          TEXT;
10     eg_tcn_source   TEXT;
11     output          vandelay.tcn_data%ROWTYPE;
12 BEGIN
13
14     -- 001/003
15     eg_tcn := BTRIM((oils_xpath('//*[@tag="001"]/text()',xml))[1]);
16     IF eg_tcn IS NOT NULL AND eg_tcn <> '' THEN
17
18         eg_tcn_source := BTRIM((oils_xpath('//*[@tag="003"]/text()',xml))[1]);
19         IF eg_tcn_source IS NULL OR eg_tcn_source = '' THEN
20             eg_tcn_source := 'System Local';
21         END IF;
22
23         PERFORM id FROM biblio.record_entry WHERE tcn_value = eg_tcn  AND NOT deleted;
24
25         IF NOT FOUND THEN
26             output.used := FALSE;
27         ELSE
28             output.used := TRUE;
29         END IF;
30
31         output.tcn := eg_tcn;
32         output.tcn_source := eg_tcn_source;
33         RETURN NEXT output;
34
35     END IF;
36
37     -- 901 ab
38     eg_tcn := BTRIM((oils_xpath('//*[@tag="901"]/*[@code="a"]/text()',xml))[1]);
39     IF eg_tcn IS NOT NULL AND eg_tcn <> '' THEN
40
41         eg_tcn_source := BTRIM((oils_xpath('//*[@tag="901"]/*[@code="b"]/text()',xml))[1]);
42         IF eg_tcn_source IS NULL OR eg_tcn_source = '' THEN
43             eg_tcn_source := 'System Local';
44         END IF;
45
46         PERFORM id FROM biblio.record_entry WHERE tcn_value = eg_tcn  AND NOT deleted;
47
48         IF NOT FOUND THEN
49             output.used := FALSE;
50         ELSE
51             output.used := TRUE;
52         END IF;
53
54         output.tcn := eg_tcn;
55         output.tcn_source := eg_tcn_source;
56         RETURN NEXT output;
57
58     END IF;
59
60     -- 039 ab
61     eg_tcn := BTRIM((oils_xpath('//*[@tag="039"]/*[@code="a"]/text()',xml))[1]);
62     IF eg_tcn IS NOT NULL AND eg_tcn <> '' THEN
63
64         eg_tcn_source := BTRIM((oils_xpath('//*[@tag="039"]/*[@code="b"]/text()',xml))[1]);
65         IF eg_tcn_source IS NULL OR eg_tcn_source = '' THEN
66             eg_tcn_source := 'System Local';
67         END IF;
68
69         PERFORM id FROM biblio.record_entry WHERE tcn_value = eg_tcn  AND NOT deleted;
70
71         IF NOT FOUND THEN
72             output.used := FALSE;
73         ELSE
74             output.used := TRUE;
75         END IF;
76
77         output.tcn := eg_tcn;
78         output.tcn_source := eg_tcn_source;
79         RETURN NEXT output;
80
81     END IF;
82
83     -- 020 a
84     eg_tcn := REGEXP_REPLACE((oils_xpath('//*[@tag="020"]/*[@code="a"]/text()',xml))[1], $re$^(\w+).*?$$re$, $re$\1$re$);
85     IF eg_tcn IS NOT NULL AND eg_tcn <> '' THEN
86
87         eg_tcn_source := 'ISBN';
88
89         PERFORM id FROM biblio.record_entry WHERE tcn_value = eg_tcn  AND NOT deleted;
90
91         IF NOT FOUND THEN
92             output.used := FALSE;
93         ELSE
94             output.used := TRUE;
95         END IF;
96
97         output.tcn := eg_tcn;
98         output.tcn_source := eg_tcn_source;
99         RETURN NEXT output;
100
101     END IF;
102
103     -- 022 a
104     eg_tcn := REGEXP_REPLACE((oils_xpath('//*[@tag="022"]/*[@code="a"]/text()',xml))[1], $re$^(\w+).*?$$re$, $re$\1$re$);
105     IF eg_tcn IS NOT NULL AND eg_tcn <> '' THEN
106
107         eg_tcn_source := 'ISSN';
108
109         PERFORM id FROM biblio.record_entry WHERE tcn_value = eg_tcn  AND NOT deleted;
110
111         IF NOT FOUND THEN
112             output.used := FALSE;
113         ELSE
114             output.used := TRUE;
115         END IF;
116
117         output.tcn := eg_tcn;
118         output.tcn_source := eg_tcn_source;
119         RETURN NEXT output;
120
121     END IF;
122
123     -- 010 a
124     eg_tcn := REGEXP_REPLACE((oils_xpath('//*[@tag="010"]/*[@code="a"]/text()',xml))[1], $re$^(\w+).*?$$re$, $re$\1$re$);
125     IF eg_tcn IS NOT NULL AND eg_tcn <> '' THEN
126
127         eg_tcn_source := 'LCCN';
128
129         PERFORM id FROM biblio.record_entry WHERE tcn_value = eg_tcn  AND NOT deleted;
130
131         IF NOT FOUND THEN
132             output.used := FALSE;
133         ELSE
134             output.used := TRUE;
135         END IF;
136
137         output.tcn := eg_tcn;
138         output.tcn_source := eg_tcn_source;
139         RETURN NEXT output;
140
141     END IF;
142
143     -- 035 a
144     eg_tcn := REGEXP_REPLACE((oils_xpath('//*[@tag="035"]/*[@code="a"]/text()',xml))[1], $re$^.*?(\w+)$$re$, $re$\1$re$);
145     IF eg_tcn IS NOT NULL AND eg_tcn <> '' THEN
146
147         eg_tcn_source := 'System Legacy';
148
149         PERFORM id FROM biblio.record_entry WHERE tcn_value = eg_tcn  AND NOT deleted;
150
151         IF NOT FOUND THEN
152             output.used := FALSE;
153         ELSE
154             output.used := TRUE;
155         END IF;
156
157         output.tcn := eg_tcn;
158         output.tcn_source := eg_tcn_source;
159         RETURN NEXT output;
160
161     END IF;
162
163     RETURN;
164 END;
165 $_$ LANGUAGE PLPGSQL;
166
167 COMMIT;
168