]> git.openstreetmap.org Git - nominatim.git/commitdiff
Remove special search for address part for long ways
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 22 Jul 2018 13:05:45 +0000 (15:05 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Sun, 22 Jul 2018 13:05:45 +0000 (15:05 +0200)
Ways now always have the complete set of crossing boundaries
independent of the length.

Fixes #1108.

sql/functions.sql
test/bdd/steps/db_ops.py

index 07fadba7c203ad59cbec61d9bef22ac48e322f5b..993084ef722604bce3d76914a82fb495055c9f06 100644 (file)
@@ -1875,33 +1875,6 @@ BEGIN
   END LOOP;
   --DEBUG: RAISE WARNING 'address computed';
 
-  -- for long ways we should add search terms for the entire length
-  IF st_length(NEW.geometry) > 0.05 THEN
-
-    location_rank_search := 0;
-    location_distance := 0;
-
-    FOR location IN SELECT * from getNearFeatures(NEW.partition, NEW.geometry, search_maxrank, isin_tokens) LOOP
-
-      IF location.rank_address != location_rank_search THEN
-        location_rank_search := location.rank_address;
-        location_distance := location.distance * 1.5;
-      END IF;
-
-      IF location.rank_search > 4 AND location.distance < location_distance THEN
-
-        -- Add it to the list of search terms
-        nameaddress_vector := array_merge(nameaddress_vector, location.keywords::integer[]);
-        INSERT INTO place_addressline (place_id, address_place_id, fromarea, isaddress, distance, cached_rank_address)
-          VALUES (NEW.place_id, location.place_id, true, false, location.distance, location.rank_address); 
-
-      END IF;
-
-    END LOOP;
-
-  END IF;
-  --DEBUG: RAISE WARNING 'search terms for long ways added';
-
   IF NEW.address is not null AND NEW.address ? 'postcode' 
      AND NEW.address->'postcode' not similar to '%(,|;)%' THEN
     NEW.postcode := upper(trim(NEW.address->'postcode'));
index 80f922222c0018c7e99c69e8064990883c51b69c..a0924840e5210947485525c401ee9f38ed68d283 100644 (file)
@@ -132,6 +132,18 @@ def compare_place_id(expected, result, column, context):
             LazyFmt("Bad place id in column %s. Expected: %s, got: %s.",
                     column, expected, PlaceObjName(result, context.db)))
 
+def check_database_integrity(context):
+    """ Check some generic constraints on the tables.
+    """
+    # place_addressline should not have duplicate (place_id, address_place_id)
+    cur = context.db.cursor()
+    cur.execute("""SELECT count(*) FROM
+                    (SELECT place_id, address_place_id, count(*) as c
+                     FROM place_addressline GROUP BY place_id, address_place_id) x
+                   WHERE c > 1""")
+    eq_(0, cur.fetchone()[0], "Duplicates found in place_addressline")
+
+
 class NominatimID:
     """ Splits a unique identifier for places into its components.
         As place_ids cannot be used for testing, we use a unique
@@ -290,6 +302,7 @@ def import_and_index_data_from_place_table(context):
                     and ST_GeometryType(geometry) = 'ST_LineString'""")
     context.db.commit()
     context.nominatim.run_setup_script('calculate-postcodes', 'index', 'index-noanalyse')
+    check_database_integrity(context)
 
 @when("updating places")
 def update_place_table(context):
@@ -314,6 +327,8 @@ def update_place_table(context):
         if cur.rowcount == 0:
             break
 
+    check_database_integrity(context)
+
 @when("marking for delete (?P<oids>.*)")
 def delete_places(context, oids):
     context.nominatim.run_setup_script(