]> git.openstreetmap.org Git - nominatim.git/commitdiff
correctly handle housenumber lists
authorSarah Hoffmann <lonvia@denofr.de>
Mon, 29 Mar 2021 15:36:44 +0000 (17:36 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Sun, 4 Apr 2021 13:26:47 +0000 (15:26 +0200)
Lists are now standardised to use a semicolon separator.

lib-sql/functions/normalization.sql
lib-sql/functions/placex_triggers.sql

index 6fcdf55250511077b74366651f062aac45125c55..aca793c57b91cca476137d943b44f086290fa9ed 100644 (file)
@@ -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 $$
index 6b334ef01fe273f54ad778f153d8263378ad8f5b..b47758df3b3bfd3f1c066e75b59859961ea3cae8 100644 (file)
@@ -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';