]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge remote-tracking branch 'upstream/master'
authorSarah Hoffmann <lonvia@denofr.de>
Tue, 25 Mar 2014 22:52:44 +0000 (23:52 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Tue, 25 Mar 2014 22:52:44 +0000 (23:52 +0100)
Conflicts:
sql/functions.sql

1  2 
sql/functions.sql

diff --combined sql/functions.sql
index 839d086c5b78b0b577d4ed7bd9e3c243a5beec0a,45681610f608267b01e990f8d215802eb6e5fa03..541754447495ceacf84119deada7d6ad0eddbc86
@@@ -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;
    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
  
    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, '')
        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,