Skip to content

Commit e689ea5

Browse files
committed
Merge branch 'QA'
Signed-off-by: William Desportes <williamdes@wdes.fr>
2 parents 2d1efde + 7d6a53b commit e689ea5

44 files changed

Lines changed: 1729 additions & 664 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
* Fixed parser errors on "ALTER TABLE" statements to add columns with SET type (#168)
99
* Fixed PHP 8.1 fatal errors on classes that "implements ArrayAccess"
1010
* Add new contexts for MariaDB 10.4, 10.5, 10.6 (#328)
11+
* Fixed parser errors for "ALTER USER" with options (#342)
12+
* Fixed handling of the procedures and functions's options where part of the body (#339)
1113

1214
## [5.4.2] - 2021-02-05
1315

@@ -78,6 +80,7 @@
7880
- Fixed the issue that ignored the body tokens when creating views with union (#343)
7981
- Fixed parser errors on "ALTER TABLE" statements to add columns with SET type (#168)
8082
- Fixed parser errors for "ALTER USER" with options (#342)
83+
- Fixed handling of the procedures and functions's options where part of the body (#339)
8184

8285
## [4.7.2] - 2021-02-05
8386

src/Statements/CreateStatement.php

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -219,21 +219,50 @@ class CreateStatement extends Statement
219219
* @var array
220220
*/
221221
public static $FUNC_OPTIONS = [
222-
'COMMENT' => [
223-
1,
222+
'NOT' => [
223+
2,
224+
'var',
225+
],
226+
'FUNCTION' => [
227+
3,
224228
'var=',
225229
],
226-
'LANGUAGE SQL' => 2,
227-
'DETERMINISTIC' => 3,
228-
'NOT DETERMINISTIC' => 3,
229-
'CONTAINS SQL' => 4,
230-
'NO SQL' => 4,
231-
'READS SQL DATA' => 4,
232-
'MODIFIES SQL DATA' => 4,
233-
'SQL SECURITY DEFINER' => [
234-
5,
230+
'PROCEDURE' => [
231+
3,
232+
'var=',
233+
],
234+
'CONTAINS' => [
235+
4,
236+
'expr',
237+
],
238+
'NO' => [
239+
4,
240+
'var',
241+
],
242+
'READS' => [
243+
4,
244+
'var',
245+
],
246+
'MODIFIES' => [
247+
4,
248+
'expr',
249+
],
250+
'SQL SECURITY' => [
251+
6,
235252
'var',
236253
],
254+
'LANGUAGE' => [
255+
7,
256+
'var',
257+
],
258+
'COMMENT' => [
259+
8,
260+
'var',
261+
],
262+
263+
'CREATE' => 1,
264+
'DETERMINISTIC' => 2,
265+
'DATA' => 5,
237266
];
238267

239268
/**
@@ -459,7 +488,8 @@ public function build()
459488
. OptionsArray::build($this->options) . ' '
460489
. Expression::build($this->name) . ' '
461490
. ParameterDefinition::build($this->parameters) . ' '
462-
. $tmp . ' ' . TokensList::build($this->body);
491+
. $tmp . ' ' . OptionsArray::build($this->entityOptions) . ' '
492+
. TokensList::build($this->body);
463493
}
464494

465495
return 'CREATE '

tests/Builder/CreateStatementTest.php

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -408,9 +408,8 @@ public function testBuilderCreateProcedure(): void
408408
$stmt->build()
409409
);
410410

411-
$this->assertTrue($stmt->entityOptions->isEmpty());
411+
$this->assertFalse($stmt->entityOptions->isEmpty());
412412
$this->assertFalse($stmt->options->isEmpty());
413-
414413
$this->assertSame(
415414
'DEFINER=`root`@`%` PROCEDURE',
416415
$stmt->options->__toString()
@@ -427,12 +426,12 @@ public function testBuilderCreateProcedure(): void
427426
);
428427

429428
$this->assertSame(
430-
'',
429+
'NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER',
431430
$stmt->entityOptions->__toString()
432431
);
433432

434433
$this->assertSame(
435-
'NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER SELECT _var',
434+
'SELECT _var',
436435
TokensList::build($stmt->body)
437436
);
438437
}
@@ -442,9 +441,9 @@ public function testBuilderCreateFunction(): void
442441
$parser = new Parser(
443442
'CREATE DEFINER=`root`@`localhost`'
444443
. ' FUNCTION `inventory_in_stock`(`p_inventory_id` INT) RETURNS tinyint(1)'
445-
. ' READS SQL DATA' . "\n"
446-
. ' COMMENT \'My best function written by a friend\'\'s friend' . "\n"
447-
. 'BEGIN' . "\n"
444+
. ' READS SQL DATA'
445+
. ' COMMENT \'My best function written by a friend\'\'s friend\''
446+
. ' BEGIN' . "\n"
448447
. ' DECLARE v_rentals INT;' . "\n"
449448
. ' DECLARE v_out INT;' . "\n"
450449
. "\n"
@@ -478,9 +477,9 @@ public function testBuilderCreateFunction(): void
478477
$this->assertSame(
479478
'CREATE DEFINER=`root`@`localhost`'
480479
. ' FUNCTION `inventory_in_stock` (`p_inventory_id` INT) RETURNS TINYINT(1)'
481-
. ' READS SQL DATA' . "\n"
482-
. ' COMMENT \'My best function written by a friend\'\'s friend' . "\n"
483-
. 'BEGIN' . "\n"
480+
. ' READS SQL DATA'
481+
. ' COMMENT \'My best function written by a friend\'\'s friend\''
482+
. ' BEGIN' . "\n"
484483
. ' DECLARE v_rentals INT;' . "\n"
485484
. ' DECLARE v_out INT;' . "\n"
486485
. "\n"
@@ -509,7 +508,7 @@ public function testBuilderCreateFunction(): void
509508
$stmt->build()
510509
);
511510

512-
$this->assertTrue($stmt->entityOptions->isEmpty());
511+
$this->assertFalse($stmt->entityOptions->isEmpty());
513512
$this->assertFalse($stmt->options->isEmpty());
514513

515514
$this->assertSame(
@@ -528,14 +527,12 @@ public function testBuilderCreateFunction(): void
528527
);
529528

530529
$this->assertSame(
531-
'',
530+
'READS SQL DATA COMMENT \'My best function written by a friend\'\'s friend\'',
532531
$stmt->entityOptions->__toString()
533532
);
534533

535534
$this->assertSame(
536-
'READS SQL DATA' . "\n"
537-
. ' COMMENT \'My best function written by a friend\'\'s friend' . "\n"
538-
. 'BEGIN' . "\n"
535+
'BEGIN' . "\n"
539536
. ' DECLARE v_rentals INT;' . "\n"
540537
. ' DECLARE v_out INT;' . "\n"
541538
. "\n"
@@ -596,7 +593,7 @@ public function testBuilderRoutine(): void
596593

597594
$this->assertEquals(
598595
'CREATE FUNCTION test (IN `i` INT) RETURNS VARCHAR ' .
599-
'BEGIN ' .
596+
' BEGIN ' .
600597
'DECLARE name VARCHAR DEFAULT ""; ' .
601598
'SELECT name INTO name FROM employees WHERE id = i; ' .
602599
'RETURN name; ' .

tests/data/parser/parseCreateDatabase.out

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -613,21 +613,49 @@
613613
]
614614
},
615615
"FUNC_OPTIONS": {
616-
"COMMENT": [
617-
1,
616+
"NOT": [
617+
2,
618+
"var"
619+
],
620+
"FUNCTION": [
621+
3,
618622
"var="
619623
],
620-
"LANGUAGE SQL": 2,
621-
"DETERMINISTIC": 3,
622-
"NOT DETERMINISTIC": 3,
623-
"CONTAINS SQL": 4,
624-
"NO SQL": 4,
625-
"READS SQL DATA": 4,
626-
"MODIFIES SQL DATA": 4,
627-
"SQL SECURITY DEFINER": [
628-
5,
624+
"PROCEDURE": [
625+
3,
626+
"var="
627+
],
628+
"CONTAINS": [
629+
4,
630+
"expr"
631+
],
632+
"NO": [
633+
4,
629634
"var"
630-
]
635+
],
636+
"READS": [
637+
4,
638+
"var"
639+
],
640+
"MODIFIES": [
641+
4,
642+
"expr"
643+
],
644+
"SQL SECURITY": [
645+
6,
646+
"var"
647+
],
648+
"LANGUAGE": [
649+
7,
650+
"var"
651+
],
652+
"COMMENT": [
653+
8,
654+
"var"
655+
],
656+
"CREATE": 1,
657+
"DETERMINISTIC": 2,
658+
"DATA": 5
631659
},
632660
"TRIGGER_OPTIONS": {
633661
"BEFORE": 1,

tests/data/parser/parseCreateDatabaseErr.out

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -640,21 +640,49 @@
640640
]
641641
},
642642
"FUNC_OPTIONS": {
643-
"COMMENT": [
644-
1,
643+
"NOT": [
644+
2,
645+
"var"
646+
],
647+
"FUNCTION": [
648+
3,
645649
"var="
646650
],
647-
"LANGUAGE SQL": 2,
648-
"DETERMINISTIC": 3,
649-
"NOT DETERMINISTIC": 3,
650-
"CONTAINS SQL": 4,
651-
"NO SQL": 4,
652-
"READS SQL DATA": 4,
653-
"MODIFIES SQL DATA": 4,
654-
"SQL SECURITY DEFINER": [
655-
5,
651+
"PROCEDURE": [
652+
3,
653+
"var="
654+
],
655+
"CONTAINS": [
656+
4,
657+
"expr"
658+
],
659+
"NO": [
660+
4,
656661
"var"
657-
]
662+
],
663+
"READS": [
664+
4,
665+
"var"
666+
],
667+
"MODIFIES": [
668+
4,
669+
"expr"
670+
],
671+
"SQL SECURITY": [
672+
6,
673+
"var"
674+
],
675+
"LANGUAGE": [
676+
7,
677+
"var"
678+
],
679+
"COMMENT": [
680+
8,
681+
"var"
682+
],
683+
"CREATE": 1,
684+
"DETERMINISTIC": 2,
685+
"DATA": 5
658686
},
659687
"TRIGGER_OPTIONS": {
660688
"BEFORE": 1,

tests/data/parser/parseCreateFunction.out

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,21 +1000,49 @@
10001000
]
10011001
},
10021002
"FUNC_OPTIONS": {
1003-
"COMMENT": [
1004-
1,
1003+
"NOT": [
1004+
2,
1005+
"var"
1006+
],
1007+
"FUNCTION": [
1008+
3,
10051009
"var="
10061010
],
1007-
"LANGUAGE SQL": 2,
1008-
"DETERMINISTIC": 3,
1009-
"NOT DETERMINISTIC": 3,
1010-
"CONTAINS SQL": 4,
1011-
"NO SQL": 4,
1012-
"READS SQL DATA": 4,
1013-
"MODIFIES SQL DATA": 4,
1014-
"SQL SECURITY DEFINER": [
1015-
5,
1011+
"PROCEDURE": [
1012+
3,
1013+
"var="
1014+
],
1015+
"CONTAINS": [
1016+
4,
1017+
"expr"
1018+
],
1019+
"NO": [
1020+
4,
10161021
"var"
1017-
]
1022+
],
1023+
"READS": [
1024+
4,
1025+
"var"
1026+
],
1027+
"MODIFIES": [
1028+
4,
1029+
"expr"
1030+
],
1031+
"SQL SECURITY": [
1032+
6,
1033+
"var"
1034+
],
1035+
"LANGUAGE": [
1036+
7,
1037+
"var"
1038+
],
1039+
"COMMENT": [
1040+
8,
1041+
"var"
1042+
],
1043+
"CREATE": 1,
1044+
"DETERMINISTIC": 2,
1045+
"DATA": 5
10181046
},
10191047
"TRIGGER_OPTIONS": {
10201048
"BEFORE": 1,

0 commit comments

Comments
 (0)