X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/9ab59cdf423777105470235363919018a8cc25bb..e9b9a3f2cc80518165c0a8c34018302a42bc7737:/sql/functions.sql diff --git a/sql/functions.sql b/sql/functions.sql index 1e411e04..028a72b4 100644 --- a/sql/functions.sql +++ b/sql/functions.sql @@ -1971,7 +1971,7 @@ BEGIN -- mark everything linked to this place for re-indexing --DEBUG: RAISE WARNING 'placex_delete:03 % %',OLD.osm_type,OLD.osm_id; UPDATE placex set indexed_status = 2 from place_addressline where address_place_id = OLD.place_id - and placex.place_id = place_addressline.place_id and indexed_status = 0; + and placex.place_id = place_addressline.place_id and indexed_status = 0 and place_addressline.isaddress; --DEBUG: RAISE WARNING 'placex_delete:04 % %',OLD.osm_type,OLD.osm_id; DELETE FROM place_addressline where address_place_id = OLD.place_id; @@ -2113,8 +2113,19 @@ BEGIN DELETE from import_polygon_error where osm_type = NEW.osm_type and osm_id = NEW.osm_id; DELETE from import_polygon_delete where osm_type = NEW.osm_type and osm_id = NEW.osm_id; - -- To paraphrase, if there isn't an existing item, OR if the admin level has changed, OR if it is a major change in geometry - IF existingplacex.osm_type IS NULL THEN + -- To paraphrase, if there isn't an existing item, OR if the admin level has changed + IF existingplacex.osm_type IS NULL OR + coalesce(existingplacex.admin_level, 15) != coalesce(NEW.admin_level, 15) + THEN + + IF existingplacex.osm_type IS NOT NULL THEN + -- sanity check: ignore admin_level changes on places with too many active children + -- or we end up reindexing entire countries because somebody accidentally deleted admin_level + --LIMIT INDEXING: SELECT count(*) FROM (SELECT 'a' FROM placex , place_addressline where address_place_id = existingplacex.place_id and placex.place_id = place_addressline.place_id and indexed_status = 0 and place_addressline.isaddress LIMIT 100001) sub INTO i; + --LIMIT INDEXING: IF i > 100000 THEN + --LIMIT INDEXING: RETURN null; + --LIMIT INDEXING: END IF; + END IF; IF existing.osm_type IS NOT NULL THEN -- pathological case caused by the triggerless copy into place during initial import