]> git.openstreetmap.org Git - nominatim.git/blobdiff - test/bdd/steps/db_ops.py
Merge remote-tracking branch 'upstream/master'
[nominatim.git] / test / bdd / steps / db_ops.py
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(