Skip to content

Commit f221262

Browse files
committed
Merge branch 'QA_5_2'
Signed-off-by: Maurício Meneghini Fauth <mauricio@mfauth.net>
2 parents f150e54 + 3dc32a0 commit f221262

2 files changed

Lines changed: 31 additions & 13 deletions

File tree

src/Controllers/Table/GisVisualizationController.php

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
use PhpMyAdmin\Identifiers\DatabaseName;
2121
use PhpMyAdmin\Message;
2222
use PhpMyAdmin\ResponseRenderer;
23+
use PhpMyAdmin\SqlParser\Components\Limit;
24+
use PhpMyAdmin\SqlParser\Parser;
25+
use PhpMyAdmin\SqlParser\Statements\SelectStatement;
2326
use PhpMyAdmin\Template;
2427
use PhpMyAdmin\Url;
2528
use PhpMyAdmin\UrlParams;
@@ -80,18 +83,7 @@ public function __invoke(ServerRequest $request): Response
8083
return $this->response->response();
8184
}
8285

83-
$meta = $this->getColumnMeta($sqlQuery);
84-
85-
// Find the candidate fields for label column and spatial column
86-
$labelCandidates = [];
87-
$spatialCandidates = [];
88-
foreach ($meta as $columnMeta) {
89-
if ($columnMeta->isMappedTypeGeometry) {
90-
$spatialCandidates[] = $columnMeta->name;
91-
} else {
92-
$labelCandidates[] = $columnMeta->name;
93-
}
94-
}
86+
[$labelCandidates, $spatialCandidates] = $this->getCandidateColumns($sqlQuery);
9587

9688
if ($spatialCandidates === []) {
9789
$this->response->setRequestStatus(false);
@@ -254,4 +246,28 @@ private function getColumnMeta(string $sqlQuery): array
254246

255247
return $result === false ? [] : $this->dbi->getFieldsMeta($result);
256248
}
249+
250+
/** @return array{list<string>, list<string>} */
251+
private function getCandidateColumns(string $sqlQuery): array
252+
{
253+
$parser = new Parser($sqlQuery);
254+
/** @var SelectStatement $statement */
255+
$statement = $parser->statements[0];
256+
$statement->limit = new Limit(0, 0);
257+
$limitedSqlQuery = $statement->build();
258+
259+
$meta = $this->getColumnMeta($limitedSqlQuery);
260+
261+
$labelCandidates = [];
262+
$spatialCandidates = [];
263+
foreach ($meta as $columnMeta) {
264+
if ($columnMeta->isMappedTypeGeometry) {
265+
$spatialCandidates[] = $columnMeta->name;
266+
} else {
267+
$labelCandidates[] = $columnMeta->name;
268+
}
269+
}
270+
271+
return [$labelCandidates, $spatialCandidates];
272+
}
257273
}

tests/unit/Controllers/Table/GisVisualizationControllerTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function testGisVisualizationController(): void
4545
$dummyDbi = $this->createDbiDummy();
4646
$dummyDbi->addSelectDb('test_db');
4747
$dummyDbi->addResult(
48-
'SELECT * FROM `gis_all`',
48+
'SELECT * FROM `gis_all` LIMIT 0, 0',
4949
[['POINT', 'POINT(100 250)']],
5050
['name', 'shape'],
5151
[
@@ -127,5 +127,7 @@ public function testGisVisualizationController(): void
127127

128128
self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode());
129129
self::assertSame($expected, $responseRenderer->getHTMLResult());
130+
$dummyDbi->assertAllSelectsConsumed();
131+
$dummyDbi->assertAllQueriesConsumed();
130132
}
131133
}

0 commit comments

Comments
 (0)