From: Sarah Hoffmann Date: Fri, 30 Jun 2023 12:41:01 +0000 (+0200) Subject: replace regexp_match with generic op() functions X-Git-Tag: v4.3.0~57^2~4 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/673c3c7a556d90f5168ed815bf775b1eb9b5a532?ds=sidebyside;hp=513504140512d17ddbe0769b2ec3887ee16f7e31 replace regexp_match with generic op() functions Works around a bug in SQLAlchemy where regexp_match creates an unstable cache key. --- 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)