]> git.openstreetmap.org Git - nominatim.git/blobdiff - sql/functions.sql
switch attributions to ODbL
[nominatim.git] / sql / functions.sql
index 548362ad21230775dc9d0bd889cfa416d39649ec..1227155c68e13725a2fe68c3b79dee9a3b9c43f8 100644 (file)
@@ -1234,6 +1234,13 @@ DECLARE
   result BOOLEAN;
 BEGIN
 
+  -- deferred delete
+  IF OLD.indexed_status = 100 THEN
+    --DEBUG: RAISE WARNING 'placex_update_delete % %',NEW.osm_type,NEW.osm_id;
+    delete from placex where place_id = OLD.place_id;
+    RETURN NULL;
+  END IF;
+
   IF NEW.indexed_status != 0 OR OLD.indexed_status = 0 OR NEW.linked_place_id is not null THEN
     RETURN NEW;
   END IF;
@@ -1248,13 +1255,6 @@ BEGIN
     RETURN NEW;
   END IF;
 
-  -- deferred delete
-  IF OLD.indexed_status = 100 THEN
-    --DEBUG: RAISE WARNING 'placex_update_delete % %',NEW.osm_type,NEW.osm_id;
-    delete from placex where place_id = OLD.place_id;
-    RETURN NULL;
-  END IF;
-
   IF OLD.indexed_status != 0 THEN
     --DEBUG: RAISE WARNING 'placex_update_0 % %',NEW.osm_type,NEW.osm_id;
 
@@ -1639,6 +1639,8 @@ BEGIN
     location_rank_search := 0;
     location_distance := 0;
     location_parent := NULL;
+    -- added ourself as address already
+    address_havelevel[NEW.rank_address] := true;
     -- RAISE WARNING '  getNearFeatures(%,''%'',%,''%'')',NEW.partition, place_centroid, search_maxrank, isin_tokens;
     FOR location IN SELECT * from getNearFeatures(NEW.partition, place_centroid, search_maxrank, isin_tokens) LOOP
 
@@ -1763,9 +1765,9 @@ DECLARE
 BEGIN
   -- RAISE WARNING 'placex_delete % %',OLD.osm_type,OLD.osm_id;
 
-  update placex set linked_place_id = null where linked_place_id = OLD.place_id;
+  update placex set linked_place_id = null, indexed_status = 2 where linked_place_id = OLD.place_id and indexed_status = 0;
   --DEBUG: RAISE WARNING 'placex_delete:01 % %',OLD.osm_type,OLD.osm_id;
-  update placex set indexed_status = 2 where linked_place_id = OLD.place_id and indexed_status = 0;
+  update placex set linked_place_id = null where linked_place_id = OLD.place_id;
   --DEBUG: RAISE WARNING 'placex_delete:02 % %',OLD.osm_type,OLD.osm_id;
 
   IF OLD.rank_address < 30 THEN
@@ -2178,7 +2180,7 @@ BEGIN
 
   FOR location IN select * from get_addressdata(for_place_id) where isaddress order by rank_address desc LOOP
     currresult := trim(get_name_by_language(location.name, languagepref));
-    IF currresult != prevresult AND currresult IS NOT NULL THEN
+    IF currresult != prevresult AND currresult IS NOT NULL AND result[(100 - location.rank_address)] IS NULL THEN
       result[(100 - location.rank_address)] := trim(get_name_by_language(location.name, languagepref));
       prevresult := currresult;
     END IF;