Fix: search/nearby 500 (pgx numeric vs float8)
pgx по умолчанию передаёт float64 как numeric. В запросе BETWEEN $1 - $6 AND $1 + $6 numeric-numeric сравнивалось с double precision lat/lng и возвращало ошибку. Фикс: ::float8 касты на все параметры запроса. Проверено: /search/nearby → 200 с count=2 для юзеров в 600м.
This commit is contained in:
parent
aafbc6f047
commit
21c413a9cc
@ -110,21 +110,21 @@ func (r *Repo) Nearby(ctx context.Context, myID uuid.UUID, lat, lng, radiusKm fl
|
|||||||
AND u.id != $3
|
AND u.id != $3
|
||||||
AND ul.lat IS NOT NULL AND ul.lng IS NOT NULL
|
AND ul.lat IS NOT NULL AND ul.lng IS NOT NULL
|
||||||
AND ul.updated_at > NOW() - INTERVAL '1 hour'
|
AND ul.updated_at > NOW() - INTERVAL '1 hour'
|
||||||
AND ul.lat BETWEEN $1 - $6 AND $1 + $6
|
AND ul.lat BETWEEN ($1::float8 - $6::float8) AND ($1::float8 + $6::float8)
|
||||||
AND ul.lng BETWEEN $2 - $7 AND $2 + $7
|
AND ul.lng BETWEEN ($2::float8 - $7::float8) AND ($2::float8 + $7::float8)
|
||||||
)
|
)
|
||||||
SELECT id, name, photo_url, lat, lng,
|
SELECT id, name, photo_url, lat, lng,
|
||||||
2 * 6371 * asin(sqrt(
|
2 * 6371 * asin(sqrt(
|
||||||
sin(radians((lat - $1) / 2))^2 +
|
sin(radians((lat - $1::float8) / 2))^2 +
|
||||||
cos(radians($1)) * cos(radians(lat)) *
|
cos(radians($1::float8)) * cos(radians(lat)) *
|
||||||
sin(radians((lng - $2) / 2))^2
|
sin(radians((lng - $2::float8) / 2))^2
|
||||||
)) * 1000 AS dist_m
|
)) * 1000 AS dist_m
|
||||||
FROM bbox
|
FROM bbox
|
||||||
WHERE 2 * 6371 * asin(sqrt(
|
WHERE 2 * 6371 * asin(sqrt(
|
||||||
sin(radians((lat - $1) / 2))^2 +
|
sin(radians((lat - $1::float8) / 2))^2 +
|
||||||
cos(radians($1)) * cos(radians(lat)) *
|
cos(radians($1::float8)) * cos(radians(lat)) *
|
||||||
sin(radians((lng - $2) / 2))^2
|
sin(radians((lng - $2::float8) / 2))^2
|
||||||
)) <= $4
|
)) <= $4::float8
|
||||||
ORDER BY dist_m
|
ORDER BY dist_m
|
||||||
LIMIT $5`,
|
LIMIT $5`,
|
||||||
lat, lng, myID, radiusKm, limit, latDelta, lngDelta,
|
lat, lng, myID, radiusKm, limit, latDelta, lngDelta,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user