From: miker Date: Fri, 10 Dec 2010 14:33:42 +0000 (+0000) Subject: partial backport of r18957 to capture the fixes for vandelay.replace_field -- specifi... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=ba02928805251e8c4bba3eac2106079ab97c811b;p=Evergreen.git partial backport of r18957 to capture the fixes for vandelay.replace_field -- specifically, normalizing the XML for comparison when deciding if the "add" side of a replace should proceed git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_6@18961 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/sql/Pg/012.schema.vandelay.sql b/Open-ILS/src/sql/Pg/012.schema.vandelay.sql index b742e3ddc4..93fe5df99b 100644 --- a/Open-ILS/src/sql/Pg/012.schema.vandelay.sql +++ b/Open-ILS/src/sql/Pg/012.schema.vandelay.sql @@ -268,10 +268,12 @@ $_$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION vandelay.replace_field ( target_xml TEXT, source_xml TEXT, field TEXT ) RETURNS TEXT AS $_$ DECLARE xml_output TEXT; + parsed_target TEXT; BEGIN - xml_output := vandelay.strip_field( target_xml, field); + parsed_target := vandelay.strip_field( target_xml, ''); -- this dance normalized the format of the xml for the IF below + xml_output := vandelay.strip_field( parsed_target, field); - IF xml_output <> target_xml AND field ~ E'~' THEN + IF xml_output <> parsed_target AND field ~ E'~' THEN -- we removed something, and there was a regexp restriction in the field definition, so proceed xml_output := vandelay.add_field( xml_output, source_xml, field, 1 ); ELSIF field !~ E'~' THEN diff --git a/Open-ILS/src/sql/Pg/upgrade/0469.schema.authority-maint-trigger-funcs.sql b/Open-ILS/src/sql/Pg/upgrade/0469.schema.authority-maint-trigger-funcs.sql new file mode 100644 index 0000000000..c02e399d36 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/0469.schema.authority-maint-trigger-funcs.sql @@ -0,0 +1,26 @@ +BEGIN; + +INSERT INTO config.upgrade_log (version) VALUES ('0469'); -- miker + +CREATE OR REPLACE FUNCTION vandelay.replace_field ( target_xml TEXT, source_xml TEXT, field TEXT ) RETURNS TEXT AS $_$ +DECLARE + xml_output TEXT; + parsed_target TEXT; +BEGIN + parsed_target := vandelay.strip_field( target_xml, ''); -- this dance normalized the format of the xml for the IF below + xml_output := vandelay.strip_field( parsed_target, field); + + IF xml_output <> parsed_target AND field ~ E'~' THEN + -- we removed something, and there was a regexp restriction in the field definition, so proceed + xml_output := vandelay.add_field( xml_output, source_xml, field, 1 ); + ELSIF field !~ E'~' THEN + -- No regexp restriction, add the field + xml_output := vandelay.add_field( xml_output, source_xml, field, 0 ); + END IF; + + RETURN xml_output; +END; +$_$ LANGUAGE PLPGSQL; + +COMMIT; +