d1da1138ab1e280b8a307da79e73876d0ae61ba4
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / XXXX.schema.partitioned-ingest.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
4
5 INSERT INTO config.global_flag (name, label) -- defaults to enabled=FALSE
6     VALUES (
7         'ingest.skip_browse_indexing',
8         oils_i18n_gettext(
9             'ingest.skip_browse_indexing',
10             'Bibliographic Record Ingest: Disable extraction and indexing of browse data',
11             'cgf', 
12             'label'
13         )
14     );
15
16 INSERT INTO config.global_flag (name, label) -- defaults to enabled=FALSE
17     VALUES (
18         'ingest.skip_search_indexing',
19         oils_i18n_gettext(
20             'ingest.skip_search_indexing',
21             'Bibliographic Record Ingest: Disable extraction and indexing of search data',
22             'cgf', 
23             'label'
24         )
25     );
26
27 INSERT INTO config.global_flag (name, label) -- defaults to enabled=FALSE
28     VALUES (
29         'ingest.skip_facet_indexing',
30         oils_i18n_gettext(
31             'ingest.skip_facet_indexing',
32             'Bibliographic Record Ingest: Disable extraction and indexing of facet data',
33             'cgf', 
34             'label'
35         )
36     );
37
38 CREATE OR REPLACE FUNCTION metabib.reingest_metabib_field_entries( bib_id BIGINT, skip_facet BOOL DEFAULT FALSE, skip_browse BOOL DEFAULT FALSE, skip_search BOOL DEFAULT FALSE ) RETURNS VOID AS $func$
39 DECLARE
40     fclass          RECORD;
41     ind_data        metabib.field_entry_template%ROWTYPE;
42     mbe_row         metabib.browse_entry%ROWTYPE;
43     mbe_id          BIGINT;
44     b_skip_facet    BOOL;
45     b_skip_browse   BOOL;
46     b_skip_search   BOOL;
47 BEGIN
48
49     SELECT COALESCE(NULLIF(skip_facet, FALSE), enabled) INTO b_skip_facet FROM config.internal_flag WHERE name = 'ingest.skip_facet_indexing';
50     SELECT COALESCE(NULLIF(skip_browse, FALSE), enabled) INTO b_skip_browse FROM config.internal_flag WHERE name = 'ingest.skip_browse_indexing';
51     SELECT COALESCE(NULLIF(skip_search, FALSE), enabled) INTO b_skip_search FROM config.internal_flag WHERE name = 'ingest.skip_search_indexing';
52
53     PERFORM * FROM config.internal_flag WHERE name = 'ingest.assume_inserts_only' AND enabled;
54     IF NOT FOUND THEN
55         IF NOT b_skip_search THEN
56             FOR fclass IN SELECT * FROM config.metabib_class LOOP
57                 -- RAISE NOTICE 'Emptying out %', fclass.name;
58                 EXECUTE $$DELETE FROM metabib.$$ || fclass.name || $$_field_entry WHERE source = $$ || bib_id;
59             END LOOP;
60         END IF;
61         IF NOT b_skip_facet THEN
62             DELETE FROM metabib.facet_entry WHERE source = bib_id;
63         END IF;
64         IF NOT b_skip_browse THEN
65             DELETE FROM metabib.browse_entry_def_map WHERE source = bib_id;
66         END IF;
67     END IF;
68
69     FOR ind_data IN SELECT * FROM biblio.extract_metabib_field_entry( bib_id ) LOOP
70         IF ind_data.field < 0 THEN
71             ind_data.field = -1 * ind_data.field;
72         END IF;
73
74         IF ind_data.facet_field AND NOT b_skip_facet THEN
75             INSERT INTO metabib.facet_entry (field, source, value)
76                 VALUES (ind_data.field, ind_data.source, ind_data.value);
77         END IF;
78
79         IF ind_data.browse_field AND NOT b_skip_browse THEN
80             -- A caveat about this SELECT: this should take care of replacing
81             -- old mbe rows when data changes, but not if normalization (by
82             -- which I mean specifically the output of
83             -- evergreen.oils_tsearch2()) changes.  It may or may not be
84             -- expensive to add a comparison of index_vector to index_vector
85             -- to the WHERE clause below.
86             SELECT INTO mbe_row * FROM metabib.browse_entry WHERE value = ind_data.value;
87             IF FOUND THEN
88                 mbe_id := mbe_row.id;
89             ELSE
90                 INSERT INTO metabib.browse_entry (value) VALUES
91                     (metabib.browse_normalize(ind_data.value, ind_data.field));
92                 mbe_id := CURRVAL('metabib.browse_entry_id_seq'::REGCLASS);
93             END IF;
94
95             INSERT INTO metabib.browse_entry_def_map (entry, def, source)
96                 VALUES (mbe_id, ind_data.field, ind_data.source);
97         END IF;
98
99         IF ind_data.search_field AND NOT b_skip_search THEN
100             EXECUTE $$
101                 INSERT INTO metabib.$$ || ind_data.field_class || $$_field_entry (field, source, value)
102                     VALUES ($$ ||
103                         quote_literal(ind_data.field) || $$, $$ ||
104                         quote_literal(ind_data.source) || $$, $$ ||
105                         quote_literal(ind_data.value) ||
106                     $$);$$;
107         END IF;
108
109     END LOOP;
110
111     RETURN;
112 END;
113 $func$ LANGUAGE PLPGSQL;
114
115 COMMIT;