From 673c3c7a556d90f5168ed815bf775b1eb9b5a532 Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Fri, 30 Jun 2023 14:41:01 +0200 Subject: [PATCH 1/1] replace regexp_match with generic op() functions Works around a bug in SQLAlchemy where regexp_match creates an unstable cache key. --- nominatim/api/search/db_searches.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nominatim/api/search/db_searches.py b/nominatim/api/search/db_searches.py index b13671c0..fc3f9e09 100644 --- a/nominatim/api/search/db_searches.py +++ b/nominatim/api/search/db_searches.py @@ -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, - 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. @@ -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)\ - .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) -- 2.39.5