From 58f852ad8b57cc1977b45553e06d92a655af3a78 Mon Sep 17 00:00:00 2001 From: "Fawzi E. Abdulfattah" Date: Fri, 20 Aug 2021 21:29:21 +0200 Subject: [PATCH] Fixing the issue of not handling the procedures options correctly Signed-off-by: Fawzi E. Abdulfattah --- src/Statements/CreateStatement.php | 56 ++++++++++++++++----- tests/Builder/CreateStatementTest.php | 29 +++++------ tests/Parser/AlterStatementTest.php | 1 + tests/data/parser/parseCreateProcedure1.in | 2 +- tests/data/parser/parseCreateProcedure1.out | 2 +- 5 files changed, 59 insertions(+), 31 deletions(-) diff --git a/src/Statements/CreateStatement.php b/src/Statements/CreateStatement.php index 129b441c0..0b176fccf 100644 --- a/src/Statements/CreateStatement.php +++ b/src/Statements/CreateStatement.php @@ -219,21 +219,50 @@ class CreateStatement extends Statement * @var array */ public static $FUNC_OPTIONS = array( - 'COMMENT' => array( - 1, + 'NOT' => array( + 2, + 'var', + ), + 'FUNCTION' => array( + 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' => array( - 5, + 'PROCEDURE' => array( + 3, + 'var=', + ), + 'CONTAINS' => array( + 4, + 'expr', + ), + 'NO' => array( + 4, 'var', - ) + ), + 'READS' => array( + 4, + 'var', + ), + 'MODIFIES' => array( + 4, + 'expr', + ), + 'SQL SECURITY' => array( + 6, + 'var', + ), + 'LANGUAGE' => array( + 7, + 'var', + ), + 'COMMENT' => array( + 8, + 'var', + ), + + 'CREATE' => 1, + 'DETERMINISTIC' => 2, + 'DATA' => 5, ); /** @@ -451,7 +480,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 ' diff --git a/tests/Builder/CreateStatementTest.php b/tests/Builder/CreateStatementTest.php index 10020922f..aac3429e7 100644 --- a/tests/Builder/CreateStatementTest.php +++ b/tests/Builder/CreateStatementTest.php @@ -412,9 +412,8 @@ public function testBuilderCreateProcedure() $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() @@ -431,12 +430,12 @@ public function testBuilderCreateProcedure() ); $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) ); } @@ -446,9 +445,9 @@ public function testBuilderCreateFunction() $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" @@ -482,9 +481,9 @@ public function testBuilderCreateFunction() $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" @@ -513,7 +512,7 @@ public function testBuilderCreateFunction() $stmt->build() ); - $this->assertTrue($stmt->entityOptions->isEmpty()); + $this->assertFalse($stmt->entityOptions->isEmpty()); $this->assertFalse($stmt->options->isEmpty()); $this->assertSame( @@ -532,14 +531,12 @@ public function testBuilderCreateFunction() ); $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" @@ -600,7 +597,7 @@ public function testBuilderRoutine() $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; ' . diff --git a/tests/Parser/AlterStatementTest.php b/tests/Parser/AlterStatementTest.php index 769d909e6..78df02379 100644 --- a/tests/Parser/AlterStatementTest.php +++ b/tests/Parser/AlterStatementTest.php @@ -52,6 +52,7 @@ public function alterProvider() array('parser/parseAlterUser5'), array('parser/parseAlterUser6'), array('parser/parseAlterUser7'), + array('parser/parseAlterUser8'), ); } } diff --git a/tests/data/parser/parseCreateProcedure1.in b/tests/data/parser/parseCreateProcedure1.in index da3e1c03e..17d674477 100644 --- a/tests/data/parser/parseCreateProcedure1.in +++ b/tests/data/parser/parseCreateProcedure1.in @@ -1 +1 @@ -CREATE DEFINER=`root`@`%` PROCEDURE `test2`(IN `_var` INT) NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER SELECT _var \ No newline at end of file +CREATE DEFINER=`root`@`%` PROCEDURE `test2`(IN `_var` INT) NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER SELECT _var \ No newline at end of file diff --git a/tests/data/parser/parseCreateProcedure1.out b/tests/data/parser/parseCreateProcedure1.out index 4dd441a5d..27807de75 100644 --- a/tests/data/parser/parseCreateProcedure1.out +++ b/tests/data/parser/parseCreateProcedure1.out @@ -1 +1 @@ -a:4:{s:5:"query";s:144:"CREATE DEFINER=`root`@`%` PROCEDURE `test2`(IN `_var` INT) NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER SELECT _var";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:144:"CREATE DEFINER=`root`@`%` PROCEDURE `test2`(IN `_var` INT) NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER SELECT _var";s:3:"len";i:144;s:4:"last";i:144;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:41:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:7:"keyword";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"DEFINER";s:5:"value";s:7:"DEFINER";s:7:"keyword";s:7:"DEFINER";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:7;}i:3;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:7:"keyword";N;s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:14;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:10:"`root`@`%`";s:5:"value";s:6:"root@%";s:7:"keyword";N;s:4:"type";i:8;s:5:"flags";i:4;s:8:"position";i:15;}i:5;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:25;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:9:"PROCEDURE";s:5:"value";s:9:"PROCEDURE";s:7:"keyword";s:9:"PROCEDURE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:26;}i:7;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:35;}i:8;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"`test2`";s:5:"value";s:5:"test2";s:7:"keyword";N;s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:36;}i:9;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:7:"keyword";N;s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:43;}i:10;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:2:"IN";s:5:"value";s:2:"IN";s:7:"keyword";s:2:"IN";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:44;}i:11;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:46;}i:12;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"`_var`";s:5:"value";s:4:"_var";s:7:"keyword";N;s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:47;}i:13;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:53;}i:14;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"INT";s:5:"value";s:3:"INT";s:7:"keyword";s:3:"INT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:54;}i:15;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:7:"keyword";N;s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:57;}i:16;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:58;}i:17;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"NOT";s:5:"value";s:3:"NOT";s:7:"keyword";s:3:"NOT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:59;}i:18;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:62;}i:19;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:13:"DETERMINISTIC";s:5:"value";s:13:"DETERMINISTIC";s:7:"keyword";s:13:"DETERMINISTIC";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:63;}i:20;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:76;}i:21;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:2:"NO";s:5:"value";s:2:"NO";s:7:"keyword";s:2:"NO";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:77;}i:22;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:79;}i:23;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"SQL";s:5:"value";s:3:"SQL";s:7:"keyword";s:3:"SQL";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:80;}i:24;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:83;}i:25;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:12:"SQL SECURITY";s:5:"value";s:12:"SQL SECURITY";s:7:"keyword";s:12:"SQL SECURITY";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:84;}i:26;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:96;}i:27;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"INVOKER";s:5:"value";s:7:"INVOKER";s:7:"keyword";s:7:"INVOKER";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:97;}i:28;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:104;}i:29;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:2:"NO";s:5:"value";s:2:"NO";s:7:"keyword";s:2:"NO";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:105;}i:30;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:107;}i:31;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"SQL";s:5:"value";s:3:"SQL";s:7:"keyword";s:3:"SQL";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:108;}i:32;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:111;}i:33;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:12:"SQL SECURITY";s:5:"value";s:12:"SQL SECURITY";s:7:"keyword";s:12:"SQL SECURITY";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:112;}i:34;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:124;}i:35;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"INVOKER";s:5:"value";s:7:"INVOKER";s:7:"keyword";s:7:"INVOKER";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:125;}i:36;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:132;}i:37;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:7:"keyword";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:133;}i:38;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:139;}i:39;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:4:"_var";s:5:"value";s:4:"_var";s:7:"keyword";N;s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:140;}i:40;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";N;s:5:"value";N;s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:41;s:3:"idx";i:42;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"parser";O:27:"PhpMyAdmin\SqlParser\Parser":5:{s:4:"list";r:7;s:10:"statements";a:1:{i:0;O:47:"PhpMyAdmin\SqlParser\Statements\CreateStatement":17:{s:4:"name";O:42:"PhpMyAdmin\SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";s:5:"test2";s:6:"column";N;s:4:"expr";s:7:"`test2`";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:0:{}}s:6:"fields";N;s:6:"select";N;s:4:"like";N;s:11:"partitionBy";N;s:13:"partitionsNum";N;s:14:"subpartitionBy";N;s:16:"subpartitionsNum";N;s:10:"partitions";N;s:5:"table";N;s:6:"return";N;s:10:"parameters";a:1:{i:0;O:51:"PhpMyAdmin\SqlParser\Components\ParameterDefinition":3:{s:4:"name";s:4:"_var";s:5:"inOut";s:2:"IN";s:4:"type";O:40:"PhpMyAdmin\SqlParser\Components\DataType":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:0:{}s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:0:{}}}}}s:4:"body";a:24:{i:0;r:128;i:1;r:135;i:2;r:142;i:3;r:149;i:4;r:156;i:5;r:163;i:6;r:170;i:7;r:177;i:8;r:184;i:9;r:191;i:10;r:198;i:11;r:205;i:12;r:212;i:13;r:219;i:14;r:226;i:15;r:233;i:16;r:240;i:17;r:247;i:18;r:254;i:19;r:261;i:20;r:268;i:21;r:275;i:22;r:282;i:23;r:289;}s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:2:{i:4;a:4:{s:4:"name";s:7:"DEFINER";s:6:"equals";b:1;s:4:"expr";O:42:"PhpMyAdmin\SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:6:"root@%";s:4:"expr";s:10:"`root`@`%`";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:5:"value";s:10:"`root`@`%`";}i:6;s:9:"PROCEDURE";}}s:5:"first";i:0;s:4:"last";i:41;}}s:8:"brackets";i:0;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:0:{}}} \ No newline at end of file +a:4:{s:5:"query";s:116:"CREATE DEFINER=`root`@`%` PROCEDURE `test2`(IN `_var` INT) NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER SELECT _var";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:116:"CREATE DEFINER=`root`@`%` PROCEDURE `test2`(IN `_var` INT) NOT DETERMINISTIC NO SQL SQL SECURITY INVOKER SELECT _var";s:3:"len";i:116;s:4:"last";i:116;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:33:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:7:"keyword";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"DEFINER";s:5:"value";s:7:"DEFINER";s:7:"keyword";s:7:"DEFINER";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:7;}i:3;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:7:"keyword";N;s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:14;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:10:"`root`@`%`";s:5:"value";s:6:"root@%";s:7:"keyword";N;s:4:"type";i:8;s:5:"flags";i:4;s:8:"position";i:15;}i:5;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:25;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:9:"PROCEDURE";s:5:"value";s:9:"PROCEDURE";s:7:"keyword";s:9:"PROCEDURE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:26;}i:7;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:35;}i:8;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"`test2`";s:5:"value";s:5:"test2";s:7:"keyword";N;s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:36;}i:9;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:7:"keyword";N;s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:43;}i:10;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:2:"IN";s:5:"value";s:2:"IN";s:7:"keyword";s:2:"IN";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:44;}i:11;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:46;}i:12;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"`_var`";s:5:"value";s:4:"_var";s:7:"keyword";N;s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:47;}i:13;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:53;}i:14;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"INT";s:5:"value";s:3:"INT";s:7:"keyword";s:3:"INT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:54;}i:15;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:7:"keyword";N;s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:57;}i:16;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:58;}i:17;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"NOT";s:5:"value";s:3:"NOT";s:7:"keyword";s:3:"NOT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:59;}i:18;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:62;}i:19;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:13:"DETERMINISTIC";s:5:"value";s:13:"DETERMINISTIC";s:7:"keyword";s:13:"DETERMINISTIC";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:63;}i:20;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:76;}i:21;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:2:"NO";s:5:"value";s:2:"NO";s:7:"keyword";s:2:"NO";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:77;}i:22;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:79;}i:23;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"SQL";s:5:"value";s:3:"SQL";s:7:"keyword";s:3:"SQL";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:80;}i:24;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:83;}i:25;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:12:"SQL SECURITY";s:5:"value";s:12:"SQL SECURITY";s:7:"keyword";s:12:"SQL SECURITY";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:84;}i:26;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:96;}i:27;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"INVOKER";s:5:"value";s:7:"INVOKER";s:7:"keyword";s:7:"INVOKER";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:97;}i:28;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:104;}i:29;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:7:"keyword";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:105;}i:30;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:111;}i:31;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:4:"_var";s:5:"value";s:4:"_var";s:7:"keyword";N;s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:112;}i:32;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";N;s:5:"value";N;s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:33;s:3:"idx";i:34;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"parser";O:27:"PhpMyAdmin\SqlParser\Parser":5:{s:4:"list";r:7;s:10:"statements";a:1:{i:0;O:47:"PhpMyAdmin\SqlParser\Statements\CreateStatement":17:{s:4:"name";O:42:"PhpMyAdmin\SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";s:5:"test2";s:6:"column";N;s:4:"expr";s:7:"`test2`";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:3:{i:2;a:4:{s:4:"name";s:3:"NOT";s:6:"equals";b:0;s:4:"expr";s:13:"DETERMINISTIC";s:5:"value";s:13:"DETERMINISTIC";}i:4;a:4:{s:4:"name";s:2:"NO";s:6:"equals";b:0;s:4:"expr";s:3:"SQL";s:5:"value";s:3:"SQL";}i:6;a:4:{s:4:"name";s:12:"SQL SECURITY";s:6:"equals";b:0;s:4:"expr";s:7:"INVOKER";s:5:"value";s:7:"INVOKER";}}}s:6:"fields";N;s:6:"select";N;s:4:"like";N;s:11:"partitionBy";N;s:13:"partitionsNum";N;s:14:"subpartitionBy";N;s:16:"subpartitionsNum";N;s:10:"partitions";N;s:5:"table";N;s:6:"return";N;s:10:"parameters";a:1:{i:0;O:51:"PhpMyAdmin\SqlParser\Components\ParameterDefinition":3:{s:4:"name";s:4:"_var";s:5:"inOut";s:2:"IN";s:4:"type";O:40:"PhpMyAdmin\SqlParser\Components\DataType":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:0:{}s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:0:{}}}}}s:4:"body";a:4:{i:0;r:212;i:1;r:219;i:2;r:226;i:3;r:233;}s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:2:{i:4;a:4:{s:4:"name";s:7:"DEFINER";s:6:"equals";b:1;s:4:"expr";O:42:"PhpMyAdmin\SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:6:"root@%";s:4:"expr";s:10:"`root`@`%`";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:5:"value";s:10:"`root`@`%`";}i:6;s:9:"PROCEDURE";}}s:5:"first";i:0;s:4:"last";i:33;}}s:8:"brackets";i:0;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:0:{}}} \ No newline at end of file