1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Import;
use PhpMyAdmin\Core;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Import\SimulateDml;
use PhpMyAdmin\SqlParser\Parser;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\DbiDummy;
use PhpMyAdmin\Url;
/**
* @covers \PhpMyAdmin\Import\SimulateDml
*/
class SimulateDmlTest extends AbstractTestCase
{
/** @var DatabaseInterface */
protected $dbi;
/** @var DbiDummy */
protected $dummyDbi;
protected function setUp(): void
{
parent::setUp();
$this->dummyDbi = $this->createDbiDummy();
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
$GLOBALS['dbi'] = $this->dbi;
}
/**
* @dataProvider providerForTestGetMatchedRows
*/
public function testGetMatchedRows(string $sqlQuery, string $simulatedQuery): void
{
$GLOBALS['db'] = 'PMA';
$dummyDbi = $this->createDbiDummy();
$dummyDbi->addSelectDb('PMA');
$dbi = $this->createDatabaseInterface($dummyDbi);
$object = new SimulateDml($dbi);
$parser = new Parser($sqlQuery);
$simulatedData = $object->getMatchedRows($sqlQuery, $parser, $parser->statements[0]);
$matchedRowsUrl = Url::getFromRoute('/sql', [
'db' => 'PMA',
'sql_query' => $simulatedQuery,
'sql_signature' => Core::signSqlQuery($simulatedQuery),
]);
$this->dummyDbi->assertAllSelectsConsumed();
$this->assertEquals([
'sql_query' => Generator::formatSql($sqlQuery),
'matched_rows' => 2,
'matched_rows_url' => $matchedRowsUrl,
], $simulatedData);
}
/**
* @return string[][]
*/
public function providerForTestGetMatchedRows(): array
{
return [
'update statement' => [
'UPDATE `table_1` SET `id` = 20 WHERE `id` > 10',
'SELECT `id` FROM `table_1` WHERE `id` > 10 AND (`id` <> 20)',
],
'delete statement' => [
'DELETE FROM `table_1` WHERE `id` > 10',
'SELECT * FROM `table_1` WHERE `id` > 10',
],
];
}
}
|