Skip to content

Commit f3ce098

Browse files
Merge pull request #19952 from kamil-tekiela/ParseAnalyze
Refactor ParseAnalyze
2 parents e2ac710 + a0420ac commit f3ce098

3 files changed

Lines changed: 16 additions & 12 deletions

File tree

src/Controllers/Import/ImportController.php

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -585,13 +585,12 @@ public function __invoke(ServerRequest $request): Response
585585
// can choke on it so avoid parsing)
586586
$sqlLength = mb_strlen(Current::$sqlQuery);
587587
if ($sqlLength <= $this->config->settings['MaxCharactersInDisplayedSQL']) {
588-
[$statementInfo, Current::$database, $tableFromSql] = ParseAnalyze::sqlQuery(
588+
[$statementInfo, Current::$database, $tableFromSql, $reloadNeeded] = ParseAnalyze::sqlQuery(
589589
Current::$sqlQuery,
590590
Current::$database,
591591
);
592592

593-
ResponseRenderer::$reload = $statementInfo->flags->reload;
594-
ImportSettings::$offset = (int) $statementInfo->flags->offset;
593+
ResponseRenderer::$reload = $reloadNeeded;
595594

596595
if (Current::$table != $tableFromSql && $tableFromSql !== '') {
597596
Current::$table = $tableFromSql;
@@ -611,13 +610,12 @@ public function __invoke(ServerRequest $request): Response
611610

612611
foreach ($queriesToBeExecuted as Current::$sqlQuery) {
613612
// parse sql query
614-
[$statementInfo, Current::$database, $tableFromSql] = ParseAnalyze::sqlQuery(
613+
[$statementInfo, Current::$database, $tableFromSql, $reloadNeeded] = ParseAnalyze::sqlQuery(
615614
Current::$sqlQuery,
616615
Current::$database,
617616
);
618617

619-
ImportSettings::$offset = (int) $statementInfo->flags->offset;
620-
ResponseRenderer::$reload = $statementInfo->flags->reload;
618+
ResponseRenderer::$reload = $reloadNeeded;
621619

622620
// Check if User is allowed to issue a 'DROP DATABASE' Statement
623621
if (

src/ParseAnalyze.php

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
namespace PhpMyAdmin;
66

7+
use PhpMyAdmin\SqlParser\Statements\AlterStatement;
8+
use PhpMyAdmin\SqlParser\Statements\CreateStatement;
9+
use PhpMyAdmin\SqlParser\Statements\DropStatement;
710
use PhpMyAdmin\SqlParser\Utils\Query;
811
use PhpMyAdmin\SqlParser\Utils\StatementInfo;
912

@@ -21,15 +24,18 @@ class ParseAnalyze
2124
* @param string $sqlQuery the query to parse
2225
* @param string $db the current database
2326
*
24-
* @return array<int, StatementInfo|string>
25-
* @psalm-return array{StatementInfo, string, string}
27+
* @return array{StatementInfo, string, string, bool}
2628
*/
2729
public static function sqlQuery(string $sqlQuery, string $db): array
2830
{
2931
$info = Query::getAll($sqlQuery);
3032

3133
$table = '';
3234

35+
$reload = $info->statement instanceof AlterStatement
36+
|| $info->statement instanceof CreateStatement
37+
|| $info->statement instanceof DropStatement;
38+
3339
// If the targeted table (and database) are different than the ones that is
3440
// currently browsed, edit `$db` and `$table` to match them so other elements
3541
// (page headers, links, navigation panel) can be updated properly.
@@ -55,12 +61,12 @@ public static function sqlQuery(string $sqlQuery, string $db): array
5561
// There is no point checking if a reloading is required if we already decided
5662
// to reload. Also, no reload is required for AJAX requests.
5763
$response = ResponseRenderer::getInstance();
58-
if (! $info->flags->reload && ! $response->isAjax()) {
64+
if (! $reload && ! $response->isAjax()) {
5965
// NOTE: Database names are case-insensitive.
60-
$info->flags->reload = strcasecmp($db, $previousDb) !== 0;
66+
$reload = strcasecmp($db, $previousDb) !== 0;
6167
}
6268
}
6369

64-
return [$info, $db, $table];
70+
return [$info, $db, $table, $reload];
6571
}
6672
}

tests/unit/ParseAnalyzeTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public function testSqlQuery(): void
2929

3030
self::assertSame('sakila', $actual[1]);
3131
self::assertSame('actor', $actual[2]);
32-
self::assertTrue($actual[0]->flags->reload);
32+
self::assertTrue($actual[3]);
3333
self::assertNotEmpty($actual[0]->selectTables);
3434
self::assertSame([['actor', 'sakila']], $actual[0]->selectTables);
3535
self::assertNotEmpty($actual[0]->selectExpressions);

0 commit comments

Comments
 (0)