Add test for SimulateDml with condition WHERE 0

Signed-off-by: Maximilian Krög <maxi_kroeg@web.de>
This commit is contained in:
Maximilian Krög 2023-07-26 02:41:11 +02:00
parent 836c5bd7ea
commit bd066b3d8b
No known key found for this signature in database
GPG Key ID: 3C00897BB53AAB9C
2 changed files with 21 additions and 13 deletions

View File

@ -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<list<string>> $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<string, array{string, string, list<list<string>>}>
*/
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',
[],
],
];
}

View File

@ -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'],