From: Sarah Hoffmann Date: Tue, 25 Mar 2014 22:52:44 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/master' X-Git-Tag: deploy~545 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/15266a9fdd6630a3ce767d5e4a33ff670948a600?hp=-c Merge remote-tracking branch 'upstream/master' Conflicts: sql/functions.sql --- 15266a9fdd6630a3ce767d5e4a33ff670948a600 diff --combined sql/functions.sql index 839d086c,45681610..54175444 --- a/sql/functions.sql +++ b/sql/functions.sql @@@ -554,20 -554,6 +554,6 @@@ END $$ LANGUAGE plpgsql IMMUTABLE; - CREATE OR REPLACE FUNCTION get_country_code(place geometry, in_country_code VARCHAR(2)) RETURNS TEXT - AS $$ - DECLARE - nearcountry RECORD; - BEGIN - FOR nearcountry IN select country_code from country_name where country_code = lower(in_country_code) - LOOP - RETURN nearcountry.country_code; - END LOOP; - RETURN get_country_code(place); - END; - $$ - LANGUAGE plpgsql IMMUTABLE; - CREATE OR REPLACE FUNCTION get_country_language_code(search_country_code VARCHAR(2)) RETURNS TEXT AS $$ DECLARE @@@ -937,11 -923,6 +923,11 @@@ DECLAR BEGIN --DEBUG: RAISE WARNING '% %',NEW.osm_type,NEW.osm_id; + -- remove operator tag for most places, messes too much with search_name indexes + IF NEW.class not in ('amenity', 'shop') THEN + NEW.name := delete(NEW.name, 'operator'); + END IF; + -- just block these IF NEW.class in ('landuse','natural') and NEW.name is null THEN -- RAISE WARNING 'empty landuse %',NEW.osm_id; @@@ -970,7 -951,7 +956,7 @@@ NEW.place_id := nextval('seq_place'); NEW.indexed_status := 1; --STATUS_NEW - NEW.calculated_country_code := lower(get_country_code(NEW.geometry, NEW.country_code)); + NEW.calculated_country_code := lower(get_country_code(NEW.geometry)); NEW.partition := get_partition(NEW.geometry, NEW.calculated_country_code); NEW.geometry_sector := geometry_sector(NEW.partition, NEW.geometry); @@@ -1362,26 -1343,12 +1348,25 @@@ BEGI NEW.centroid := null; -- reclaculate country and partition - IF NEW.rank_search >= 4 THEN - NEW.calculated_country_code := lower(get_country_code(place_centroid)); + IF NEW.rank_search = 4 THEN + -- for countries, believe the mapped country code, + -- so that we remain in the right partition if the boundaries + -- suddenly expand. + NEW.partition := get_partition(place_centroid, lower(NEW.country_code)); + IF NEW.partition = 0 THEN + NEW.calculated_country_code := lower(get_country_code(place_centroid)); + NEW.partition := get_partition(place_centroid, NEW.calculated_country_code); + ELSE + NEW.calculated_country_code := lower(NEW.country_code); + END IF; ELSE - NEW.calculated_country_code := NULL; + IF NEW.rank_search > 4 THEN - --NEW.calculated_country_code := lower(get_country_code(NEW.geometry, NEW.country_code)); + NEW.calculated_country_code := lower(get_country_code(place_centroid)); + ELSE + NEW.calculated_country_code := NULL; + END IF; + NEW.partition := get_partition(place_centroid, NEW.calculated_country_code); END IF; - NEW.partition := get_partition(place_centroid, NEW.calculated_country_code); NEW.geometry_sector := geometry_sector(NEW.partition, place_centroid); -- Adding ourselves to the list simplifies address calculations later @@@ -2061,11 -2028,6 +2046,11 @@@ BEGI --DEBUG: RAISE WARNING '%', existingplacex; END IF; + -- remove operator tag for most places, messes too much with search_name indexes + IF NEW.class not in ('amenity', 'shop') THEN + NEW.name := delete(NEW.name, 'operator'); + END IF; + -- Just block these - lots and pointless IF NEW.class in ('landuse','natural') and NEW.name is null THEN -- if the name tag was removed, older versions might still be lurking in the place table @@@ -2256,12 -2218,6 +2241,12 @@@ END IF; + -- refuse to update multiplpoygons with too many objects, too much of a performance hit + IF ST_NumGeometries(NEW.geometry) > 2000 THEN + RAISE WARNING 'Dropping update of % % because of geometry complexity.', NEW.osm_type, NEW.osm_id; + RETURN NULL; + END IF; + IF coalesce(existing.name::text, '') != coalesce(NEW.name::text, '') OR coalesce(existing.extratags::text, '') != coalesce(NEW.extratags::text, '') OR coalesce(existing.housenumber, '') != coalesce(NEW.housenumber, '') @@@ -2287,6 -2243,16 +2272,16 @@@ geometry = NEW.geometry where osm_type = NEW.osm_type and osm_id = NEW.osm_id and class = NEW.class and type = NEW.type; + IF NEW.class in ('place','boundary') AND NEW.type in ('postcode','postal_code') THEN + IF NEW.postcode IS NULL THEN + -- postcode was deleted, no longer retain in placex + DELETE FROM placex where place_id = existingplacex.place_id; + RETURN NULL; + END IF; + + NEW.name := hstore('ref', NEW.postcode); + END IF; + update placex set name = NEW.name, housenumber = NEW.housenumber,