From 27f76a10c858c54abcd4414c709ed4fe3837b74c Mon Sep 17 00:00:00 2001 From: Dan Pearl Date: Mon, 5 Jan 2015 13:28:13 -0500 Subject: [PATCH] LP#1155313: upgrade script and pgTAP tests for monograph_part label normalization fix Signed-off-by: Daniel Pearl Signed-off-by: Galen Charlton --- Open-ILS/src/sql/Pg/t/lpad_number_substrings.pg | 41 ++++++++++++++++++++++ .../Pg/upgrade/XXXX.schema.lpad-number-repair.sql | 19 ++++++++++ 2 files changed, 60 insertions(+) create mode 100644 Open-ILS/src/sql/Pg/t/lpad_number_substrings.pg create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.lpad-number-repair.sql diff --git a/Open-ILS/src/sql/Pg/t/lpad_number_substrings.pg b/Open-ILS/src/sql/Pg/t/lpad_number_substrings.pg new file mode 100644 index 0000000000..e7f2729071 --- /dev/null +++ b/Open-ILS/src/sql/Pg/t/lpad_number_substrings.pg @@ -0,0 +1,41 @@ + +-- Turn off echo and keep things quiet. +\set ECHO +\set QUIET 1 + +-- Format the output for nice TAP. +\pset format unaligned +\pset tuples_only true +\pset pager + +-- Revert all changes on failure. +\set ON_ERROR_ROLLBACK 1 +\set ON_ERROR_STOP true +\set QUIET 1 + +-- Load the TAP functions. +BEGIN; + +-- Plan the tests. +SELECT plan(5); + +-- Run the tests. +SELECT is(evergreen.lpad_number_substrings( + 'Appendix','0',5), 'Appendix','Non-numeric string'); + +SELECT is(evergreen.lpad_number_substrings( + 'DISC 11','0',5), 'DISC 00011','Prefix, 1 number'); + +SELECT is(evergreen.lpad_number_substrings( + 'DISC 14.1','0',5), 'DISC 00014.00001','Prefix, 2 numbers'); + +SELECT is(evergreen.lpad_number_substrings( + 'DISC 12.12.13','0',5), 'DISC 00012.00012.00013','Prefix, 3 numbers'); + +SELECT is(evergreen.lpad_number_substrings( + 'Vol 5a-15','0',5), 'DISC 00005a-00015','Mixed format'); + + +-- Finish the tests and clean up. +SELECT * FROM finish(); +ROLLBACK; diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.lpad-number-repair.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.lpad-number-repair.sql new file mode 100644 index 0000000000..7b79fc42ae --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.lpad-number-repair.sql @@ -0,0 +1,19 @@ +BEGIN; + +CREATE OR REPLACE FUNCTION evergreen.lpad_number_substrings( TEXT, TEXT, INT ) RETURNS TEXT AS $$ + my $string = shift; # Source string + my $pad = shift; # string to fill. Typically '0'. This should be a single character. + my $len = shift; # length of resultant padded field + my $find = $len - 1; + + while ($string =~ /(^|\D)(\d{1,$find})($|\D)/) { + my $padded = $2; + $padded = $pad x ($len - length($padded)) . $padded; + $string = $` . $1 . $padded . $3 . $'; + } + + return $string; +$$ LANGUAGE PLPERLU; + +COMMIT; + -- 2.11.0