Skip to content

Commit

Permalink
Merge branch 'QA'
Browse files Browse the repository at this point in the history
Signed-off-by: William Desportes <williamdes@wdes.fr>
  • Loading branch information
williamdes committed Aug 20, 2021
2 parents 2d1efde + 7d6a53b commit e689ea5
Show file tree
Hide file tree
Showing 44 changed files with 1,729 additions and 664 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Expand Up @@ -8,6 +8,8 @@
* Fixed parser errors on "ALTER TABLE" statements to add columns with SET type (#168)
* Fixed PHP 8.1 fatal errors on classes that "implements ArrayAccess"
* Add new contexts for MariaDB 10.4, 10.5, 10.6 (#328)
* Fixed parser errors for "ALTER USER" with options (#342)
* Fixed handling of the procedures and functions's options where part of the body (#339)

## [5.4.2] - 2021-02-05

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

## [4.7.2] - 2021-02-05

Expand Down
54 changes: 42 additions & 12 deletions src/Statements/CreateStatement.php
Expand Up @@ -219,21 +219,50 @@ class CreateStatement extends Statement
* @var array
*/
public static $FUNC_OPTIONS = [
'COMMENT' => [
1,
'NOT' => [
2,
'var',
],
'FUNCTION' => [
3,
'var=',
],
'LANGUAGE SQL' => 2,
'DETERMINISTIC' => 3,
'NOT DETERMINISTIC' => 3,
'CONTAINS SQL' => 4,
'NO SQL' => 4,
'READS SQL DATA' => 4,
'MODIFIES SQL DATA' => 4,
'SQL SECURITY DEFINER' => [
5,
'PROCEDURE' => [
3,
'var=',
],
'CONTAINS' => [
4,
'expr',
],
'NO' => [
4,
'var',
],
'READS' => [
4,
'var',
],
'MODIFIES' => [
4,
'expr',
],
'SQL SECURITY' => [
6,
'var',
],
'LANGUAGE' => [
7,
'var',
],
'COMMENT' => [
8,
'var',
],

'CREATE' => 1,
'DETERMINISTIC' => 2,
'DATA' => 5,
];

/**
Expand Down Expand Up @@ -459,7 +488,8 @@ public function build()
. OptionsArray::build($this->options) . ' '
. Expression::build($this->name) . ' '
. ParameterDefinition::build($this->parameters) . ' '
. $tmp . ' ' . TokensList::build($this->body);
. $tmp . ' ' . OptionsArray::build($this->entityOptions) . ' '
. TokensList::build($this->body);
}

return 'CREATE '
Expand Down
29 changes: 13 additions & 16 deletions tests/Builder/CreateStatementTest.php
Expand Up @@ -408,9 +408,8 @@ public function testBuilderCreateProcedure(): void
$stmt->build()
);

$this->assertTrue($stmt->entityOptions->isEmpty());
$this->assertFalse($stmt->entityOptions->isEmpty());
$this->assertFalse($stmt->options->isEmpty());

$this->assertSame(
'DEFINER=`root`@`%` PROCEDURE',
$stmt->options->__toString()
Expand All @@ -427,12 +426,12 @@ public function testBuilderCreateProcedure(): void
);

$this->assertSame(
'',
'NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER',
$stmt->entityOptions->__toString()
);

$this->assertSame(
'NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER SELECT _var',
'SELECT _var',
TokensList::build($stmt->body)
);
}
Expand All @@ -442,9 +441,9 @@ public function testBuilderCreateFunction(): void
$parser = new Parser(
'CREATE DEFINER=`root`@`localhost`'
. ' FUNCTION `inventory_in_stock`(`p_inventory_id` INT) RETURNS tinyint(1)'
. ' READS SQL DATA' . "\n"
. ' COMMENT \'My best function written by a friend\'\'s friend' . "\n"
. 'BEGIN' . "\n"
. ' READS SQL DATA'
. ' COMMENT \'My best function written by a friend\'\'s friend\''
. ' BEGIN' . "\n"
. ' DECLARE v_rentals INT;' . "\n"
. ' DECLARE v_out INT;' . "\n"
. "\n"
Expand Down Expand Up @@ -478,9 +477,9 @@ public function testBuilderCreateFunction(): void
$this->assertSame(
'CREATE DEFINER=`root`@`localhost`'
. ' FUNCTION `inventory_in_stock` (`p_inventory_id` INT) RETURNS TINYINT(1)'
. ' READS SQL DATA' . "\n"
. ' COMMENT \'My best function written by a friend\'\'s friend' . "\n"
. 'BEGIN' . "\n"
. ' READS SQL DATA'
. ' COMMENT \'My best function written by a friend\'\'s friend\''
. ' BEGIN' . "\n"
. ' DECLARE v_rentals INT;' . "\n"
. ' DECLARE v_out INT;' . "\n"
. "\n"
Expand Down Expand Up @@ -509,7 +508,7 @@ public function testBuilderCreateFunction(): void
$stmt->build()
);

$this->assertTrue($stmt->entityOptions->isEmpty());
$this->assertFalse($stmt->entityOptions->isEmpty());
$this->assertFalse($stmt->options->isEmpty());

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

$this->assertSame(
'',
'READS SQL DATA COMMENT \'My best function written by a friend\'\'s friend\'',
$stmt->entityOptions->__toString()
);

$this->assertSame(
'READS SQL DATA' . "\n"
. ' COMMENT \'My best function written by a friend\'\'s friend' . "\n"
. 'BEGIN' . "\n"
'BEGIN' . "\n"
. ' DECLARE v_rentals INT;' . "\n"
. ' DECLARE v_out INT;' . "\n"
. "\n"
Expand Down Expand Up @@ -596,7 +593,7 @@ public function testBuilderRoutine(): void

$this->assertEquals(
'CREATE FUNCTION test (IN `i` INT) RETURNS VARCHAR ' .
'BEGIN ' .
' BEGIN ' .
'DECLARE name VARCHAR DEFAULT ""; ' .
'SELECT name INTO name FROM employees WHERE id = i; ' .
'RETURN name; ' .
Expand Down
52 changes: 40 additions & 12 deletions tests/data/parser/parseCreateDatabase.out
Expand Up @@ -613,21 +613,49 @@
]
},
"FUNC_OPTIONS": {
"COMMENT": [
1,
"NOT": [
2,
"var"
],
"FUNCTION": [
3,
"var="
],
"LANGUAGE SQL": 2,
"DETERMINISTIC": 3,
"NOT DETERMINISTIC": 3,
"CONTAINS SQL": 4,
"NO SQL": 4,
"READS SQL DATA": 4,
"MODIFIES SQL DATA": 4,
"SQL SECURITY DEFINER": [
5,
"PROCEDURE": [
3,
"var="
],
"CONTAINS": [
4,
"expr"
],
"NO": [
4,
"var"
]
],
"READS": [
4,
"var"
],
"MODIFIES": [
4,
"expr"
],
"SQL SECURITY": [
6,
"var"
],
"LANGUAGE": [
7,
"var"
],
"COMMENT": [
8,
"var"
],
"CREATE": 1,
"DETERMINISTIC": 2,
"DATA": 5
},
"TRIGGER_OPTIONS": {
"BEFORE": 1,
Expand Down
52 changes: 40 additions & 12 deletions tests/data/parser/parseCreateDatabaseErr.out
Expand Up @@ -640,21 +640,49 @@
]
},
"FUNC_OPTIONS": {
"COMMENT": [
1,
"NOT": [
2,
"var"
],
"FUNCTION": [
3,
"var="
],
"LANGUAGE SQL": 2,
"DETERMINISTIC": 3,
"NOT DETERMINISTIC": 3,
"CONTAINS SQL": 4,
"NO SQL": 4,
"READS SQL DATA": 4,
"MODIFIES SQL DATA": 4,
"SQL SECURITY DEFINER": [
5,
"PROCEDURE": [
3,
"var="
],
"CONTAINS": [
4,
"expr"
],
"NO": [
4,
"var"
]
],
"READS": [
4,
"var"
],
"MODIFIES": [
4,
"expr"
],
"SQL SECURITY": [
6,
"var"
],
"LANGUAGE": [
7,
"var"
],
"COMMENT": [
8,
"var"
],
"CREATE": 1,
"DETERMINISTIC": 2,
"DATA": 5
},
"TRIGGER_OPTIONS": {
"BEFORE": 1,
Expand Down
52 changes: 40 additions & 12 deletions tests/data/parser/parseCreateFunction.out
Expand Up @@ -1000,21 +1000,49 @@
]
},
"FUNC_OPTIONS": {
"COMMENT": [
1,
"NOT": [
2,
"var"
],
"FUNCTION": [
3,
"var="
],
"LANGUAGE SQL": 2,
"DETERMINISTIC": 3,
"NOT DETERMINISTIC": 3,
"CONTAINS SQL": 4,
"NO SQL": 4,
"READS SQL DATA": 4,
"MODIFIES SQL DATA": 4,
"SQL SECURITY DEFINER": [
5,
"PROCEDURE": [
3,
"var="
],
"CONTAINS": [
4,
"expr"
],
"NO": [
4,
"var"
]
],
"READS": [
4,
"var"
],
"MODIFIES": [
4,
"expr"
],
"SQL SECURITY": [
6,
"var"
],
"LANGUAGE": [
7,
"var"
],
"COMMENT": [
8,
"var"
],
"CREATE": 1,
"DETERMINISTIC": 2,
"DATA": 5
},
"TRIGGER_OPTIONS": {
"BEFORE": 1,
Expand Down

0 comments on commit e689ea5

Please sign in to comment.