From 92efecc7f66f6bde348020743f559472cda72083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Mon, 21 Apr 2025 22:37:38 -0300 Subject: [PATCH] Add SQL parse error message when simulating DML MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes https://github.com/phpmyadmin/phpmyadmin/issues/18903 Signed-off-by: MaurĂ­cio Meneghini Fauth --- .../Import/SimulateDmlController.php | 6 +++++ .../Import/SimulateDmlControllerTest.php | 23 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/libraries/classes/Controllers/Import/SimulateDmlController.php b/libraries/classes/Controllers/Import/SimulateDmlController.php index cf3637c1d6..79aec51ab2 100644 --- a/libraries/classes/Controllers/Import/SimulateDmlController.php +++ b/libraries/classes/Controllers/Import/SimulateDmlController.php @@ -81,6 +81,12 @@ final class SimulateDmlController extends AbstractController 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 diff --git a/test/classes/Controllers/Import/SimulateDmlControllerTest.php b/test/classes/Controllers/Import/SimulateDmlControllerTest.php index cdeba0193c..024504c409 100644 --- a/test/classes/Controllers/Import/SimulateDmlControllerTest.php +++ b/test/classes/Controllers/Import/SimulateDmlControllerTest.php @@ -280,4 +280,27 @@ class SimulateDmlControllerTest extends AbstractTestCase ], ]; } + + public function testStatementWithParsingError(): void + { + $_POST['sql_delimiter'] = ';'; + $GLOBALS['sql_query'] = 'UPDATE actor SET'; + + $responseRenderer = new ResponseRenderer(); + $controller = new SimulateDmlController( + $responseRenderer, + new Template(), + new SimulateDml($this->createDatabaseInterface()) + ); + $controller(); + + $expectedMessage = <<<'HTML' + + +HTML; + + self::assertSame(['message' => $expectedMessage, 'sql_data' => false], $responseRenderer->getJSONResult()); + } }