From: miker Date: Mon, 7 Mar 2011 16:03:24 +0000 (+0000) Subject: more SVF value normalizers, and application thereof X-Git-Tag: kcls-grey-screen-prod1~2^2~34 X-Git-Url: http://git.equinoxoli.org/?p=evergreen-equinox.git;a=commitdiff_plain;h=82a5b1c320e7f33fc4d995603694b8d9a1c25f75 more SVF value normalizers, and application thereof git-svn-id: svn://svn.open-ils.org/ILS/trunk@19615 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index 4de56e5..4d14a59 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -768,6 +768,10 @@ CREATE OR REPLACE FUNCTION public.approximate_high_date( TEXT ) RETURNS TEXT AS SELECT approximate_date( $1, '9'); $func$ LANGUAGE SQL STRICT IMMUTABLE; +CREATE OR REPLACE FUNCTION public.content_or_null( TEXT ) RETURNS TEXT AS $func$ + SELECT CASE WHEN $1 ~ E'^\\s*$' THEN NULL ELSE $1 END +$func$ LANGUAGE SQL STRICT IMMUTABLE; + CREATE OR REPLACE FUNCTION public.integer_or_null( TEXT ) RETURNS TEXT AS $func$ SELECT CASE WHEN $1 ~ E'^\\d+$' THEN $1 ELSE NULL END $func$ LANGUAGE SQL STRICT IMMUTABLE; diff --git a/Open-ILS/src/sql/Pg/950.data.seed-values.sql b/Open-ILS/src/sql/Pg/950.data.seed-values.sql index 9d61e4d..b65a832 100644 --- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql +++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql @@ -4950,6 +4950,34 @@ INSERT INTO config.metabib_field_index_norm_map (field,norm,params) WHERE i.func IN ('replace') AND m.id IN (19); +INSERT INTO config.record_attr_index_norm_map (attr,norm,pos) + SELECT m.name, i.id, 0 + FROM config.record_attr_definition m, + config.index_normalizer i + WHERE i.func IN ('content_or_null') + AND m.name IN ('titlesort', 'authorsort'); + +INSERT INTO config.record_attr_index_norm_map (attr,norm,pos) + SELECT m.name, i.id, 0 + FROM config.record_attr_definition m, + config.index_normalizer i + WHERE i.func IN ('integer_or_null') + AND m.name IN ('date1', 'date2', 'pubdate'); + +INSERT INTO config.record_attr_index_norm_map (attr,norm,pos) + SELECT m.name, i.id, 0 + FROM config.record_attr_definition m, + config.index_normalizer i + WHERE i.func IN ('approximate_low_date') + AND m.name IN ('date1', 'pubdate'); + +INSERT INTO config.record_attr_index_norm_map (attr,norm,pos) + SELECT m.name, i.id, 0 + FROM config.record_attr_definition m, + config.index_normalizer i + WHERE i.func IN ('approximate_high_date') + AND m.name IN ('date2'); + -- claims never checked out mark item missing INSERT INTO config.org_unit_setting_type ( name, label, description, datatype ) diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.svf-phase-one.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.svf-phase-one.sql index 526d08f..8c7c82c 100644 --- a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.svf-phase-one.sql +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.svf-phase-one.sql @@ -459,5 +459,60 @@ $func$ LANGUAGE PLPGSQL; DROP FUNCTION metabib.reingest_metabib_rec_descriptor( bib_id BIGINT ); -COMMIT; +CREATE OR REPLACE FUNCTION public.approximate_date( TEXT, TEXT ) RETURNS TEXT AS $func$ + SELECT REGEXP_REPLACE( $1, E'\\D', $2, 'g' ); +$func$ LANGUAGE SQL STRICT IMMUTABLE; + +CREATE OR REPLACE FUNCTION public.approximate_low_date( TEXT ) RETURNS TEXT AS $func$ + SELECT approximate_date( $1, '0'); +$func$ LANGUAGE SQL STRICT IMMUTABLE; + +CREATE OR REPLACE FUNCTION public.approximate_high_date( TEXT ) RETURNS TEXT AS $func$ + SELECT approximate_date( $1, '9'); +$func$ LANGUAGE SQL STRICT IMMUTABLE; + +CREATE OR REPLACE FUNCTION public.integer_or_null( TEXT ) RETURNS TEXT AS $func$ + SELECT CASE WHEN $1 ~ E'^\\d+$' THEN $1 ELSE NULL END +$func$ LANGUAGE SQL STRICT IMMUTABLE; + +CREATE OR REPLACE FUNCTION public.content_or_null( TEXT ) RETURNS TEXT AS $func$ + SELECT CASE WHEN $1 ~ E'^\\s*$' THEN NULL ELSE $1 END +$func$ LANGUAGE SQL STRICT IMMUTABLE; + +CREATE OR REPLACE FUNCTION public.force_to_isbn13( TEXT ) RETURNS TEXT AS $func$ + use Business::ISBN; + use strict; + use warnings; + + # Find the first ISBN, force it to ISBN13 and return it + + my $input = shift; + + foreach my $word (split(/\s/, $input)) { + my $isbn = Business::ISBN->new($word); + + # First check the checksum; if it is not valid, fix it and add the original + # bad-checksum ISBN to the output + if ($isbn && $isbn->is_valid_checksum() == Business::ISBN::BAD_CHECKSUM) { + $isbn->fix_checksum(); + } + + # If we now have a valid ISBN, force it to ISBN13 and return it + return $isbn->as_isbn13->isbn if ($isbn && $isbn->is_valid()); + } + return undef; +$func$ LANGUAGE PLPERLU; + +COMMENT ON FUNCTION public.force_to_isbn13(TEXT) IS $$ +/* + * Copyright (C) 2011 Equinox Software + * Mike Rylander + * + * Inspired by translate_isbn1013 + * + * The force_to_isbn13 function takes an input ISBN and returns the ISBN13 + * version without hypens and with a repaired checksum if the checksum was bad + */ +$$; +COMMIT;