X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/3f38091421a016c693ef69765f4796c26abb9461..dc7cfd1708da6fceb268d2efaaf92ef513a20234:/lib-sql/functions/place_triggers.sql?ds=sidebyside diff --git a/lib-sql/functions/place_triggers.sql b/lib-sql/functions/place_triggers.sql index 6a52021b..5b4a8441 100644 --- a/lib-sql/functions/place_triggers.sql +++ b/lib-sql/functions/place_triggers.sql @@ -37,7 +37,7 @@ BEGIN -- Remove the place from the list of places to be deleted DELETE FROM place_to_be_deleted pdel WHERE pdel.osm_type = NEW.osm_type and pdel.osm_id = NEW.osm_id - and pdel.class = NEW.class; + and pdel.class = NEW.class and pdel.type = NEW.type; -- Have we already done this place? SELECT * INTO existing @@ -296,7 +296,9 @@ BEGIN extratags = NEW.extratags, admin_level = NEW.admin_level, indexed_status = 2, - geometry = NEW.geometry + geometry = CASE WHEN existingplacex.rank_address = 0 + THEN simplify_large_polygons(NEW.geometry) + ELSE NEW.geometry END WHERE place_id = existingplacex.place_id; -- Invalidate linked places: they potentially get a new name and addresses. @@ -363,57 +365,3 @@ BEGIN RETURN NULL; END; $$ LANGUAGE plpgsql; - -CREATE OR REPLACE FUNCTION flush_deleted_places() - RETURNS INTEGER - AS $$ -BEGIN - -- deleting large polygons can have a massive effect on the system - require manual intervention to let them through - INSERT INTO import_polygon_delete (osm_type, osm_id, class, type) - SELECT osm_type, osm_id, class, type FROM place_to_be_deleted WHERE deferred; - - -- delete from place table - ALTER TABLE place DISABLE TRIGGER place_before_delete; - DELETE FROM place USING place_to_be_deleted - WHERE place.osm_type = place_to_be_deleted.osm_type - and place.osm_id = place_to_be_deleted.osm_id - and place.class = place_to_be_deleted.class - and place.type = place_to_be_deleted.type - and not deferred; - ALTER TABLE place ENABLE TRIGGER place_before_delete; - - -- Mark for delete in the placex table - UPDATE placex SET indexed_status = 100 FROM place_to_be_deleted - WHERE placex.osm_type = 'N' and place_to_be_deleted.osm_type = 'N' - and placex.osm_id = place_to_be_deleted.osm_id - and placex.class = place_to_be_deleted.class - and placex.type = place_to_be_deleted.type - and not deferred; - UPDATE placex SET indexed_status = 100 FROM place_to_be_deleted - WHERE placex.osm_type = 'W' and place_to_be_deleted.osm_type = 'W' - and placex.osm_id = place_to_be_deleted.osm_id - and placex.class = place_to_be_deleted.class - and placex.type = place_to_be_deleted.type - and not deferred; - UPDATE placex SET indexed_status = 100 FROM place_to_be_deleted - WHERE placex.osm_type = 'R' and place_to_be_deleted.osm_type = 'R' - and placex.osm_id = place_to_be_deleted.osm_id - and placex.class = place_to_be_deleted.class - and placex.type = place_to_be_deleted.type - and not deferred; - - -- Mark for delete in interpolations - UPDATE location_property_osmline SET indexed_status = 100 FROM place_to_be_deleted - WHERE place_to_be_deleted.osm_type = 'W' - and place_to_be_deleted.class = 'place' - and place_to_be_deleted.type = 'houses' - and location_property_osmline.osm_id = place_to_be_deleted.osm_id - and not deferred; - - -- Clear todo list. - TRUNCATE TABLE place_to_be_deleted; - - RETURN NULL; -END; -$$ LANGUAGE plpgsql; -