Link checker: DB layer fixes
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / XXXX.schema.url_verify.sql
1 BEGIN;
2
3 INSERT INTO container.biblio_record_entry_bucket_type (code, label) VALUES ('url_verify', 'URL Verification Queue');
4
5 DROP SCHEMA IF EXISTS url_verify CASCADE;
6
7 CREATE SCHEMA url_verify;
8
9 CREATE TABLE url_verify.session (
10     id          SERIAL                      PRIMARY KEY,
11     name        TEXT                        NOT NULL,
12     owning_lib  INT                         NOT NULL REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED,
13     creator     INT                         NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED,
14     container   INT                         NOT NULL REFERENCES container.biblio_record_entry_bucket (id) DEFERRABLE INITIALLY DEFERRED,
15     create_time TIMESTAMP WITH TIME ZONE    NOT NULL DEFAULT NOW(),
16     search      TEXT                        NOT NULL,
17     CONSTRAINT uvs_name_once_per_lib UNIQUE (name, owning_lib)
18 );
19
20 CREATE TABLE url_verify.url_selector (
21     id      SERIAL  PRIMARY KEY,
22     xpath   TEXT    NOT NULL,
23     session INT     NOT NULL REFERENCES url_verify.session (id) DEFERRABLE INITIALLY DEFERRED,
24     CONSTRAINT tag_once_per_sess UNIQUE (xpath, session)
25 );
26
27 CREATE TABLE url_verify.url (
28     id              SERIAL  PRIMARY KEY,
29     redirect_from   INT     REFERENCES url_verify.url(id) DEFERRABLE INITIALLY DEFERRED,
30     item            INT     REFERENCES container.biblio_record_entry_bucket_item (id) DEFERRABLE INITIALLY DEFERRED,
31     url_selector    INT     REFERENCES url_verify.url_selector (id) DEFERRABLE INITIALLY DEFERRED,
32     tag             TEXT,
33     subfield        TEXT,
34     ord             INT,
35     full_url        TEXT    NOT NULL,
36     scheme          TEXT,
37     username        TEXT,
38     password        TEXT,
39     host            TEXT,
40     domain          TEXT,
41     tld             TEXT,
42     port            TEXT,
43     path            TEXT,
44     page            TEXT,
45     query           TEXT,
46     fragment        TEXT,
47     CONSTRAINT redirect_or_from_item CHECK (
48         redirect_from IS NOT NULL OR (
49             item         IS NOT NULL AND
50             url_selector IS NOT NULL AND
51             tag          IS NOT NULL AND
52             subfield     IS NOT NULL AND
53             ord          IS NOT NULL
54         )
55     )
56 );
57
58 CREATE TABLE url_verify.verification_attempt (
59     id          SERIAL                      PRIMARY KEY,
60     usr         INT                         NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED,
61     session     INT                         NOT NULL REFERENCES url_verify.session (id) DEFERRABLE INITIALLY DEFERRED,
62     start_time  TIMESTAMP WITH TIME ZONE    NOT NULL DEFAULT NOW(),
63     finish_time TIMESTAMP WITH TIME ZONE
64 );
65  
66 CREATE TABLE url_verify.url_verification (
67     id          SERIAL                      PRIMARY KEY,
68     url         INT                         NOT NULL REFERENCES url_verify.url (id) DEFERRABLE INITIALLY DEFERRED,
69     attempt     INT                         NOT NULL REFERENCES url_verify.verification_attempt (id) DEFERRABLE INITIALLY DEFERRED,
70     req_time    TIMESTAMP WITH TIME ZONE    NOT NULL DEFAULT NOW(),
71     res_time    TIMESTAMP WITH TIME ZONE, 
72     res_code    INT                         CHECK (res_code BETWEEN 100 AND 999), -- we know > 599 will never be valid HTTP code, but we use 9XX for other stuff
73     res_text    TEXT, 
74     redirect_to INT                         REFERENCES url_verify.url (id) DEFERRABLE INITIALLY DEFERRED -- if redirected
75 );
76
77 CREATE TABLE url_verify.filter_set (
78     id          SERIAL                      PRIMARY KEY,
79     name        TEXT                        NOT NULL,
80     owning_lib  INT                         NOT NULL REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED,
81     creator     INT                         NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED,
82     create_time TIMESTAMP WITH TIME ZONE    NOT NULL DEFAULT NOW(),
83     filter      TEXT                        NOT NULL,
84     CONSTRAINT uvfs_name_once_per_lib UNIQUE (name, owning_lib)
85 );
86  
87 COMMIT;