From 79563d3629a36a5756bfc6f294baa20ee52c74c2 Mon Sep 17 00:00:00 2001 From: Galen Charlton Date: Tue, 10 Jan 2017 16:59:01 -0500 Subject: [PATCH] add normalizer support Signed-off-by: Galen Charlton --- .../src/sql/Pg/upgrade/YYYY.schema.authority.sql | 41 +++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/Open-ILS/src/sql/Pg/upgrade/YYYY.schema.authority.sql b/Open-ILS/src/sql/Pg/upgrade/YYYY.schema.authority.sql index 6feae1afef..30af392641 100644 --- a/Open-ILS/src/sql/Pg/upgrade/YYYY.schema.authority.sql +++ b/Open-ILS/src/sql/Pg/upgrade/YYYY.schema.authority.sql @@ -53,6 +53,14 @@ CREATE TABLE authority.heading_field ( joiner TEXT NULL ); +CREATE TABLE authority.heading_field_norm_map ( + id SERIAL PRIMARY KEY, + field INT NOT NULL REFERENCES authority.heading_field (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, + norm INT NOT NULL REFERENCES config.index_normalizer (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, + params TEXT, + pos INT NOT NULL DEFAULT 0 +); + INSERT INTO authority.heading_field(heading_type, heading_purpose, label, heading_xpath, component_xpath, type_xpath, thesaurus_xpath, thesaurus_override_xpath) VALUES ( 'topical_term', 'main', 'Main Topical Term', '/mads21:mads/mads21:authority', '//mads21:topic', NULL, '/mads21:mads/mads21:authority/mads21:topic[1]/@authority', NULL ), ( 'topical_term', 'variant', 'Variant Topical Term', '/mads21:mads/mads21:variant', '//mads21:topic', '/mads21:variant/@type', '/mads21:mads/mads21:authority/mads21:topic[1]/@authority', '//mads21:topic[1]/@authority'), @@ -61,6 +69,11 @@ INSERT INTO authority.heading_field(heading_type, heading_purpose, label, headin ( 'personal_name', 'variant', 'Variant Personal name', '/mads21:mads/mads21:variant', '//mads21:name', NULL, NULL, NULL ) ; +-- NACO normalize all the things +INSERT INTO authority.heading_field_norm_map (field, norm, pos) +SELECT id, 1, 0 +FROM authority.heading_field; + CREATE TYPE authority.heading AS ( type authority.heading_type, purpose authority.heading_purpose, @@ -83,6 +96,8 @@ DECLARE component_node TEXT; component_node_list TEXT[]; raw_text TEXT; + normalized_text TEXT; + normalizer RECORD; curr_text TEXT; joiner TEXT; type_value TEXT; @@ -177,7 +192,31 @@ BEGIN END LOOP; IF raw_text IS NOT NULL THEN - output_row.heading = raw_text; + output_row.heading := raw_text; + normalized_text := raw_text; + + FOR normalizer IN + SELECT n.func AS func, + n.param_count AS param_count, + m.params AS params + FROM config.index_normalizer n + JOIN authority.heading_field_norm_map m ON (m.norm = n.id) + WHERE m.field = idx.id + ORDER BY m.pos LOOP + + EXECUTE 'SELECT ' || normalizer.func || '(' || + quote_literal( normalized_text ) || + CASE + WHEN normalizer.param_count > 0 + THEN ',' || REPLACE(REPLACE(BTRIM(normalizer.params,'[]'),E'\'',E'\\\''),E'"',E'\'') + ELSE '' + END || + ')' INTO normalized_text; + + END LOOP; + + output_row.normalized_heading := normalized_text; + RETURN NEXT output_row; END IF; END LOOP; -- 2.11.0