[open-ils-commits] [GIT] Evergreen ILS branch master updated. ebdf3e9527c2755195d3126b5468e4636ea5cc6a
Evergreen Git
git at git.evergreen-ils.org
Mon May 14 15:20:55 EDT 2012
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Evergreen ILS".
The branch, master has been updated
via ebdf3e9527c2755195d3126b5468e4636ea5cc6a (commit)
from a4561f581eb54c088afb95d8758dd849d6f3d69e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit ebdf3e9527c2755195d3126b5468e4636ea5cc6a
Author: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
Date: Mon May 14 12:46:44 2012 -0400
Avoid collisions of normalized values going into metabib.browse_entry
This fixes a bug that prevented successful reingestion of bib records
during the 2.1->2.2 upgrade in some cases. Reported by George Duimovich.
Key part here:
> ERROR: duplicate key value violates unique constraint
> "browse_entry_value_key"
> DETAIL: Key (value)=(545575) already exists.
> CONTEXT: SQL statement "INSERT INTO metabib.browse_entry (value) VALUES
> (metabib.browse_normalize(ind_data.value,
George confirmed that the changes to the version upgrade script fixed
the problem for him.
Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql
index eae6810..a51ec77 100644
--- a/Open-ILS/src/sql/Pg/002.schema.config.sql
+++ b/Open-ILS/src/sql/Pg/002.schema.config.sql
@@ -87,7 +87,7 @@ CREATE TRIGGER no_overlapping_deps
BEFORE INSERT OR UPDATE ON config.db_patch_dependencies
FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates');
-INSERT INTO config.upgrade_log (version, applied_to) VALUES ('0710', :eg_version); -- senator
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('0711', :eg_version); -- senator
CREATE TABLE config.bib_source (
id SERIAL PRIMARY KEY,
diff --git a/Open-ILS/src/sql/Pg/upgrade/0711.schema.reingest_avoid_collision_better.sql b/Open-ILS/src/sql/Pg/upgrade/0711.schema.reingest_avoid_collision_better.sql
new file mode 100644
index 0000000..1f5df40
--- /dev/null
+++ b/Open-ILS/src/sql/Pg/upgrade/0711.schema.reingest_avoid_collision_better.sql
@@ -0,0 +1,78 @@
+BEGIN;
+
+SELECT evergreen.upgrade_deps_block_check('0711', :eg_version);
+
+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$
+DECLARE
+ fclass RECORD;
+ ind_data metabib.field_entry_template%ROWTYPE;
+ mbe_row metabib.browse_entry%ROWTYPE;
+ mbe_id BIGINT;
+ normalized_value TEXT;
+BEGIN
+ PERFORM * FROM config.internal_flag WHERE name = 'ingest.assume_inserts_only' AND enabled;
+ IF NOT FOUND THEN
+ IF NOT skip_search THEN
+ FOR fclass IN SELECT * FROM config.metabib_class LOOP
+ -- RAISE NOTICE 'Emptying out %', fclass.name;
+ EXECUTE $$DELETE FROM metabib.$$ || fclass.name || $$_field_entry WHERE source = $$ || bib_id;
+ END LOOP;
+ END IF;
+ IF NOT skip_facet THEN
+ DELETE FROM metabib.facet_entry WHERE source = bib_id;
+ END IF;
+ IF NOT skip_browse THEN
+ DELETE FROM metabib.browse_entry_def_map WHERE source = bib_id;
+ END IF;
+ END IF;
+
+ FOR ind_data IN SELECT * FROM biblio.extract_metabib_field_entry( bib_id ) LOOP
+ IF ind_data.field < 0 THEN
+ ind_data.field = -1 * ind_data.field;
+ END IF;
+
+ IF ind_data.facet_field AND NOT skip_facet THEN
+ INSERT INTO metabib.facet_entry (field, source, value)
+ VALUES (ind_data.field, ind_data.source, ind_data.value);
+ END IF;
+
+ IF ind_data.browse_field AND NOT skip_browse THEN
+ -- A caveat about this SELECT: this should take care of replacing
+ -- old mbe rows when data changes, but not if normalization (by
+ -- which I mean specifically the output of
+ -- evergreen.oils_tsearch2()) changes. It may or may not be
+ -- expensive to add a comparison of index_vector to index_vector
+ -- to the WHERE clause below.
+ normalized_value := metabib.browse_normalize(
+ ind_data.value, ind_data.field
+ );
+
+ SELECT INTO mbe_row * FROM metabib.browse_entry WHERE value = normalized_value;
+ IF FOUND THEN
+ mbe_id := mbe_row.id;
+ ELSE
+ INSERT INTO metabib.browse_entry (value) VALUES (normalized_value);
+ mbe_id := CURRVAL('metabib.browse_entry_id_seq'::REGCLASS);
+ END IF;
+
+ INSERT INTO metabib.browse_entry_def_map (entry, def, source)
+ VALUES (mbe_id, ind_data.field, ind_data.source);
+ END IF;
+
+ IF ind_data.search_field AND NOT skip_search THEN
+ EXECUTE $$
+ INSERT INTO metabib.$$ || ind_data.field_class || $$_field_entry (field, source, value)
+ VALUES ($$ ||
+ quote_literal(ind_data.field) || $$, $$ ||
+ quote_literal(ind_data.source) || $$, $$ ||
+ quote_literal(ind_data.value) ||
+ $$);$$;
+ END IF;
+
+ END LOOP;
+
+ RETURN;
+END;
+$func$ LANGUAGE PLPGSQL;
+
+COMMIT;
diff --git a/Open-ILS/src/sql/Pg/version-upgrade/2.1-2.2-upgrade-db.sql b/Open-ILS/src/sql/Pg/version-upgrade/2.1-2.2-upgrade-db.sql
index 6d1a138..8329a41 100644
--- a/Open-ILS/src/sql/Pg/version-upgrade/2.1-2.2-upgrade-db.sql
+++ b/Open-ILS/src/sql/Pg/version-upgrade/2.1-2.2-upgrade-db.sql
@@ -10082,6 +10082,9 @@ SELECT auditor.update_auditors();
-- check whether patch can be applied
SELECT evergreen.upgrade_deps_block_check('0687', :eg_version);
+SELECT evergreen.upgrade_deps_block_check('0711', :eg_version); -- introduces
+-- changes to metabib.reingest_metabib_field_entries() that must happen here
+-- rather than later in a separate CREATE OR REPLACE FUNCTION statement.
-- FIXME: add/check SQL statements to perform the upgrade
-- New function def
@@ -10091,6 +10094,7 @@ DECLARE
ind_data metabib.field_entry_template%ROWTYPE;
mbe_row metabib.browse_entry%ROWTYPE;
mbe_id BIGINT;
+ normalized_value TEXT;
BEGIN
PERFORM * FROM config.internal_flag WHERE name = 'ingest.assume_inserts_only' AND enabled;
IF NOT FOUND THEN
@@ -10125,12 +10129,15 @@ BEGIN
-- evergreen.oils_tsearch2()) changes. It may or may not be
-- expensive to add a comparison of index_vector to index_vector
-- to the WHERE clause below.
- SELECT INTO mbe_row * FROM metabib.browse_entry WHERE value = ind_data.value;
+ normalized_value := metabib.browse_normalize(
+ ind_data.value, ind_data.field
+ );
+
+ SELECT INTO mbe_row * FROM metabib.browse_entry WHERE value = normalized_value;
IF FOUND THEN
mbe_id := mbe_row.id;
ELSE
- INSERT INTO metabib.browse_entry (value) VALUES
- (metabib.browse_normalize(ind_data.value, ind_data.field));
+ INSERT INTO metabib.browse_entry (value) VALUES (normalized_value);
mbe_id := CURRVAL('metabib.browse_entry_id_seq'::REGCLASS);
END IF;
@@ -11700,6 +11707,7 @@ SELECT evergreen.upgrade_deps_block_check('0700', :eg_version);
SELECT evergreen.upgrade_deps_block_check('0706', :eg_version);
SELECT evergreen.upgrade_deps_block_check('0710', :eg_version);
+
CREATE OR REPLACE FUNCTION evergreen.could_be_serial_holding_code(TEXT) RETURNS BOOL AS $$
use JSON::XS;
use MARC::Field;
-----------------------------------------------------------------------
Summary of changes:
Open-ILS/src/sql/Pg/002.schema.config.sql | 2 +-
...711.schema.reingest_avoid_collision_better.sql} | 24 ++++++-------------
.../sql/Pg/version-upgrade/2.1-2.2-upgrade-db.sql | 14 +++++++++--
3 files changed, 20 insertions(+), 20 deletions(-)
copy Open-ILS/src/sql/Pg/upgrade/{0687.schema.enhance_reingest.sql => 0711.schema.reingest_avoid_collision_better.sql} (83%)
hooks/post-receive
--
Evergreen ILS
More information about the open-ils-commits
mailing list