[open-ils-commits] r18575 - in branches/rel_2_0/Open-ILS/src/sql/Pg: . upgrade (gmc)

svn at svn.open-ils.org svn at svn.open-ils.org
Tue Nov 2 09:03:15 EDT 2010


Author: gmc
Date: 2010-11-02 09:03:14 -0400 (Tue, 02 Nov 2010)
New Revision: 18575

Added:
   branches/rel_2_0/Open-ILS/src/sql/Pg/upgrade/0455.schema.acq-tweak-lineitem-attr-splitting.sql
Modified:
   branches/rel_2_0/Open-ILS/src/sql/Pg/002.schema.config.sql
   branches/rel_2_0/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql
   branches/rel_2_0/Open-ILS/src/sql/Pg/200.schema.acq.sql
Log:
don't break up title and author when ingesting acquisitions MARC

Note that this can be done more cleanly once oils_xpath groks
XPATH 2.0 functions, in particular string-join.

Signed-off-by: Galen Charlton <gmc at esilibrary.com>


Modified: branches/rel_2_0/Open-ILS/src/sql/Pg/002.schema.config.sql
===================================================================
--- branches/rel_2_0/Open-ILS/src/sql/Pg/002.schema.config.sql	2010-11-02 13:02:10 UTC (rev 18574)
+++ branches/rel_2_0/Open-ILS/src/sql/Pg/002.schema.config.sql	2010-11-02 13:03:14 UTC (rev 18575)
@@ -70,7 +70,7 @@
     install_date    TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
 );
 
-INSERT INTO config.upgrade_log (version) VALUES ('0454'); -- dbs
+INSERT INTO config.upgrade_log (version) VALUES ('0455'); -- gmc
 
 CREATE TABLE config.bib_source (
 	id		SERIAL	PRIMARY KEY,

Modified: branches/rel_2_0/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql
===================================================================
--- branches/rel_2_0/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql	2010-11-02 13:02:10 UTC (rev 18574)
+++ branches/rel_2_0/Open-ILS/src/sql/Pg/1.6.1-2.0-upgrade-db.sql	2010-11-02 13:03:14 UTC (rev 18575)
@@ -14777,53 +14777,64 @@
 
 CREATE OR REPLACE FUNCTION public.ingest_acq_marc ( ) RETURNS TRIGGER AS $function$
 DECLARE
-    value       TEXT;
-    atype       TEXT;
-    prov        INT;
-    pos         INT;
-    adef        RECORD;
-    xpath_string    TEXT;
+	value		TEXT;
+	atype		TEXT;
+	prov		INT;
+	pos 		INT;
+	adef		RECORD;
+	xpath_string	TEXT;
 BEGIN
-    FOR adef IN SELECT *,tableoid FROM acq.lineitem_attr_definition LOOP
- 
-        SELECT relname::TEXT INTO atype FROM pg_class WHERE oid = adef.tableoid;
- 
-        IF (atype NOT IN ('lineitem_usr_attr_definition','lineitem_local_attr_definition')) THEN
-            IF (atype = 'lineitem_provider_attr_definition') THEN
-                SELECT provider INTO prov FROM acq.lineitem_provider_attr_definition WHERE id = adef.id;
-                CONTINUE WHEN NEW.provider IS NULL OR prov <> NEW.provider;
-            END IF;
- 
-            IF (atype = 'lineitem_provider_attr_definition') THEN
-                SELECT xpath INTO xpath_string FROM acq.lineitem_provider_attr_definition WHERE id = adef.id;
-            ELSIF (atype = 'lineitem_marc_attr_definition') THEN
-                SELECT xpath INTO xpath_string FROM acq.lineitem_marc_attr_definition WHERE id = adef.id;
-            ELSIF (atype = 'lineitem_generated_attr_definition') THEN
-                SELECT xpath INTO xpath_string FROM acq.lineitem_generated_attr_definition WHERE id = adef.id;
-            END IF;
- 
+	FOR adef IN SELECT *,tableoid FROM acq.lineitem_attr_definition LOOP
+
+		SELECT relname::TEXT INTO atype FROM pg_class WHERE oid = adef.tableoid;
+
+		IF (atype NOT IN ('lineitem_usr_attr_definition','lineitem_local_attr_definition')) THEN
+			IF (atype = 'lineitem_provider_attr_definition') THEN
+				SELECT provider INTO prov FROM acq.lineitem_provider_attr_definition WHERE id = adef.id;
+				CONTINUE WHEN NEW.provider IS NULL OR prov <> NEW.provider;
+			END IF;
+			
+			IF (atype = 'lineitem_provider_attr_definition') THEN
+				SELECT xpath INTO xpath_string FROM acq.lineitem_provider_attr_definition WHERE id = adef.id;
+			ELSIF (atype = 'lineitem_marc_attr_definition') THEN
+				SELECT xpath INTO xpath_string FROM acq.lineitem_marc_attr_definition WHERE id = adef.id;
+			ELSIF (atype = 'lineitem_generated_attr_definition') THEN
+				SELECT xpath INTO xpath_string FROM acq.lineitem_generated_attr_definition WHERE id = adef.id;
+			END IF;
+
             xpath_string := REGEXP_REPLACE(xpath_string,$re$//?text\(\)$$re$,'');
- 
-            pos := 1;
- 
-            LOOP
-                SELECT extract_acq_marc_field(id, xpath_string || '[' || pos || ']', adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id;
- 
-                IF (value IS NOT NULL AND value <> '') THEN
-                    INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value)
-                        VALUES (NEW.id, adef.id, atype, adef.code, value);
-                ELSE
-                    EXIT;
+
+            IF (adef.code = 'title' OR adef.code = 'author') THEN
+                -- title and author should not be split
+                -- FIXME: once oils_xpath can grok XPATH 2.0 functions, we can use
+                -- string-join in the xpath and remove this special case
+    			SELECT extract_acq_marc_field(id, xpath_string, adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id;
+    			IF (value IS NOT NULL AND value <> '') THEN
+				    INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value)
+	     			    VALUES (NEW.id, adef.id, atype, adef.code, value);
                 END IF;
- 
-                pos := pos + 1;
-            END LOOP;
- 
-        END IF;
- 
-    END LOOP;
- 
-    RETURN NULL;
+            ELSE
+                pos := 1;
+
+                LOOP
+    			    SELECT extract_acq_marc_field(id, xpath_string || '[' || pos || ']', adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id;
+
+    			    IF (value IS NOT NULL AND value <> '') THEN
+	    			    INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value)
+		    			    VALUES (NEW.id, adef.id, atype, adef.code, value);
+                    ELSE
+                        EXIT;
+			        END IF;
+
+                    pos := pos + 1;
+                END LOOP;
+            END IF;
+
+		END IF;
+
+	END LOOP;
+
+	RETURN NULL;
 END;
 $function$ LANGUAGE PLPGSQL;
 

Modified: branches/rel_2_0/Open-ILS/src/sql/Pg/200.schema.acq.sql
===================================================================
--- branches/rel_2_0/Open-ILS/src/sql/Pg/200.schema.acq.sql	2010-11-02 13:02:10 UTC (rev 18574)
+++ branches/rel_2_0/Open-ILS/src/sql/Pg/200.schema.acq.sql	2010-11-02 13:03:14 UTC (rev 18575)
@@ -1073,20 +1073,31 @@
 
             xpath_string := REGEXP_REPLACE(xpath_string,$re$//?text\(\)$$re$,'');
 
-            pos := 1;
+            IF (adef.code = 'title' OR adef.code = 'author') THEN
+                -- title and author should not be split
+                -- FIXME: once oils_xpath can grok XPATH 2.0 functions, we can use
+                -- string-join in the xpath and remove this special case
+    			SELECT extract_acq_marc_field(id, xpath_string, adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id;
+    			IF (value IS NOT NULL AND value <> '') THEN
+				    INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value)
+	     			    VALUES (NEW.id, adef.id, atype, adef.code, value);
+                END IF;
+            ELSE
+                pos := 1;
 
-            LOOP
-    			SELECT extract_acq_marc_field(id, xpath_string || '[' || pos || ']', adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id;
+                LOOP
+    			    SELECT extract_acq_marc_field(id, xpath_string || '[' || pos || ']', adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id;
 
-    			IF (value IS NOT NULL AND value <> '') THEN
-	    			INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value)
-		    			VALUES (NEW.id, adef.id, atype, adef.code, value);
-                ELSE
-                    EXIT;
-			    END IF;
+    			    IF (value IS NOT NULL AND value <> '') THEN
+	    			    INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value)
+		    			    VALUES (NEW.id, adef.id, atype, adef.code, value);
+                    ELSE
+                        EXIT;
+			        END IF;
 
-                pos := pos + 1;
-            END LOOP;
+                    pos := pos + 1;
+                END LOOP;
+            END IF;
 
 		END IF;
 

Copied: branches/rel_2_0/Open-ILS/src/sql/Pg/upgrade/0455.schema.acq-tweak-lineitem-attr-splitting.sql (from rev 18574, trunk/Open-ILS/src/sql/Pg/upgrade/0455.schema.acq-tweak-lineitem-attr-splitting.sql)
===================================================================
--- branches/rel_2_0/Open-ILS/src/sql/Pg/upgrade/0455.schema.acq-tweak-lineitem-attr-splitting.sql	                        (rev 0)
+++ branches/rel_2_0/Open-ILS/src/sql/Pg/upgrade/0455.schema.acq-tweak-lineitem-attr-splitting.sql	2010-11-02 13:03:14 UTC (rev 18575)
@@ -0,0 +1,68 @@
+BEGIN;
+
+INSERT INTO config.upgrade_log (version) VALUES ('0455'); -- gmc
+
+CREATE OR REPLACE FUNCTION public.ingest_acq_marc ( ) RETURNS TRIGGER AS $function$
+DECLARE
+	value		TEXT;
+	atype		TEXT;
+	prov		INT;
+	pos 		INT;
+	adef		RECORD;
+	xpath_string	TEXT;
+BEGIN
+	FOR adef IN SELECT *,tableoid FROM acq.lineitem_attr_definition LOOP
+
+		SELECT relname::TEXT INTO atype FROM pg_class WHERE oid = adef.tableoid;
+
+		IF (atype NOT IN ('lineitem_usr_attr_definition','lineitem_local_attr_definition')) THEN
+			IF (atype = 'lineitem_provider_attr_definition') THEN
+				SELECT provider INTO prov FROM acq.lineitem_provider_attr_definition WHERE id = adef.id;
+				CONTINUE WHEN NEW.provider IS NULL OR prov <> NEW.provider;
+			END IF;
+			
+			IF (atype = 'lineitem_provider_attr_definition') THEN
+				SELECT xpath INTO xpath_string FROM acq.lineitem_provider_attr_definition WHERE id = adef.id;
+			ELSIF (atype = 'lineitem_marc_attr_definition') THEN
+				SELECT xpath INTO xpath_string FROM acq.lineitem_marc_attr_definition WHERE id = adef.id;
+			ELSIF (atype = 'lineitem_generated_attr_definition') THEN
+				SELECT xpath INTO xpath_string FROM acq.lineitem_generated_attr_definition WHERE id = adef.id;
+			END IF;
+
+            xpath_string := REGEXP_REPLACE(xpath_string,$re$//?text\(\)$$re$,'');
+
+            IF (adef.code = 'title' OR adef.code = 'author') THEN
+                -- title and author should not be split
+                -- FIXME: once oils_xpath can grok XPATH 2.0 functions, we can use
+                -- string-join in the xpath and remove this special case
+    			SELECT extract_acq_marc_field(id, xpath_string, adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id;
+    			IF (value IS NOT NULL AND value <> '') THEN
+				    INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value)
+	     			    VALUES (NEW.id, adef.id, atype, adef.code, value);
+                END IF;
+            ELSE
+                pos := 1;
+
+                LOOP
+    			    SELECT extract_acq_marc_field(id, xpath_string || '[' || pos || ']', adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id;
+
+    			    IF (value IS NOT NULL AND value <> '') THEN
+	    			    INSERT INTO acq.lineitem_attr (lineitem, definition, attr_type, attr_name, attr_value)
+		    			    VALUES (NEW.id, adef.id, atype, adef.code, value);
+                    ELSE
+                        EXIT;
+			        END IF;
+
+                    pos := pos + 1;
+                END LOOP;
+            END IF;
+
+		END IF;
+
+	END LOOP;
+
+	RETURN NULL;
+END;
+$function$ LANGUAGE PLPGSQL;
+
+COMMIT;



More information about the open-ils-commits mailing list