correctly handle housenumber lists

Lists are now standardised to use a semicolon separator.
This commit is contained in:
Sarah Hoffmann
2021-03-29 17:36:44 +02:00
parent 16a66b5326
commit 55fcc44c8c
2 changed files with 18 additions and 6 deletions

View File

@@ -48,6 +48,22 @@ $$
LANGUAGE plpgsql; 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) CREATE OR REPLACE FUNCTION getorcreate_housenumber_id(lookup_word TEXT)
RETURNS INTEGER RETURNS INTEGER
AS $$ AS $$

View File

@@ -666,21 +666,17 @@ BEGIN
NEW.housenumber := NULL; NEW.housenumber := NULL;
IF NEW.address is not NULL THEN IF NEW.address is not NULL THEN
IF NEW.address ? 'conscriptionnumber' THEN IF NEW.address ? 'conscriptionnumber' THEN
i := getorcreate_housenumber_id(make_standard_name(NEW.address->'conscriptionnumber'));
IF NEW.address ? 'streetnumber' THEN 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 ELSE
NEW.housenumber := NEW.address->'conscriptionnumber'; NEW.housenumber := NEW.address->'conscriptionnumber';
END IF; END IF;
ELSEIF NEW.address ? 'streetnumber' THEN ELSEIF NEW.address ? 'streetnumber' THEN
NEW.housenumber := NEW.address->'streetnumber'; NEW.housenumber := NEW.address->'streetnumber';
i := getorcreate_housenumber_id(make_standard_name(NEW.address->'streetnumber'));
ELSEIF NEW.address ? 'housenumber' THEN ELSEIF NEW.address ? 'housenumber' THEN
NEW.housenumber := NEW.address->'housenumber'; NEW.housenumber := NEW.address->'housenumber';
i := getorcreate_housenumber_id(make_standard_name(NEW.housenumber));
END IF; END IF;
NEW.housenumber := transliteration(NEW.housenumber); NEW.housenumber := create_housenumber_id(NEW.housenumber);
addr_street := NEW.address->'street'; addr_street := NEW.address->'street';
addr_place := NEW.address->'place'; addr_place := NEW.address->'place';