Merge branch 'QA_5_2'

Signed-off-by: Maurício Meneghini Fauth <mauricio@mfauth.net>
This commit is contained in:
Maurício Meneghini Fauth 2025-04-22 21:12:19 -03:00
commit 4be2d14e53
No known key found for this signature in database
GPG Key ID: 6A16FD38AFC89CC8
2 changed files with 35 additions and 0 deletions

View File

@ -75,6 +75,12 @@ final class SimulateDmlController implements InvocableController
private function process(Parser $parser): void
{
if ($parser->errors !== []) {
$this->error = $parser->errors[0]->getMessage();
return;
}
foreach ($parser->statements as $statement) {
if (
! $statement instanceof UpdateStatement && ! $statement instanceof DeleteStatement

View File

@ -8,6 +8,7 @@ use PhpMyAdmin\Controllers\Import\SimulateDmlController;
use PhpMyAdmin\Core;
use PhpMyAdmin\Current;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\Factory\ServerRequestFactory;
use PhpMyAdmin\Import\SimulateDml;
use PhpMyAdmin\SqlParser\Parser;
use PhpMyAdmin\SqlParser\Statements\DeleteStatement;
@ -19,6 +20,7 @@ use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use function count;
use function json_decode;
#[CoversClass(SimulateDmlController::class)]
final class SimulateDmlControllerTest extends AbstractTestCase
@ -276,4 +278,31 @@ final class SimulateDmlControllerTest extends AbstractTestCase
],
];
}
public function testStatementWithParsingError(): void
{
Current::$sqlQuery = 'UPDATE actor SET';
$request = ServerRequestFactory::create()->createServerRequest('POST', 'https://example.com/')
->withParsedBody(['sql_delimiter' => ';']);
$responseRenderer = new ResponseRenderer();
$responseRenderer->setAjax(true);
$controller = new SimulateDmlController($responseRenderer, new SimulateDml($this->createDatabaseInterface()));
$response = $controller($request);
$expectedMessage = <<<'HTML'
<div class="alert alert-danger" role="alert">
<img src="themes/dot.gif" title="" alt="" class="icon ic_s_error"> Missing assignment in SET operation.
</div>
HTML;
$body = (string) $response->getBody();
self::assertJson($body);
self::assertSame(
['message' => $expectedMessage, 'sql_data' => false, 'success' => true],
json_decode($body, true),
);
}
}