]> git.openstreetmap.org Git - nominatim.git/commitdiff
bdd: factor out reindexing on updates
authorSarah Hoffmann <lonvia@denofr.de>
Tue, 5 Jan 2021 14:17:46 +0000 (15:17 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Tue, 5 Jan 2021 14:17:46 +0000 (15:17 +0100)
test/bdd/steps/nominatim_environment.py
test/bdd/steps/steps_db_ops.py

index 2547bbe2707d967773bf9ddbfb5595f28dd53e39..7013a20e6455a7cf8e0fcf36795f46bd33193668 100644 (file)
@@ -191,6 +191,20 @@ class NominatimEnvironment:
         if not self.keep_scenario_db:
             self.db_drop_database(self.test_db)
 
+    def reindex_placex(self, db):
+        """ Run the indexing step until all data in the placex has
+            been processed. Indexing during updates can produce more data
+            to index under some circumstances. That is why indexing may have
+            to be run multiple times.
+        """
+        with db.cursor() as cur:
+            while True:
+                self.run_update_script('index')
+
+                cur.execute("SELECT 'a' FROM placex WHERE indexed_status != 0 LIMIT 1")
+                if cur.rowcount == 0:
+                    return
+
     def run_setup_script(self, *args, **kwargs):
         """ Run the Nominatim setup script with the given arguments.
         """
index 8f20cdaa2bbcb8d0861383bc58f439a579981be5..6bee88c12cd265863e445f3c7d920d82e3d079ac 100644 (file)
@@ -205,13 +205,7 @@ def update_place_table(context):
         for row in context.table:
             PlaceColumn(context).add_row(row, False).db_insert(cur)
 
-        while True:
-            context.nominatim.run_update_script('index')
-
-            cur.execute("SELECT 'a' FROM placex WHERE indexed_status != 0 LIMIT 1")
-            if cur.rowcount == 0:
-                break
-
+    context.nominatim.reindex_placex(context.db)
     check_database_integrity(context)
 
 @when("updating postcodes")
@@ -227,13 +221,7 @@ def delete_places(context, oids):
             where, params = NominatimID(oid).table_select()
             cur.execute("DELETE FROM place WHERE " + where, params)
 
-    while True:
-        context.nominatim.run_update_script('index')
-
-        with context.db.cursor() as cur:
-            cur.execute("SELECT 'a' FROM placex WHERE indexed_status != 0 LIMIT 1")
-            if cur.rowcount == 0:
-                break
+    context.nominatim.reindex_placex(context.db)
 
 ################################ THEN ##################################