fix(analyze): cad_exists_in_db requires non-NULL geometry #1034
1 changed files with 13 additions and 4 deletions
|
|
@ -65,19 +65,28 @@ def validate_cad_format(cad_num: str) -> bool:
|
|||
|
||||
|
||||
def cad_exists_in_db(db: Session, cad_num: str) -> bool:
|
||||
"""Проверка: есть ли geometry для cad_num в любой из 3 таблиц.
|
||||
"""Проверка: есть ли НЕПУСТАЯ geometry для cad_num в любой из 3 таблиц.
|
||||
|
||||
Использует EXISTS short-circuit — самая дешёвая проверка.
|
||||
|
||||
NB: `geom IS NOT NULL` обязателен — есть ~964 строк в cad_parcels_geom с meta,
|
||||
но NULL-геометрией. Без фильтра функция врала бы «geometry есть» → analyze
|
||||
fallback решал бы "ready"/не ставил NSPD-fetch → участок навсегда застревал в
|
||||
202 (никогда не подтянул бы реальную геометрию). С фильтром null-geom участок
|
||||
корректно идёт в fetch → НСПД отдаёт геометрию → analyze работает (или 404).
|
||||
"""
|
||||
row = db.execute(
|
||||
text(
|
||||
"""
|
||||
SELECT 1 WHERE EXISTS (
|
||||
SELECT 1 FROM cad_quarters_geom g WHERE g.cad_number = :c
|
||||
SELECT 1 FROM cad_quarters_geom g
|
||||
WHERE g.cad_number = :c AND g.geom IS NOT NULL
|
||||
UNION ALL
|
||||
SELECT 1 FROM cad_buildings b WHERE b.cad_num = :c
|
||||
SELECT 1 FROM cad_buildings b
|
||||
WHERE b.cad_num = :c AND b.geom IS NOT NULL
|
||||
UNION ALL
|
||||
SELECT 1 FROM cad_parcels_geom p WHERE p.cad_num = :c
|
||||
SELECT 1 FROM cad_parcels_geom p
|
||||
WHERE p.cad_num = :c AND p.geom IS NOT NULL
|
||||
) LIMIT 1
|
||||
"""
|
||||
),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue