Z39.50 Batch Search/Overlay : SQL / IDL
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / XXXX.schema.z39-batch-fetch-overlay.sql
1 BEGIN;
2
3 -- TODO version check
4
5 CREATE OR REPLACE FUNCTION 
6     evergreen.z3950_name_is_valid(TEXT) RETURNS BOOLEAN AS $func$
7     SELECT EXISTS (SELECT 1 FROM config.z3950_attr WHERE name = $1);
8 $func$ LANGUAGE SQL STRICT IMMUTABLE;
9
10
11 CREATE TABLE config.z3950_index_field_map (
12     id              SERIAL  PRIMARY KEY,
13     label           TEXT    NOT NULL, -- i18n
14     metabib_field   INTEGER REFERENCES config.metabib_field(id),
15     record_attr     TEXT    REFERENCES config.record_attr_definition(name),
16     z3950_attr      INTEGER REFERENCES config.z3950_attr(id),
17     z3950_attr_type TEXT,-- REFERENCES config.z3950_attr(name)
18     CONSTRAINT metabib_field_or_record_attr CHECK (
19         metabib_field IS NOT NULL OR 
20         record_attr IS NOT NULL
21     ),
22     CONSTRAINT attr_or_attr_type CHECK (
23         z3950_attr IS NOT NULL OR 
24         z3950_attr_type IS NOT NULL
25     ),
26     -- ensure the selected z3950_attr_type refers to a valid attr name
27     CONSTRAINT valid_z3950_attr_type CHECK (
28         z3950_attr_type IS NULL OR 
29             evergreen.z3950_name_is_valid(z3950_attr_type)
30     )
31 );
32
33
34 -- seed data
35
36 INSERT INTO config.z3950_index_field_map 
37     (id, label, metabib_field, z3950_attr_type) VALUES 
38 (1, oils_i18n_gettext(1, 'Title',   'czifm', 'label'), 5,  'title'),
39 (2, oils_i18n_gettext(2, 'Author',  'czifm', 'label'), 8,  'author'),
40 (3, oils_i18n_gettext(3, 'ISBN',    'czifm', 'label'), 18, 'isbn'),
41 (4, oils_i18n_gettext(4, 'ISSN',    'czifm', 'label'), 19, 'issn'),
42 (5, oils_i18n_gettext(5, 'LCCN',    'czifm', 'label'), 30, 'lccn');
43
44 INSERT INTO config.z3950_index_field_map 
45     (id, label, record_attr, z3950_attr_type) VALUES 
46 (6, oils_i18n_gettext(6, 'Pubdate',  'czifm', 'label'),'pubdate', 'pubdate'),
47 (7, oils_i18n_gettext(7, 'Item Type', 'czifm', 'label'),'item_type', 'item_type');
48
49
50 -- let's leave room for more stock mappings
51 SELECT SETVAL('config.z3950_index_field_map_id_seq'::TEXT, 1000);
52
53 COMMIT;