Skip to content

Commit ddabbf8

Browse files
Refactor spatial query handling to improve clarity and consistency in distance calculations
1 parent 3336ebc commit ddabbf8

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

src/Database/Adapter/MariaDB.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,7 +1368,7 @@ protected function handleDistanceSpatialQueries(Query $query, array &$binds, str
13681368
$binds[":{$placeholder}_0"] = $this->convertArrayToWKT($distanceParams[0]);
13691369
$binds[":{$placeholder}_1"] = $distanceParams[1];
13701370

1371-
$meters = isset($distanceParams[2]) && $distanceParams[2] === true;
1371+
$useMeters = isset($distanceParams[2]) && $distanceParams[2] === true;
13721372

13731373
switch ($query->getMethod()) {
13741374
case Query::TYPE_DISTANCE_EQUAL:
@@ -1387,7 +1387,7 @@ protected function handleDistanceSpatialQueries(Query $query, array &$binds, str
13871387
throw new DatabaseException('Unknown spatial query method: ' . $query->getMethod());
13881388
}
13891389

1390-
if ($meters) {
1390+
if ($useMeters) {
13911391
return "ST_DISTANCE_SPHERE({$alias}.{$attribute}, ST_GeomFromText(:{$placeholder}_0), 6371000) {$operator} :{$placeholder}_1";
13921392
}
13931393
return "ST_Distance({$alias}.{$attribute}, ST_GeomFromText(:{$placeholder}_0)) {$operator} :{$placeholder}_1";

src/Database/Adapter/MySQL.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,14 @@ protected function handleDistanceSpatialQueries(Query $query, array &$binds, str
114114
throw new DatabaseException('Unknown spatial query method: ' . $query->getMethod());
115115
}
116116

117-
$unit = $useMeters ? ", 'meter'" : '';
117+
if ($useMeters) {
118+
$attr = "ST_SRID({$alias}.{$attribute}, " . Database::SRID . ")";
119+
$geom = "ST_GeomFromText(:{$placeholder}_0, " . Database::SRID . ")";
120+
return "ST_Distance({$attr}, {$geom}, 'metre') {$operator} :{$placeholder}_1";
121+
}
118122

119-
return "ST_Distance({$alias}.{$attribute}, ST_GeomFromText(:{$placeholder}_0){$unit}) {$operator} :{$placeholder}_1";
123+
// Without meters, use default behavior
124+
return "ST_Distance({$alias}.{$attribute}, ST_GeomFromText(:{$placeholder}_0)) {$operator} :{$placeholder}_1";
120125
}
121126

122127
public function getSupportForIndexArray(): bool

0 commit comments

Comments
 (0)