From 054027e6340baf5d2f7e58287ed6e1253cab4382 Mon Sep 17 00:00:00 2001 From: Bill Erickson <berick@esilibrary.com> Date: Thu, 14 Nov 2013 16:58:54 -0500 Subject: [PATCH] LP#1251394 Display fields schema/IDL continued * Upgrade SQL repairs * make display fields field-safe * Representative fields Signed-off-by: Bill Erickson <berick@esilibrary.com> Signed-off-by: Mike Rylander <mrylander@gmail.com> --- Open-ILS/examples/fm_IDL.xml | 23 +++-- Open-ILS/src/sql/Pg/002.schema.config.sql | 16 ++++ Open-ILS/src/sql/Pg/950.data.seed-values.sql | 4 +- .../upgrade/XXXX.schema.metabib-display-field.sql | 98 ++++++++++++++++++---- 4 files changed, 113 insertions(+), 28 deletions(-) diff --git a/Open-ILS/examples/fm_IDL.xml b/Open-ILS/examples/fm_IDL.xml index a1ab64f722..f4c7d6d4cd 100644 --- a/Open-ILS/examples/fm_IDL.xml +++ b/Open-ILS/examples/fm_IDL.xml @@ -2810,10 +2810,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA <field reporter:label="B Weight" name="b_weight" reporter:datatype="float" /> <field reporter:label="C Weight" name="c_weight" reporter:datatype="float" /> <field reporter:label="D Weight" name="d_weight" reporter:datatype="float" /> + <field reporter:label="Representative Field" name="representative_field" reporter:datatype="link" /> <field reporter:label="Fields" name="fields" reporter:datatype="link" oils_persist:virtual="true"/> </fields> <links> <link field="fields" reltype="has_many" key="name" map="" class="cmf"/> + <link field="representative_field" reltype="has_a" key="id" map="" class="cmf"/> </links> <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1"> <actions> @@ -3720,6 +3722,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA <class id="mde" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="metabib::display_entry" oils_persist:tablename="metabib.display_entry" + oils_persist:field_safe="true" reporter:label="Display Field Entry" oils_persist:readonly="true"> <fields oils_persist:primary="id" oils_persist:sequence="metabib.display_entry_id_seq"> <field name="id" reporter:datatype="id" /> @@ -3739,17 +3742,20 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA </class> <class id="mfde" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="metabib::flat_display_entry" + oils_persist:field_safe="true" reporter:label="Flat Display Field Entry View" oils_persist:readonly="true"> <oils_persist:source_definition> - SELECT - mde.source, - mde.value, + SELECT + mde.source, + mde.value, cmf.id AS field, - cmf.field_class, - cmf.name, - cmf.label - FROM metabib.display_entry mde - JOIN config.metabib_field cmf ON (cmf.id = mde.field) + cmf.field_class, + cmf.name, + cmf.label, + cmc.name AS representative + FROM metabib.display_entry mde + JOIN config.metabib_field cmf ON (cmf.id = mde.field) LEFT JOIN config.metabib_class cmc ON + (cmc.name = cmf.field_class AND cmc.representative_field = cmf.id) </oils_persist:source_definition> <fields> <field name="source" reporter:datatype="id" /> @@ -3758,6 +3764,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA <field name="field_class" reporter:datatype="text"/> <field name="name" reporter:datatype="text"/> <field name="label" reporter:datatype="text"/> + <field name="representative" reporter:datatype="text"/> </fields> <links> <link field="source" reltype="has_a" key="id" map="" class="bre"/> diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index e8f3f24673..a7fc62b15e 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -183,6 +183,16 @@ INSERT INTO config.biblio_fingerprint (name, xpath, format) 'mods32' ); +CREATE OR REPLACE FUNCTION + config.metabib_representative_field_is_valid(INTEGER, TEXT) RETURNS BOOLEAN AS $$ + SELECT EXISTS (SELECT 1 FROM config.metabib_field WHERE id = $1 AND field_class = $2); +$$ LANGUAGE SQL STRICT IMMUTABLE; + +COMMENT ON FUNCTION config.metabib_representative_field_is_valid(INTEGER, TEXT) IS $$ +Ensure the field_class value on the selected representative field matches +the class name. +$$; + CREATE TABLE config.metabib_class ( name TEXT PRIMARY KEY, label TEXT NOT NULL UNIQUE, @@ -193,6 +203,12 @@ CREATE TABLE config.metabib_class ( b_weight NUMERIC DEFAULT 0.4 NOT NULL, c_weight NUMERIC DEFAULT 0.2 NOT NULL, d_weight NUMERIC DEFAULT 0.1 NOT NULL + representative_field INTEGER REFERENCES config.metabib_field(id), + CONSTRAINT rep_field_unique UNIQUE(representative_field), + CONSTRAINT rep_field_is_valid CHECK ( + representative_field IS NULL OR + config.metabib_representative_field_is_valid(representative_field, name) + ) ); CREATE TABLE config.metabib_field ( diff --git a/Open-ILS/src/sql/Pg/950.data.seed-values.sql b/Open-ILS/src/sql/Pg/950.data.seed-values.sql index 75518259cb..360397b9ab 100644 --- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql +++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql @@ -96,8 +96,8 @@ SELECT SETVAL('config.standing_penalty_id_seq', 100); INSERT INTO config.metabib_class ( name, label ) VALUES ( 'identifier', oils_i18n_gettext('identifier', 'Identifier', 'cmc', 'label') ); INSERT INTO config.metabib_class ( name, label ) VALUES ( 'keyword', oils_i18n_gettext('keyword', 'Keyword', 'cmc', 'label') ); -INSERT INTO config.metabib_class ( name, label ) VALUES ( 'title', oils_i18n_gettext('title', 'Title', 'cmc', 'label') ); -INSERT INTO config.metabib_class ( name, label ) VALUES ( 'author', oils_i18n_gettext('author', 'Author', 'cmc', 'label') ); +INSERT INTO config.metabib_class ( name, label, representative_field ) VALUES ( 'title', oils_i18n_gettext('title', 'Title', 'cmc', 'label'), 6 ); +INSERT INTO config.metabib_class ( name, label, representative_field ) VALUES ( 'author', oils_i18n_gettext('author', 'Author', 'cmc', 'label'), 8 ); INSERT INTO config.metabib_class ( name, label ) VALUES ( 'subject', oils_i18n_gettext('subject', 'Subject', 'cmc', 'label') ); INSERT INTO config.metabib_class ( name, label ) VALUES ( 'series', oils_i18n_gettext('series', 'Series', 'cmc', 'label') ); diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.metabib-display-field.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.metabib-display-field.sql index 9d20e593c9..775b5ebf59 100644 --- a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.metabib-display-field.sql +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.metabib-display-field.sql @@ -1,8 +1,28 @@ BEGIN; -ALTER TABLE config.metabib_field ADD COLUMN display_xpath TEXT, display_field BOOL NOT NULL DEFAULT TRUE; -UPDATE config.metabib_field SET display_field = FALSE WHERE field_class = 'keyword' OR name = 'complete'; +ALTER TABLE config.metabib_field + ADD COLUMN display_xpath TEXT, + ADD COLUMN display_field BOOL NOT NULL DEFAULT TRUE; + +CREATE OR REPLACE FUNCTION + config.metabib_representative_field_is_valid(INTEGER, TEXT) RETURNS BOOLEAN AS $$ + SELECT EXISTS (SELECT 1 FROM config.metabib_field WHERE id = $1 AND field_class = $2); +$$ LANGUAGE SQL STRICT IMMUTABLE; + +COMMENT ON FUNCTION config.metabib_representative_field_is_valid(INTEGER, TEXT) IS $$ +Ensure the field_class value on the selected representative field matches +the class name. +$$; + +ALTER TABLE config.metabib_class + ADD COLUMN representative_field + INTEGER REFERENCES config.metabib_field(id), + ADD CONSTRAINT rep_field_unique UNIQUE(representative_field), + ADD CONSTRAINT rep_field_is_valid CHECK ( + representative_field IS NULL OR + config.metabib_representative_field_is_valid(representative_field, name) + ); CREATE TABLE metabib.display_entry ( id BIGSERIAL PRIMARY KEY, @@ -67,9 +87,6 @@ CREATE TRIGGER display_field_force_nfc_tgr BEFORE UPDATE OR INSERT ON metabib.display_entry FOR EACH ROW EXECUTE PROCEDURE evergreen.display_field_force_nfc(); -ALTER TABLE config.metabib_field - ADD COLUMN display_field BOOL NOT NULL DEFAULT TRUE; - ALTER TYPE metabib.field_entry_template ADD ATTRIBUTE display_field BOOL; CREATE OR REPLACE FUNCTION biblio.extract_metabib_field_entry ( rid BIGINT, default_joiner TEXT ) RETURNS SETOF metabib.field_entry_template AS $func$ @@ -392,23 +409,68 @@ END; $func$ LANGUAGE PLPGSQL; --- DATA ------------------- +-- DATA -------------------------------------- --- "General Keywords" and "All Subjects" --- more? -UPDATE config.metabib_field SET display_field = FALSE WHERE id IN (15, 16); +UPDATE config.metabib_field SET display_field = FALSE + WHERE field_class = 'keyword' OR name = 'complete'; INSERT INTO config.internal_flag (name, enabled) VALUES ('ingest.skip_display_indexing', FALSE); --- TODO: targeted ingest? - --- Dumb Reingest --- ---UPDATE config.internal_flag SET enabled = TRUE --- WHERE name = 'ingest.reingest.force_on_same_marc'; ---UPDATE biblio.record_entry SET marc = marc; ---UPDATE config.internal_flag SET enabled = FALSE --- WHERE name = 'ingest.reingest.force_on_same_marc'; +-- personal author +UPDATE config.metabib_class SET representative_field = 8 WHERE name = 'author'; +-- title proper +UPDATE config.metabib_class SET representative_field = 6 WHERE name = 'title'; COMMIT; ---ROLLBACK; + + +/* +-- Ham-fisted reingest for Testing --------------------- + +-- disable everything we can for reindexing +UPDATE config.internal_flag SET enabled = TRUE WHERE name IN ( + 'ingest.assume_inserts_only', + 'ingest.disable_authority_auto_update', + 'ingest.disable_authority_linking', + 'ingest.disable_located_uri', + 'ingest.disable_metabib_field_entry', + 'ingest.disable_metabib_full_rec', + 'ingest.disable_metabib_rec_descriptor', + 'ingest.metarecord_mapping.preserve_on_delete', + 'ingest.metarecord_mapping.skip_on_insert', + 'ingest.metarecord_mapping.skip_on_update', + 'ingest.reingest.force_on_same_marc', + 'ingest.skip_browse_indexing', + 'ingest.skip_facet_indexing', + 'ingest.skip_search_indexing' +); + +UPDATE config.internal_flag SET enabled = TRUE + WHERE name = 'ingest.reingest.force_on_same_marc'; + +UPDATE biblio.record_entry SET marc = marc; + +UPDATE config.internal_flag SET enabled = FALSE + WHERE name = 'ingest.reingest.force_on_same_marc'; + +-- re-enable the default ingest flags +UPDATE config.internal_flag SET enabled = FALSE WHERE name IN ( + 'ingest.assume_inserts_only', + 'ingest.disable_authority_auto_update', + 'ingest.disable_authority_linking', + 'ingest.disable_located_uri', + 'ingest.disable_metabib_field_entry', + 'ingest.disable_metabib_full_rec', + 'ingest.disable_metabib_rec_descriptor', + 'ingest.metarecord_mapping.preserve_on_delete', + 'ingest.metarecord_mapping.skip_on_insert', + 'ingest.metarecord_mapping.skip_on_update', + 'ingest.reingest.force_on_same_marc', + 'ingest.skip_browse_indexing', + 'ingest.skip_facet_indexing', + 'ingest.skip_search_indexing' +); + +*/ + -- 2.11.0