|
7 | 7 | use PhpMyAdmin\SqlParser\Components\Expression; |
8 | 8 | use PhpMyAdmin\SqlParser\Components\Key; |
9 | 9 | use PhpMyAdmin\SqlParser\Components\OptionsArray; |
| 10 | +use PhpMyAdmin\SqlParser\Components\ParameterDefinition; |
10 | 11 | use PhpMyAdmin\SqlParser\Parser; |
11 | 12 | use PhpMyAdmin\SqlParser\Statements\CreateStatement; |
12 | 13 | use PhpMyAdmin\SqlParser\Tests\TestCase; |
| 14 | +use PhpMyAdmin\SqlParser\TokensList; |
13 | 15 |
|
14 | 16 | class CreateStatementTest extends TestCase |
15 | 17 | { |
@@ -392,6 +394,53 @@ public function testBuilderViewComplex() |
392 | 394 | ); |
393 | 395 | } |
394 | 396 |
|
| 397 | + public function testBuilderCreateProcedure() |
| 398 | + { |
| 399 | + $parser = new Parser( |
| 400 | + 'CREATE DEFINER=`root`@`%`' |
| 401 | + . ' PROCEDURE `test2`(IN `_var` INT) NOT DETERMINISTIC NO SQL' |
| 402 | + . ' SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER SELECT _var' |
| 403 | + ); |
| 404 | + |
| 405 | + /** @var CreateStatement */ |
| 406 | + $stmt = $parser->statements[0]; |
| 407 | + |
| 408 | + $this->assertSame( |
| 409 | + 'CREATE DEFINER=`root`@`%`' |
| 410 | + . ' PROCEDURE `test2` (IN `_var` INT) NOT DETERMINISTIC NO SQL' |
| 411 | + . ' SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER SELECT _var', |
| 412 | + $stmt->build() |
| 413 | + ); |
| 414 | + |
| 415 | + $this->assertTrue($stmt->entityOptions->isEmpty()); |
| 416 | + $this->assertFalse($stmt->options->isEmpty()); |
| 417 | + |
| 418 | + $this->assertSame( |
| 419 | + 'DEFINER=`root`@`%` PROCEDURE', |
| 420 | + $stmt->options->__toString() |
| 421 | + ); |
| 422 | + |
| 423 | + $this->assertSame( |
| 424 | + '`test2`', |
| 425 | + $stmt->name->__toString() |
| 426 | + ); |
| 427 | + |
| 428 | + $this->assertSame( |
| 429 | + '(IN `_var` INT)', |
| 430 | + ParameterDefinition::build($stmt->parameters) |
| 431 | + ); |
| 432 | + |
| 433 | + $this->assertSame( |
| 434 | + '', |
| 435 | + $stmt->entityOptions->__toString() |
| 436 | + ); |
| 437 | + |
| 438 | + $this->assertSame( |
| 439 | + 'NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER SELECT _var', |
| 440 | + TokensList::build($stmt->body) |
| 441 | + ); |
| 442 | + } |
| 443 | + |
395 | 444 | public function testBuilderTrigger() |
396 | 445 | { |
397 | 446 | $stmt = new CreateStatement(); |
|
0 commit comments