remove SQL lambdas with IN expressions

The values of IN expressions are incorrectly cached.
This commit is contained in:
Sarah Hoffmann
2023-08-02 12:34:07 +02:00
parent 2171b38551
commit 2c7e1db5f6

View File

@@ -406,9 +406,9 @@ class CountrySearch(AbstractSearch):
t = conn.t.placex t = conn.t.placex
ccodes = self.countries.values ccodes = self.countries.values
sql: SaLambdaSelect = sa.lambda_stmt(lambda: _select_placex(t)\ sql = _select_placex(t)\
.where(t.c.country_code.in_(ccodes))\ .where(t.c.country_code.in_(ccodes))\
.where(t.c.rank_address == 4)) .where(t.c.rank_address == 4)
if details.geometry_output: if details.geometry_output:
sql = _add_geometry_columns(sql, t.c.geometry, details) sql = _add_geometry_columns(sql, t.c.geometry, details)
@@ -495,12 +495,11 @@ class PostcodeSearch(AbstractSearch):
t = conn.t.postcode t = conn.t.postcode
pcs = self.postcodes.values pcs = self.postcodes.values
sql: SaLambdaSelect = sa.lambda_stmt(lambda: sql = sa.select(t.c.place_id, t.c.parent_place_id,
sa.select(t.c.place_id, t.c.parent_place_id,
t.c.rank_search, t.c.rank_address, t.c.rank_search, t.c.rank_address,
t.c.postcode, t.c.country_code, t.c.postcode, t.c.country_code,
t.c.geometry.label('centroid')) t.c.geometry.label('centroid'))\
.where(t.c.postcode.in_(pcs))) .where(t.c.postcode.in_(pcs))
if details.geometry_output: if details.geometry_output:
sql = _add_geometry_columns(sql, t.c.geometry, details) sql = _add_geometry_columns(sql, t.c.geometry, details)
@@ -609,7 +608,7 @@ class PlaceSearch(AbstractSearch):
pcs = self.postcodes.values pcs = self.postcodes.values
if self.expected_count > 1000: if self.expected_count > 1000:
# Many results expected. Restrict by postcode. # Many results expected. Restrict by postcode.
sql = sql.where(lambda: sa.select(tpc.c.postcode) sql = sql.where(sa.select(tpc.c.postcode)
.where(tpc.c.postcode.in_(pcs)) .where(tpc.c.postcode.in_(pcs))
.where(tsearch.c.centroid.ST_DWithin(tpc.c.geometry, 0.12)) .where(tsearch.c.centroid.ST_DWithin(tpc.c.geometry, 0.12))
.exists()) .exists())