]> git.openstreetmap.org Git - nominatim.git/commitdiff
replace regexp_match with generic op() functions
authorSarah Hoffmann <lonvia@denofr.de>
Fri, 30 Jun 2023 12:41:01 +0000 (14:41 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Sat, 1 Jul 2023 16:15:22 +0000 (18:15 +0200)
Works around a bug in SQLAlchemy where regexp_match creates an
unstable cache key.

nominatim/api/search/db_searches.py

index b13671c06f647fc8b79c3a582835fcae9bc893c8..fc3f9e0945e7d6ef39d66fc1871bc5d708d1b544 100644 (file)
@@ -633,7 +633,7 @@ class PlaceSearch(AbstractSearch):
             hnr_regexp = f"\\m({'|'.join(self.housenumbers.values)})\\M"
             sql = sql.where(tsearch.c.address_rank.between(16, 30))\
                      .where(sa.or_(tsearch.c.address_rank < 30,
             hnr_regexp = f"\\m({'|'.join(self.housenumbers.values)})\\M"
             sql = sql.where(tsearch.c.address_rank.between(16, 30))\
                      .where(sa.or_(tsearch.c.address_rank < 30,
-                                  t.c.housenumber.regexp_match(hnr_regexp, flags='i')))
+                                  t.c.housenumber.op('~*')(hnr_regexp)))
 
             # Cross check for housenumbers, need to do that on a rather large
             # set. Worst case there are 40.000 main streets in OSM.
 
             # Cross check for housenumbers, need to do that on a rather large
             # set. Worst case there are 40.000 main streets in OSM.
@@ -644,7 +644,7 @@ class PlaceSearch(AbstractSearch):
             pid_list = array_agg(thnr.c.place_id) # type: ignore[no-untyped-call]
             place_sql = sa.select(pid_list)\
                           .where(thnr.c.parent_place_id == inner.c.place_id)\
             pid_list = array_agg(thnr.c.place_id) # type: ignore[no-untyped-call]
             place_sql = sa.select(pid_list)\
                           .where(thnr.c.parent_place_id == inner.c.place_id)\
-                          .where(thnr.c.housenumber.regexp_match(hnr_regexp, flags='i'))\
+                          .where(thnr.c.housenumber.op('~*')(hnr_regexp))\
                           .where(thnr.c.linked_place_id == None)\
                           .where(thnr.c.indexed_status == 0)
 
                           .where(thnr.c.linked_place_id == None)\
                           .where(thnr.c.indexed_status == 0)