From e940ac13f2c50dda37bde8f8b8808c9a9d430f88 Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Tue, 2 Aug 2011 10:55:00 -0400 Subject: [PATCH] Have replace_field return input XML when no replace rule is provided Signed-off-by: Mike Rylander Signed-off-by: Bill Erickson --- Open-ILS/src/sql/Pg/012.schema.vandelay.sql | 1 + ...XXX.schema.replace_field-default-value.sql | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.replace_field-default-value.sql diff --git a/Open-ILS/src/sql/Pg/012.schema.vandelay.sql b/Open-ILS/src/sql/Pg/012.schema.vandelay.sql index de3e24a758..b2780a5f56 100644 --- a/Open-ILS/src/sql/Pg/012.schema.vandelay.sql +++ b/Open-ILS/src/sql/Pg/012.schema.vandelay.sql @@ -1073,6 +1073,7 @@ DECLARE BEGIN parsed_target := vandelay.strip_field( target_xml, ''); -- this dance normalizes the format of the xml for the IF below + xml_output := parsed_target; -- if there are no replace rules, just return the input FOR curr_field IN SELECT UNNEST( STRING_TO_ARRAY(field, ',') ) LOOP -- naive split, but it's the same we use in the perl diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.replace_field-default-value.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.replace_field-default-value.sql new file mode 100644 index 0000000000..f8e5b28617 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.replace_field-default-value.sql @@ -0,0 +1,41 @@ +-- Evergreen DB patch XXXX.schema.replace_field-default-value.sql +-- +-- Return the input XML when no replace rule is provided +-- +BEGIN; + +-- check whether patch can be applied +SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version); + +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; + curr_field TEXT; +BEGIN + + parsed_target := vandelay.strip_field( target_xml, ''); -- this dance normalizes the format of the xml for the IF below + xml_output := parsed_target; -- if there are no replace rules, just return the input + + FOR curr_field IN SELECT UNNEST( STRING_TO_ARRAY(field, ',') ) LOOP -- naive split, but it's the same we use in the perl + + xml_output := vandelay.strip_field( parsed_target, curr_field); + + IF xml_output <> parsed_target AND curr_field ~ E'~' THEN + -- we removed something, and there was a regexp restriction in the curr_field definition, so proceed + xml_output := vandelay.add_field( xml_output, source_xml, curr_field, 1 ); + ELSIF curr_field !~ E'~' THEN + -- No regexp restriction, add the curr_field + xml_output := vandelay.add_field( xml_output, source_xml, curr_field, 0 ); + END IF; + + parsed_target := xml_output; -- in prep for any following loop iterations + + END LOOP; + + RETURN xml_output; +END; +$_$ LANGUAGE PLPGSQL; + + +COMMIT; -- 2.43.2