From 55fcc44c8cfc56cf270e22175a7d468ab04bea4c Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Mon, 29 Mar 2021 17:36:44 +0200 Subject: [PATCH] correctly handle housenumber lists Lists are now standardised to use a semicolon separator. --- lib-sql/functions/normalization.sql | 16 ++++++++++++++++ lib-sql/functions/placex_triggers.sql | 8 ++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib-sql/functions/normalization.sql b/lib-sql/functions/normalization.sql index 6fcdf552..aca793c5 100644 --- a/lib-sql/functions/normalization.sql +++ b/lib-sql/functions/normalization.sql @@ -48,6 +48,22 @@ $$ LANGUAGE plpgsql; +CREATE OR REPLACE FUNCTION create_housenumber_id(housenumber TEXT) + RETURNS TEXT + AS $$ +DECLARE + normtext TEXT; +BEGIN + SELECT array_to_string(array_agg(trans), ';') + INTO normtext + FROM (SELECT transliteration(lookup_word) as trans, getorcreate_housenumber_id(lookup_word) + FROM (SELECT make_standard_name(h) as lookup_word + FROM regexp_split_to_table(housenumber, '[,;]') h) x) y; + + return normtext; +END; +$$ LANGUAGE plpgsql STABLE STRICT; + CREATE OR REPLACE FUNCTION getorcreate_housenumber_id(lookup_word TEXT) RETURNS INTEGER AS $$ diff --git a/lib-sql/functions/placex_triggers.sql b/lib-sql/functions/placex_triggers.sql index 6b334ef0..b47758df 100644 --- a/lib-sql/functions/placex_triggers.sql +++ b/lib-sql/functions/placex_triggers.sql @@ -666,21 +666,17 @@ BEGIN NEW.housenumber := NULL; IF NEW.address is not NULL THEN IF NEW.address ? 'conscriptionnumber' THEN - i := getorcreate_housenumber_id(make_standard_name(NEW.address->'conscriptionnumber')); IF NEW.address ? 'streetnumber' THEN - i := getorcreate_housenumber_id(make_standard_name(NEW.address->'streetnumber')); - NEW.housenumber := (NEW.address->'conscriptionnumber') || '/' || (NEW.address->'streetnumber'); + NEW.housenumber := (NEW.address->'conscriptionnumber') || ';' || (NEW.address->'streetnumber'); ELSE NEW.housenumber := NEW.address->'conscriptionnumber'; END IF; ELSEIF NEW.address ? 'streetnumber' THEN NEW.housenumber := NEW.address->'streetnumber'; - i := getorcreate_housenumber_id(make_standard_name(NEW.address->'streetnumber')); ELSEIF NEW.address ? 'housenumber' THEN NEW.housenumber := NEW.address->'housenumber'; - i := getorcreate_housenumber_id(make_standard_name(NEW.housenumber)); END IF; - NEW.housenumber := transliteration(NEW.housenumber); + NEW.housenumber := create_housenumber_id(NEW.housenumber); addr_street := NEW.address->'street'; addr_place := NEW.address->'place'; -- 2.45.1