fix(tradein): estimate 500 — AmbiguousParameter на NULL-параметрах #389

Merged
lekss361 merged 1 commit from fix/tradein-estimate-ambiguous-param into main 2026-05-22 05:03:54 +00:00

View file

@ -347,10 +347,13 @@ def _fetch_analogs(
-- термом) PostgreSQL трактует имя как входную колонку listings,
-- которой нет "column distance_m does not exist". Инлайним ST_Distance.
ST_Distance(geom::geography, ST_MakePoint(:lon, :lat)::geography) / 1000.0
+ CASE WHEN :target_year IS NOT NULL AND year_built IS NOT NULL
THEN abs(year_built - :target_year) / 12.0 ELSE 0 END
+ CASE WHEN :target_house_type IS NOT NULL AND house_type IS NOT NULL
AND house_type <> :target_house_type
-- CAST обязателен: target_year / target_house_type приходят NULL
-- без типа PostgreSQL "could not determine data type of parameter"
-- (AmbiguousParameter). Явный тип снимает неоднозначность.
+ CASE WHEN CAST(:target_year AS integer) IS NOT NULL AND year_built IS NOT NULL
THEN abs(year_built - CAST(:target_year AS integer)) / 12.0 ELSE 0 END
+ CASE WHEN CAST(:target_house_type AS text) IS NOT NULL AND house_type IS NOT NULL
AND house_type <> CAST(:target_house_type AS text)
THEN 1.5 ELSE 0 END
)
LIMIT 50