summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDeven Bansod <devenbansod.bits@gmail.com>2018-12-21 11:43:44 +0530
committerDeven Bansod <devenbansod.bits@gmail.com>2018-12-21 11:43:44 +0530
commite135782aca6e54e9535e43aaa34259392d92dc89 (patch)
treeccab01cc3035682fee210e813e484e6eabba4211
parent5e8dbcf3ff0d1123efd731863083a9af539e5992 (diff)
downloadsql-parser-e135782aca6e54e9535e43aaa34259392d92dc89.zip
sql-parser-e135782aca6e54e9535e43aaa34259392d92dc89.tar.gz
sql-parser-e135782aca6e54e9535e43aaa34259392d92dc89.tar.bz2
Add support for end options in SET statement
* Support `[{ COLLATE expr | DEFAULT }] in `SET NAMES` statement Signed-off-by: Deven Bansod <devenbansod.bits@gmail.com>
-rw-r--r--src/Statement.php15
-rw-r--r--src/Statements/SetStatement.php22
-rw-r--r--tests/Builder/SetStatementTest.php34
-rw-r--r--tests/data/parser/parseSetNames2.in1
-rw-r--r--tests/data/parser/parseSetNames2.out1
-rw-r--r--tests/data/parser/parseSetNames3.in1
-rw-r--r--tests/data/parser/parseSetNames3.out1
-rw-r--r--tests/data/parser/parseSetNamesError2.in1
-rw-r--r--tests/data/parser/parseSetNamesError2.out1
-rw-r--r--tests/data/parser/parseSetNamesError3.in1
-rw-r--r--tests/data/parser/parseSetNamesError3.out1
11 files changed, 69 insertions, 10 deletions
diff --git a/src/Statement.php b/src/Statement.php
index 4186275..ec715c2 100644
--- a/src/Statement.php
+++ b/src/Statement.php
@@ -354,12 +354,23 @@ abstract class Statement
$parsedOptions = true;
}
} elseif ($class === null) {
- // Handle special end options in Select statement
- // See Statements\SelectStatement::$END_OPTIONS
if ($this instanceof Statements\SelectStatement
&& ($token->value === 'FOR UPDATE'
|| $token->value === 'LOCK IN SHARE MODE')
) {
+ // Handle special end options in Select statement
+ // See Statements\SelectStatement::$END_OPTIONS
+ $this->end_options = OptionsArray::parse(
+ $parser,
+ $list,
+ static::$END_OPTIONS
+ );
+ } elseif ($this instanceof Statements\SetStatement
+ && ($token->value === 'COLLATE'
+ || $token->value === 'DEFAULT')
+ ) {
+ // Handle special end options in SET statement
+ // See Statements\SetStatement::$END_OPTIONS
$this->end_options = OptionsArray::parse(
$parser,
$list,
diff --git a/src/Statements/SetStatement.php b/src/Statements/SetStatement.php
index 007134f..ef3a0c1 100644
--- a/src/Statements/SetStatement.php
+++ b/src/Statements/SetStatement.php
@@ -28,6 +28,7 @@ class SetStatement extends Statement
*/
public static $CLAUSES = array(
'SET' => array('SET', 3),
+ '_END_OPTIONS' => array('_END_OPTIONS', 1),
);
/**
@@ -42,6 +43,11 @@ class SetStatement extends Statement
'PASSWORD' => array(3, 'expr'),
);
+ public static $END_OPTIONS = array(
+ 'COLLATE' => array(1, 'var'),
+ 'DEFAULT' => 1
+ );
+
/**
* Options used in current statement.
*
@@ -50,6 +56,15 @@ class SetStatement extends Statement
public $options;
/**
+ * The end options of this query.
+ *
+ * @var OptionsArray
+ *
+ * @see static::$END_OPTIONS
+ */
+ public $end_options;
+
+ /**
* The updated values.
*
* @var SetOperation[]
@@ -61,7 +76,10 @@ class SetStatement extends Statement
*/
public function build()
{
- return 'SET ' . OptionsArray::build($this->options)
- . ' ' . SetOperation::build($this->set);
+ $ret = 'SET ' . OptionsArray::build($this->options)
+ . ' ' . SetOperation::build($this->set)
+ . ' ' . OptionsArray::build($this->end_options);
+
+ return trim($ret);
}
}
diff --git a/tests/Builder/SetStatementTest.php b/tests/Builder/SetStatementTest.php
index f6f669a..746e92f 100644
--- a/tests/Builder/SetStatementTest.php
+++ b/tests/Builder/SetStatementTest.php
@@ -10,35 +10,57 @@ class SetStatementTest extends TestCase
public function testBuilderView()
{
/* Assertion 1 */
- $query = 'SET CHARACTER SET \'utf8\';';
+ $query = 'SET CHARACTER SET \'utf8\'';
$parser = new Parser($query);
$stmt = $parser->statements[0];
$this->assertEquals(
- 'SET CHARACTER SET \'utf8\' ',
+ $query,
$stmt->build()
);
/* Assertion 2 */
- $query = 'SET CHARSET \'utf8\';';
+ $query = 'SET CHARSET \'utf8\'';
$parser = new Parser($query);
$stmt = $parser->statements[0];
$this->assertEquals(
- 'SET CHARSET \'utf8\' ',
+ $query,
$stmt->build()
);
/* Assertion 3 */
- $query = 'SET NAMES \'utf8\';';
+ $query = 'SET NAMES \'utf8\'';
$parser = new Parser($query);
$stmt = $parser->statements[0];
$this->assertEquals(
- 'SET NAMES \'utf8\' ',
+ $query,
+ $stmt->build()
+ );
+
+ /* Assertion 4 */
+ $query = 'SET NAMES \'utf8\' COLLATE \'utf8_general_ci\'';
+
+ $parser = new Parser($query);
+ $stmt = $parser->statements[0];
+
+ $this->assertEquals(
+ 'SET NAMES \'utf8\' COLLATE \'utf8_general_ci\'',
+ $stmt->build()
+ );
+
+ /* Assertion 5 */
+ $query = 'SET NAMES \'utf8\' DEFAULT';
+
+ $parser = new Parser($query);
+ $stmt = $parser->statements[0];
+
+ $this->assertEquals(
+ 'SET NAMES \'utf8\' DEFAULT',
$stmt->build()
);
}
diff --git a/tests/data/parser/parseSetNames2.in b/tests/data/parser/parseSetNames2.in
new file mode 100644
index 0000000..e39b644
--- /dev/null
+++ b/tests/data/parser/parseSetNames2.in
@@ -0,0 +1 @@
+SET NAMES 'utf8' COLLATE 'utf8_general_ci' \ No newline at end of file
diff --git a/tests/data/parser/parseSetNames2.out b/tests/data/parser/parseSetNames2.out
new file mode 100644
index 0000000..aaa2505
--- /dev/null
+++ b/tests/data/parser/parseSetNames2.out
@@ -0,0 +1 @@
+a:4:{s:5:"query";s:42:"SET NAMES 'utf8' COLLATE 'utf8_general_ci'";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:42:"SET NAMES 'utf8' COLLATE 'utf8_general_ci'";s:3:"len";i:42;s:4:"last";i:42;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:10:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"SET";s:5:"value";s:3:"SET";s:7:"keyword";s:3:"SET";s:4:"type";i:1;s:5:"flags";i:11;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:3;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:5:"NAMES";s:5:"value";s:5:"NAMES";s:7:"keyword";s:5:"NAMES";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:4;}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:3;s:5:"flags";i:0;s:8:"position";i:9;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"'utf8'";s:5:"value";s:4:"utf8";s:7:"keyword";N;s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:10;}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:16;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"COLLATE";s:5:"value";s:7:"COLLATE";s:7:"keyword";s:7:"COLLATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:17;}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:24;}i:8;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:17:"'utf8_general_ci'";s:5:"value";s:15:"utf8_general_ci";s:7:"keyword";N;s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:25;}i:9;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:10;s:3:"idx";i:10;}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:44:"PhpMyAdmin\SqlParser\Statements\SetStatement":5:{s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:1:{i:3;a:4:{s:4:"name";s:5:"NAMES";s:6:"equals";b:0;s:4:"expr";s:6:"'utf8'";s:5:"value";s:4:"utf8";}}}s:11:"end_options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:1:{i:1;a:4:{s:4:"name";s:7:"COLLATE";s:6:"equals";b:0;s:4:"expr";s:17:"'utf8_general_ci'";s:5:"value";s:15:"utf8_general_ci";}}}s:3:"set";a:0:{}s:5:"first";i:0;s:4:"last";i:8;}}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
diff --git a/tests/data/parser/parseSetNames3.in b/tests/data/parser/parseSetNames3.in
new file mode 100644
index 0000000..691dd08
--- /dev/null
+++ b/tests/data/parser/parseSetNames3.in
@@ -0,0 +1 @@
+SET NAMES 'utf8' DEFAULT; \ No newline at end of file
diff --git a/tests/data/parser/parseSetNames3.out b/tests/data/parser/parseSetNames3.out
new file mode 100644
index 0000000..60e5c90
--- /dev/null
+++ b/tests/data/parser/parseSetNames3.out
@@ -0,0 +1 @@
+a:4:{s:5:"query";s:25:"SET NAMES 'utf8' DEFAULT;";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:25:"SET NAMES 'utf8' DEFAULT;";s:3:"len";i:25;s:4:"last";i:25;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:9:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"SET";s:5:"value";s:3:"SET";s:7:"keyword";s:3:"SET";s:4:"type";i:1;s:5:"flags";i:11;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:3;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:5:"NAMES";s:5:"value";s:5:"NAMES";s:7:"keyword";s:5:"NAMES";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:4;}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:3;s:5:"flags";i:0;s:8:"position";i:9;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"'utf8'";s:5:"value";s:4:"utf8";s:7:"keyword";N;s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:10;}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:16;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"DEFAULT";s:5:"value";s:7:"DEFAULT";s:7:"keyword";s:7:"DEFAULT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:17;}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:9;s:5:"flags";i:0;s:8:"position";i:24;}i:8;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:9;s:3:"idx";i:9;}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:44:"PhpMyAdmin\SqlParser\Statements\SetStatement":5:{s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:1:{i:3;a:4:{s:4:"name";s:5:"NAMES";s:6:"equals";b:0;s:4:"expr";s:6:"'utf8'";s:5:"value";s:4:"utf8";}}}s:11:"end_options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:1:{i:1;s:7:"DEFAULT";}}s:3:"set";a:0:{}s:5:"first";i:0;s:4:"last";i:6;}}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
diff --git a/tests/data/parser/parseSetNamesError2.in b/tests/data/parser/parseSetNamesError2.in
new file mode 100644
index 0000000..069c1a7
--- /dev/null
+++ b/tests/data/parser/parseSetNamesError2.in
@@ -0,0 +1 @@
+SET NAMES 'utf8' DEFAULT 'utf8_general_ci' \ No newline at end of file
diff --git a/tests/data/parser/parseSetNamesError2.out b/tests/data/parser/parseSetNamesError2.out
new file mode 100644
index 0000000..c4d6c74
--- /dev/null
+++ b/tests/data/parser/parseSetNamesError2.out
@@ -0,0 +1 @@
+a:4:{s:5:"query";s:42:"SET NAMES 'utf8' DEFAULT 'utf8_general_ci'";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:42:"SET NAMES 'utf8' DEFAULT 'utf8_general_ci'";s:3:"len";i:42;s:4:"last";i:42;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:10:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"SET";s:5:"value";s:3:"SET";s:7:"keyword";s:3:"SET";s:4:"type";i:1;s:5:"flags";i:11;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:3;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:5:"NAMES";s:5:"value";s:5:"NAMES";s:7:"keyword";s:5:"NAMES";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:4;}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:3;s:5:"flags";i:0;s:8:"position";i:9;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"'utf8'";s:5:"value";s:4:"utf8";s:7:"keyword";N;s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:10;}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:16;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"DEFAULT";s:5:"value";s:7:"DEFAULT";s:7:"keyword";s:7:"DEFAULT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:17;}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:24;}i:8;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:17:"'utf8_general_ci'";s:5:"value";s:15:"utf8_general_ci";s:7:"keyword";N;s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:25;}i:9;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:10;s:3:"idx";i:10;}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:44:"PhpMyAdmin\SqlParser\Statements\SetStatement":5:{s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:1:{i:3;a:4:{s:4:"name";s:5:"NAMES";s:6:"equals";b:0;s:4:"expr";s:6:"'utf8'";s:5:"value";s:4:"utf8";}}}s:11:"end_options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:1:{i:1;s:7:"DEFAULT";}}s:3:"set";a:0:{}s:5:"first";i:0;s:4:"last";i:8;}}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:1:{i:0;a:3:{i:0;s:17:"Unexpected token.";i:1;r:65;i:2;i:0;}}}} \ No newline at end of file
diff --git a/tests/data/parser/parseSetNamesError3.in b/tests/data/parser/parseSetNamesError3.in
new file mode 100644
index 0000000..1721acb
--- /dev/null
+++ b/tests/data/parser/parseSetNamesError3.in
@@ -0,0 +1 @@
+SET NAMES 'utf8' COLLATE \ No newline at end of file
diff --git a/tests/data/parser/parseSetNamesError3.out b/tests/data/parser/parseSetNamesError3.out
new file mode 100644
index 0000000..a33d198
--- /dev/null
+++ b/tests/data/parser/parseSetNamesError3.out
@@ -0,0 +1 @@
+a:4:{s:5:"query";s:24:"SET NAMES 'utf8' COLLATE";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:24:"SET NAMES 'utf8' COLLATE";s:3:"len";i:24;s:4:"last";i:24;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:8:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"SET";s:5:"value";s:3:"SET";s:7:"keyword";s:3:"SET";s:4:"type";i:1;s:5:"flags";i:11;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:3;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:5:"NAMES";s:5:"value";s:5:"NAMES";s:7:"keyword";s:5:"NAMES";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:4;}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:3;s:5:"flags";i:0;s:8:"position";i:9;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"'utf8'";s:5:"value";s:4:"utf8";s:7:"keyword";N;s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:10;}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:16;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"COLLATE";s:5:"value";s:7:"COLLATE";s:7:"keyword";s:7:"COLLATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:17;}i:7;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:8;s:3:"idx";i:8;}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:44:"PhpMyAdmin\SqlParser\Statements\SetStatement":5:{s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:1:{i:3;a:4:{s:4:"name";s:5:"NAMES";s:6:"equals";b:0;s:4:"expr";s:6:"'utf8'";s:5:"value";s:4:"utf8";}}}s:11:"end_options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:1:{i:1;a:4:{s:4:"name";s:7:"COLLATE";s:6:"equals";b:0;s:4:"expr";s:0:"";s:5:"value";s:0:"";}}}s:3:"set";a:0:{}s:5:"first";i:0;s:4:"last";i:6;}}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:1:{i:0;a:3:{i:0;s:53:"Value/Expression for the option COLLATE was expected.";i:1;r:51;i:2;i:0;}}}} \ No newline at end of file