From bd066b3d8bdc9a85417bf2b9964ec40c0d7972f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Kr=C3=B6g?= Date: Wed, 26 Jul 2023 02:41:11 +0200 Subject: [PATCH] Add test for SimulateDml with condition `WHERE 0` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maximilian Krög --- test/classes/Import/SimulateDmlTest.php | 24 +++++++++++++++++++++--- test/classes/Stubs/DbiDummy.php | 10 ---------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/test/classes/Import/SimulateDmlTest.php b/test/classes/Import/SimulateDmlTest.php index ec76dd73d1..15678eed65 100644 --- a/test/classes/Import/SimulateDmlTest.php +++ b/test/classes/Import/SimulateDmlTest.php @@ -11,20 +11,25 @@ use PhpMyAdmin\SqlParser\Parser; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Url; +use function count; + /** * @covers \PhpMyAdmin\Import\SimulateDml */ class SimulateDmlTest extends AbstractTestCase { /** + * @psalm-param list> $result + * * @dataProvider providerForTestGetMatchedRows */ - public function testGetMatchedRows(string $sqlQuery, string $simulatedQuery): void + public function testGetMatchedRows(string $sqlQuery, string $simulatedQuery, array $result): void { $GLOBALS['db'] = 'PMA'; $object = new SimulateDml($this->dbi); $parser = new Parser($sqlQuery); $this->dummyDbi->addSelectDb('PMA'); + $this->dummyDbi->addResult($simulatedQuery, $result); $simulatedData = $object->getMatchedRows($sqlQuery, $parser, $parser->statements[0]); @@ -35,15 +40,16 @@ class SimulateDmlTest extends AbstractTestCase ]); $this->assertAllSelectsConsumed(); + $this->assertAllQueriesConsumed(); $this->assertEquals([ 'sql_query' => Generator::formatSql($sqlQuery), - 'matched_rows' => 2, + 'matched_rows' => count($result), 'matched_rows_url' => $matchedRowsUrl, ], $simulatedData); } /** - * @return string[][] + * @return array>}> */ public function providerForTestGetMatchedRows(): array { @@ -51,10 +57,22 @@ class SimulateDmlTest extends AbstractTestCase 'update statement' => [ 'UPDATE `table_1` SET `id` = 20 WHERE `id` > 10', 'SELECT `id` FROM `table_1` WHERE (`id` > 10) AND (NOT `id` <=> (20))', + [['11'], ['12']], ], 'delete statement' => [ 'DELETE FROM `table_1` WHERE `id` > 10', 'SELECT * FROM `table_1` WHERE `id` > 10', + [['row1'], ['row2']], + ], + 'update statement_false_condition' => [ + 'UPDATE `table_1` SET `id` = 20 WHERE 0', + 'SELECT `id` FROM `table_1` WHERE (0) AND (NOT `id` <=> (20))', + [], + ], + 'delete statement_false_condition' => [ + 'DELETE FROM `table_1` WHERE 0', + 'SELECT * FROM `table_1` WHERE 0', + [], ], ]; } diff --git a/test/classes/Stubs/DbiDummy.php b/test/classes/Stubs/DbiDummy.php index b64c954c93..83201d8b90 100644 --- a/test/classes/Stubs/DbiDummy.php +++ b/test/classes/Stubs/DbiDummy.php @@ -2228,16 +2228,6 @@ class DbiDummy implements DbiExtension 'columns' => ['Name', 'Engine'], 'result' => [['PMA_table', 'InnoDB']], ], - [ - 'query' => 'SELECT `id` FROM `table_1` WHERE (`id` > 10) AND (NOT `id` <=> (20))', - 'columns' => ['id'], - 'result' => [['11'], ['12']], - ], - [ - 'query' => 'SELECT * FROM `table_1` WHERE `id` > 10', - 'columns' => ['column'], - 'result' => [['row1'], ['row2']], - ], [ 'query' => 'SELECT * FROM `PMA`.`table_1` LIMIT 1', 'columns' => ['column'],