From: Sarah Hoffmann Date: Mon, 29 Mar 2021 15:36:44 +0000 (+0200) Subject: correctly handle housenumber lists X-Git-Tag: v3.7.0~3^2~2 X-Git-Url: https://git.openstreetmap.org/nominatim.git/commitdiff_plain/55fcc44c8cfc56cf270e22175a7d468ab04bea4c correctly handle housenumber lists Lists are now standardised to use a semicolon separator. --- 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';