[open-ils-commits] [GIT] Evergreen ILS branch rel_2_0 updated. 3b9be86b7a3cf2c2b5548ef0e16928add26f3e5d

Evergreen Git git at git.evergreen-ils.org
Thu Oct 13 16:09:38 EDT 2011


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, rel_2_0 has been updated
       via  3b9be86b7a3cf2c2b5548ef0e16928add26f3e5d (commit)
       via  71189a3d1ac01780a2f537b532a9d68433cf0ab2 (commit)
      from  de77be3ecb507cb6563310a5a0f4bcb8c2bf2786 (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 3b9be86b7a3cf2c2b5548ef0e16928add26f3e5d
Author: Mike Rylander <mrylander at gmail.com>
Date:   Thu Oct 13 16:01:59 2011 -0400

    Stamping upgrade for asset.merge_record_assets fix from dbs
    
    Signed-off-by: Mike Rylander <mrylander at gmail.com>

diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql
index 256fa2f..18bc0ae 100644
--- a/Open-ILS/src/sql/Pg/002.schema.config.sql
+++ b/Open-ILS/src/sql/Pg/002.schema.config.sql
@@ -57,7 +57,7 @@ CREATE TABLE config.upgrade_log (
     install_date    TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
 );
 
-INSERT INTO config.upgrade_log (version) VALUES ('0629'); -- senator/miker
+INSERT INTO config.upgrade_log (version) VALUES ('0639'); -- dbs/miker
 
 CREATE TABLE config.bib_source (
 	id		SERIAL	PRIMARY KEY,
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.asset_merge_record_assets.sql b/Open-ILS/src/sql/Pg/upgrade/0639.schema.asset_merge_record_assets.sql
similarity index 96%
rename from Open-ILS/src/sql/Pg/upgrade/XXXX.schema.asset_merge_record_assets.sql
rename to Open-ILS/src/sql/Pg/upgrade/0639.schema.asset_merge_record_assets.sql
index 7a6f11e..ad268da 100644
--- a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.asset_merge_record_assets.sql
+++ b/Open-ILS/src/sql/Pg/upgrade/0639.schema.asset_merge_record_assets.sql
@@ -1,12 +1,10 @@
 -- Evergreen DB patch XXXX.schema.asset_merge_record_assets.sql
 --
--- FIXME: insert description of change, if needed
 --
 BEGIN;
 
-INSERT INTO config.upgrade_log (version) VALUES ('XXXX');
+INSERT INTO config.upgrade_log (version) VALUES ('0639');
 
--- FIXME: add/check SQL statements to perform the upgrade
 CREATE OR REPLACE FUNCTION asset.merge_record_assets( target_record BIGINT, source_record BIGINT ) RETURNS INT AS $func$
 DECLARE
     moved_objects INT := 0;

commit 71189a3d1ac01780a2f537b532a9d68433cf0ab2
Author: Dan Scott <dscott at laurentian.ca>
Date:   Thu Oct 13 13:14:13 2011 -0400

    Fix located URI merging in action.merge_record_assets()
    
    Perhaps due to the unexpected results of the XPath expression, which
    returns a count of nodes for subfields, etc, rather than just a count of
    the number of 856 datafields, NULL was being concatenated onto a string
    - which of course made the string NULL.
    
    Use COALESCE() to prevent the NULLness from spreading and enable
    action.merge_record_assets() to do the right thing.
    
    Signed-off-by: Dan Scott <dscott at laurentian.ca>
    Signed-off-by: Mike Rylander <mrylander at gmail.com>

diff --git a/Open-ILS/src/sql/Pg/999.functions.global.sql b/Open-ILS/src/sql/Pg/999.functions.global.sql
index 6c6fdc0..1820888 100644
--- a/Open-ILS/src/sql/Pg/999.functions.global.sql
+++ b/Open-ILS/src/sql/Pg/999.functions.global.sql
@@ -980,6 +980,8 @@ BEGIN
 
     IF uri_count > 0 THEN
         
+        -- This returns more nodes than you might expect:
+        -- 7 instead of 1 for an 856 with $u $y $9
         SELECT  COUNT(*) INTO counter
           FROM  oils_xpath_table(
                     'id',
@@ -1017,7 +1019,9 @@ BEGIN
                         'id=' || source_record
                     ) as t(id int,ind1 text, ind2 text,subfield text,data text);
 
-            uri_text := uri_text || uri_datafield;
+            -- As most of the results will be NULL, protect against NULLifying
+            -- the valid content that we do generate
+            uri_text := uri_text || COALESCE(uri_datafield, '');
         END LOOP;
 
         IF uri_text <> '' THEN
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.asset_merge_record_assets.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.asset_merge_record_assets.sql
new file mode 100644
index 0000000..7a6f11e
--- /dev/null
+++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.asset_merge_record_assets.sql
@@ -0,0 +1,165 @@
+-- Evergreen DB patch XXXX.schema.asset_merge_record_assets.sql
+--
+-- FIXME: insert description of change, if needed
+--
+BEGIN;
+
+INSERT INTO config.upgrade_log (version) VALUES ('XXXX');
+
+-- FIXME: add/check SQL statements to perform the upgrade
+CREATE OR REPLACE FUNCTION asset.merge_record_assets( target_record BIGINT, source_record BIGINT ) RETURNS INT AS $func$
+DECLARE
+    moved_objects INT := 0;
+    source_cn     asset.call_number%ROWTYPE;
+    target_cn     asset.call_number%ROWTYPE;
+    metarec       metabib.metarecord%ROWTYPE;
+    hold          action.hold_request%ROWTYPE;
+    ser_rec       serial.record_entry%ROWTYPE;
+    uri_count     INT := 0;
+    counter       INT := 0;
+    uri_datafield TEXT;
+    uri_text      TEXT := '';
+BEGIN
+
+    -- move any 856 entries on records that have at least one MARC-mapped URI entry
+    SELECT  INTO uri_count COUNT(*)
+      FROM  asset.uri_call_number_map m
+            JOIN asset.call_number cn ON (m.call_number = cn.id)
+      WHERE cn.record = source_record;
+
+    IF uri_count > 0 THEN
+        
+        -- This returns more nodes than you might expect:
+        -- 7 instead of 1 for an 856 with $u $y $9
+        SELECT  COUNT(*) INTO counter
+          FROM  oils_xpath_table(
+                    'id',
+                    'marc',
+                    'biblio.record_entry',
+                    '//*[@tag="856"]',
+                    'id=' || source_record
+                ) as t(i int,c text);
+    
+        FOR i IN 1 .. counter LOOP
+            SELECT  '<datafield xmlns="http://www.loc.gov/MARC21/slim"' || 
+			' tag="856"' ||
+			' ind1="' || FIRST(ind1) || '"'  ||
+			' ind2="' || FIRST(ind2) || '">' ||
+                        array_to_string(
+                            array_accum(
+                                '<subfield code="' || subfield || '">' ||
+                                regexp_replace(
+                                    regexp_replace(
+                                        regexp_replace(data,'&','&amp;','g'),
+                                        '>', '&gt;', 'g'
+                                    ),
+                                    '<', '&lt;', 'g'
+                                ) || '</subfield>'
+                            ), ''
+                        ) || '</datafield>' INTO uri_datafield
+              FROM  oils_xpath_table(
+                        'id',
+                        'marc',
+                        'biblio.record_entry',
+                        '//*[@tag="856"][position()=' || i || ']/@ind1|' ||
+                        '//*[@tag="856"][position()=' || i || ']/@ind2|' ||
+                        '//*[@tag="856"][position()=' || i || ']/*/@code|' ||
+                        '//*[@tag="856"][position()=' || i || ']/*[@code]',
+                        'id=' || source_record
+                    ) as t(id int,ind1 text, ind2 text,subfield text,data text);
+
+            -- As most of the results will be NULL, protect against NULLifying
+            -- the valid content that we do generate
+            uri_text := uri_text || COALESCE(uri_datafield, '');
+        END LOOP;
+
+        IF uri_text <> '' THEN
+            UPDATE  biblio.record_entry
+              SET   marc = regexp_replace(marc,'(</[^>]*record>)', uri_text || E'\\1')
+              WHERE id = target_record;
+        END IF;
+
+    END IF;
+
+	-- Find and move metarecords to the target record
+	SELECT	INTO metarec *
+	  FROM	metabib.metarecord
+	  WHERE	master_record = source_record;
+
+	IF FOUND THEN
+		UPDATE	metabib.metarecord
+		  SET	master_record = target_record,
+			mods = NULL
+		  WHERE	id = metarec.id;
+
+		moved_objects := moved_objects + 1;
+	END IF;
+
+	-- Find call numbers attached to the source ...
+	FOR source_cn IN SELECT * FROM asset.call_number WHERE record = source_record LOOP
+
+		SELECT	INTO target_cn *
+		  FROM	asset.call_number
+		  WHERE	label = source_cn.label
+			AND owning_lib = source_cn.owning_lib
+			AND record = target_record;
+
+		-- ... and if there's a conflicting one on the target ...
+		IF FOUND THEN
+
+			-- ... move the copies to that, and ...
+			UPDATE	asset.copy
+			  SET	call_number = target_cn.id
+			  WHERE	call_number = source_cn.id;
+
+			-- ... move V holds to the move-target call number
+			FOR hold IN SELECT * FROM action.hold_request WHERE target = source_cn.id AND hold_type = 'V' LOOP
+		
+				UPDATE	action.hold_request
+				  SET	target = target_cn.id
+				  WHERE	id = hold.id;
+		
+				moved_objects := moved_objects + 1;
+			END LOOP;
+
+		-- ... if not ...
+		ELSE
+			-- ... just move the call number to the target record
+			UPDATE	asset.call_number
+			  SET	record = target_record
+			  WHERE	id = source_cn.id;
+		END IF;
+
+		moved_objects := moved_objects + 1;
+	END LOOP;
+
+	-- Find T holds targeting the source record ...
+	FOR hold IN SELECT * FROM action.hold_request WHERE target = source_record AND hold_type = 'T' LOOP
+
+		-- ... and move them to the target record
+		UPDATE	action.hold_request
+		  SET	target = target_record
+		  WHERE	id = hold.id;
+
+		moved_objects := moved_objects + 1;
+	END LOOP;
+
+	-- Find serial records targeting the source record ...
+	FOR ser_rec IN SELECT * FROM serial.record_entry WHERE record = source_record LOOP
+		-- ... and move them to the target record
+		UPDATE	serial.record_entry
+		  SET	record = target_record
+		  WHERE	id = ser_rec.id;
+
+		moved_objects := moved_objects + 1;
+	END LOOP;
+
+    -- Finally, "delete" the source record
+    DELETE FROM biblio.record_entry WHERE id = source_record;
+
+	-- That's all, folks!
+	RETURN moved_objects;
+END;
+$func$ LANGUAGE plpgsql;
+
+COMMIT;

-----------------------------------------------------------------------

Summary of changes:
 Open-ILS/src/sql/Pg/002.schema.config.sql          |    2 +-
 Open-ILS/src/sql/Pg/999.functions.global.sql       |    6 +-
 ...l => 0639.schema.asset_merge_record_assets.sql} |  175 ++++++++++----------
 3 files changed, 97 insertions(+), 86 deletions(-)
 copy Open-ILS/src/sql/Pg/upgrade/{0349.schema.merger_record_assets.fix-again.sql => 0639.schema.asset_merge_record_assets.sql} (50%)


hooks/post-receive
-- 
Evergreen ILS


More information about the open-ils-commits mailing list