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()); + } }