|
5 | 5 | namespace PhpMyAdmin\SqlParser\Tests\Utils; |
6 | 6 |
|
7 | 7 | use PhpMyAdmin\SqlParser\Parser; |
| 8 | +use PhpMyAdmin\SqlParser\Statement; |
8 | 9 | use PhpMyAdmin\SqlParser\Tests\TestCase; |
9 | 10 | use PhpMyAdmin\SqlParser\Utils\Query; |
10 | 11 | use PhpMyAdmin\SqlParser\Utils\StatementFlags; |
@@ -379,6 +380,40 @@ public function testGetAll(): void |
379 | 380 | ); |
380 | 381 | } |
381 | 382 |
|
| 383 | + public function testGetAllTableWithDotsAndReplaceClause(): void |
| 384 | + { |
| 385 | + $query = 'SELECT * FROM `test.2024-11-01` ORDER BY `test.2024-11-01`.`id` ASC;'; |
| 386 | + |
| 387 | + $statements = Query::getAll($query); |
| 388 | + |
| 389 | + self::assertInstanceOf(Statement::class, $statements->statement); |
| 390 | + self::assertNotNull($statements->parser->list); |
| 391 | + |
| 392 | + $fromClause = Query::replaceClause($statements->statement, $statements->parser->list, 'ORDER BY', ''); |
| 393 | + self::assertEquals('SELECT * FROM `test.2024-11-01` ', $fromClause); |
| 394 | + |
| 395 | + $fromClause = Query::replaceClause($statements->statement, $statements->parser->list, 'ORDER BY'); |
| 396 | + self::assertEquals('SELECT * FROM `test.2024-11-01` ORDER BY ', $fromClause); |
| 397 | + |
| 398 | + // With spaces |
| 399 | + $fromClause = Query::replaceClause($statements->statement, $statements->parser->list, 'ORDER BY '); |
| 400 | + self::assertEquals('SELECT * FROM `test.2024-11-01` ORDER BY ', $fromClause); |
| 401 | + } |
| 402 | + |
| 403 | + public function testGetAllTableWithDotsAndReplaceClauseEmptyName(): void |
| 404 | + { |
| 405 | + $query = 'SELECT * FROM `test.2024-11-01` ORDER BY `test.2024-11-01`.`id` ASC;'; |
| 406 | + |
| 407 | + $statements = Query::getAll($query); |
| 408 | + |
| 409 | + self::assertInstanceOf(Statement::class, $statements->statement); |
| 410 | + self::assertNotNull($statements->parser->list); |
| 411 | + |
| 412 | + // No clause name |
| 413 | + $result = Query::replaceClause($statements->statement, $statements->parser->list, ''); |
| 414 | + self::assertEquals(' SELECT * FROM `test.2024-11-01` ORDER BY `test.2024-11-01`.`id` ASC', $result); |
| 415 | + } |
| 416 | + |
382 | 417 | /** @param string[] $expected */ |
383 | 418 | #[DataProvider('getTablesProvider')] |
384 | 419 | public function testGetTables(string $query, array $expected): void |
@@ -626,6 +661,25 @@ public function testReplaceNonExistingPart(): void |
626 | 661 | ); |
627 | 662 | } |
628 | 663 |
|
| 664 | + public function testReplaceClauseTableWithDots(): void |
| 665 | + { |
| 666 | + $query = 'SELECT * FROM `test.2024-11-01` ORDER BY `test.2024-11-01`.`id` ASC;'; |
| 667 | + |
| 668 | + $parser = new Parser($query); |
| 669 | + |
| 670 | + self::assertNotNull($parser->list); |
| 671 | + |
| 672 | + $fromClause = Query::replaceClause($parser->statements[0], $parser->list, 'ORDER BY', ''); |
| 673 | + self::assertEquals('SELECT * FROM `test.2024-11-01` ', $fromClause); |
| 674 | + |
| 675 | + $fromClause = Query::replaceClause($parser->statements[0], $parser->list, 'ORDER BY'); |
| 676 | + self::assertEquals('SELECT * FROM `test.2024-11-01` ORDER BY ', $fromClause); |
| 677 | + |
| 678 | + // With spaces |
| 679 | + $fromClause = Query::replaceClause($parser->statements[0], $parser->list, 'ORDER BY ', ''); |
| 680 | + self::assertEquals('SELECT * FROM `test.2024-11-01` ', $fromClause); |
| 681 | + } |
| 682 | + |
629 | 683 | public function testReplaceClauses(): void |
630 | 684 | { |
631 | 685 | $parser = new Parser('SELECT *, (SELECT 1) FROM film LIMIT 0, 10;'); |
|
0 commit comments