summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Context.php46
-rw-r--r--src/Contexts/ContextMySql50000.php32
-rw-r--r--src/Contexts/ContextMySql50100.php32
-rw-r--r--src/Contexts/ContextMySql50500.php32
-rw-r--r--src/Contexts/ContextMySql50600.php32
-rw-r--r--src/Contexts/ContextMySql50700.php32
-rw-r--r--src/Fragments/AlterFragment.php201
-rw-r--r--src/Fragments/DataTypeFragment.php38
-rw-r--r--src/Fragments/FieldDefFragment.php61
-rw-r--r--src/Fragments/FieldFragment.php20
-rw-r--r--src/Fragments/KeyFragment.php25
-rw-r--r--src/Fragments/OptionsFragment.php18
-rw-r--r--src/Fragments/ReferencesKeyword.php29
-rw-r--r--src/Lexer.php18
-rw-r--r--src/Parser.php5
-rw-r--r--src/Statement.php4
-rw-r--r--src/Statements/AlterStatement.php143
-rw-r--r--src/Statements/CreateStatement.php92
-rw-r--r--src/Statements/DropStatement.php15
-rw-r--r--src/Statements/NotImplementedStatement.php37
-rw-r--r--src/Statements/SelectStatement.php2
-rw-r--r--src/TokensList.php39
-rw-r--r--src/Utils/Query.php2
-rw-r--r--src/Utils/Table.php10
-rw-r--r--tests/Builder/AlterStatementTest.php28
-rw-r--r--tests/Builder/CreateStatementTest.php60
-rw-r--r--tests/Builder/ExplainStatement.php24
-rw-r--r--tests/Builder/StatementTest.php5
-rw-r--r--tests/Fragments/ArrayFragmentTest.php17
-rw-r--r--tests/Fragments/FieldFragmentTest.php2
-rw-r--r--tests/Fragments/FragmentTest.php (renamed from tests/Parser/FragmentTest.php)0
-rw-r--r--tests/Fragments/LimitKeywordTest.php16
-rw-r--r--tests/Fragments/OptionsFragmentTest.php4
-rw-r--r--tests/Fragments/ReferencesKeyword.php25
-rw-r--r--tests/Lexer/ContextTest.php25
-rw-r--r--tests/Lexer/IsMethodsTest.php9
-rw-r--r--tests/Lexer/TokensListTest.php (renamed from tests/Lexer/TokensList.php)39
-rw-r--r--tests/Parser/AlterStatementTest.php24
-rw-r--r--tests/Parser/ArrayFragmentTest.php26
-rw-r--r--tests/Parser/CreateStatementTest.php12
-rw-r--r--tests/Parser/ExplainStatement.php24
-rw-r--r--tests/Parser/LimitKeywordTest.php25
-rw-r--r--tests/data/parseAlter.in3
-rw-r--r--tests/data/parseAlter.out3
-rw-r--r--tests/data/parseCreateFunction.out2
-rw-r--r--tests/data/parseCreateFunctionErr1.out2
-rw-r--r--tests/data/parseCreateFunctionErr2.out2
-rw-r--r--tests/data/parseCreateProcedure.out2
-rw-r--r--tests/data/parseCreateProcedure2.out2
-rw-r--r--tests/data/parseCreateTable.out8
-rw-r--r--tests/data/parseCreateTable2.out22
-rw-r--r--tests/data/parseCreateTableErr1.out4
-rw-r--r--tests/data/parseCreateUser.out2
-rw-r--r--tests/data/parseCreateView.in1
-rw-r--r--tests/data/parseCreateView.out1
-rw-r--r--tests/data/parseCreateView2.in2
-rw-r--r--tests/data/parseCreateView2.out2
-rw-r--r--tests/data/parseExplain.in1
-rw-r--r--tests/data/parseExplain.out1
-rw-r--r--tests/data/parseRestore.out2
-rw-r--r--tests/data/parseSelect.out2
-rw-r--r--tests/data/parseSelectErr1.out2
62 files changed, 1070 insertions, 326 deletions
diff --git a/src/Context.php b/src/Context.php
index 699d800..d42211f 100644
--- a/src/Context.php
+++ b/src/Context.php
@@ -110,6 +110,14 @@ abstract class Context
'(' => 16, ')' => 16, '.' => 16, ',' => 16,
);
+ /**
+ * The mode of the MySQL server that will be used in lexing, parsing and
+ * building the statements.
+ *
+ * @var int
+ */
+ public static $MODE = 0;
+
/*
* Server SQL Modes
* https://dev.mysql.com/doc/refman/5.0/en/sql-mode.html
@@ -413,6 +421,44 @@ abstract class Context
self::$loadedContext = $context;
self::$KEYWORDS = $context::$KEYWORDS;
}
+
+ /**
+ * Sets the SQL mode.
+ *
+ * @param string $mode The list of modes. If empty, the mode is reset.
+ */
+ public static function setMode($mode = '')
+ {
+ static::$MODE = 0;
+ if (empty($mode)) {
+ return;
+ }
+ $mode = explode(',', $mode);
+ foreach ($mode as $m) {
+ static::$MODE |= constant('static::' . $m);
+ }
+ }
+
+ /**
+ * Escapes the symbol by adding surrounding backticks.
+ *
+ * @param array|string $str The string to be escaped.
+ *
+ * @return string
+ */
+ public static function escape($str)
+ {
+ if (is_array($str)) {
+ foreach ($str as $key => $value) {
+ $str[$key] = static::escape($value);
+ }
+ return $str;
+ }
+ if (static::$MODE & Context::ANSI_QUOTES) {
+ return '"' . str_replace('"', '""', $str) . '"';
+ }
+ return '`' . str_replace('`', '``', $str) . '`';
+ }
}
// Initializng the default context.
diff --git a/src/Contexts/ContextMySql50000.php b/src/Contexts/ContextMySql50000.php
index 26afac1..dc2759a 100644
--- a/src/Contexts/ContextMySql50000.php
+++ b/src/Contexts/ContextMySql50000.php
@@ -143,14 +143,14 @@ class ContextMySql50000 extends Context
'MINUTE_MICROSECOND' => 3, 'NO_WRITE_TO_BINLOG' => 3, 'SECOND_MICROSECOND' => 3,
'SQL_CALC_FOUND_ROWS' => 3,
- 'NOT NULL' => 5, 'SET NULL' => 5,
- 'NO ACTION' => 5, 'ON DELETE' => 5, 'ON UPDATE' => 5,
- 'CHARACTER SET' => 5, 'IF NOT EXISTS' => 5,
- 'DATA DIRECTORY' => 5,
- 'DEFAULT COLLATE' => 5, 'INDEX DIRECTORY' => 5,
- 'DEFAULT CHARACTER SET' => 5,
-
- 'GROUP BY' => 7, 'ORDER BY' => 7,
+ 'GROUP BY' => 7, 'NOT NULL' => 7, 'ORDER BY' => 7, 'SET NULL' => 7,
+ 'IF EXISTS' => 7, 'NO ACTION' => 7, 'ON DELETE' => 7, 'ON UPDATE' => 7,
+ 'OR REPLACE' => 7,
+ 'SQL SECURITY' => 7,
+ 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
+ 'DATA DIRECTORY' => 7,
+ 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
+ 'DEFAULT CHARACTER SET' => 7,
'XML' => 9,
'ENUM' => 9, 'TEXT' => 9,
@@ -168,18 +168,18 @@ class ContextMySql50000 extends Context
'CHARACTER' => 11, 'MEDIUMINT' => 11, 'VARBINARY' => 11,
'MEDIUMBLOB' => 11, 'MEDIUMTEXT' => 11,
- 'BINARY VARYING' => 13,
+ 'BINARY VARYING' => 15,
'KEY' => 19,
'INDEX' => 19,
'UNIQUE' => 19,
- 'INDEX KEY' => 21,
- 'UNIQUE KEY' => 21,
- 'FOREIGN KEY' => 21, 'PRIMARY KEY' => 21, 'SPATIAL KEY' => 21,
- 'FULLTEXT KEY' => 21, 'UNIQUE INDEX' => 21,
- 'SPATIAL INDEX' => 21,
- 'FULLTEXT INDEX' => 21,
+ 'INDEX KEY' => 23,
+ 'UNIQUE KEY' => 23,
+ 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23,
+ 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23,
+ 'SPATIAL INDEX' => 23,
+ 'FULLTEXT INDEX' => 23,
'X' => 33, 'Y' => 33,
'LN' => 33, 'PI' => 33,
@@ -258,7 +258,7 @@ class ContextMySql50000 extends Context
'LOCALTIMESTAMP' => 35,
'CURRENT_TIMESTAMP' => 35,
- 'NOT IN' => 37,
+ 'NOT IN' => 39,
'DATE' => 41, 'TIME' => 41, 'YEAR' => 41,
'TIMESTAMP' => 41,
diff --git a/src/Contexts/ContextMySql50100.php b/src/Contexts/ContextMySql50100.php
index 23c619b..82db684 100644
--- a/src/Contexts/ContextMySql50100.php
+++ b/src/Contexts/ContextMySql50100.php
@@ -154,14 +154,14 @@ class ContextMySql50100 extends Context
'SQL_CALC_FOUND_ROWS' => 3,
'MASTER_SSL_VERIFY_SERVER_CERT' => 3,
- 'NOT NULL' => 5, 'SET NULL' => 5,
- 'NO ACTION' => 5, 'ON DELETE' => 5, 'ON UPDATE' => 5,
- 'CHARACTER SET' => 5, 'IF NOT EXISTS' => 5,
- 'DATA DIRECTORY' => 5,
- 'DEFAULT COLLATE' => 5, 'INDEX DIRECTORY' => 5,
- 'DEFAULT CHARACTER SET' => 5,
-
- 'GROUP BY' => 7, 'ORDER BY' => 7,
+ 'GROUP BY' => 7, 'NOT NULL' => 7, 'ORDER BY' => 7, 'SET NULL' => 7,
+ 'IF EXISTS' => 7, 'NO ACTION' => 7, 'ON DELETE' => 7, 'ON UPDATE' => 7,
+ 'OR REPLACE' => 7,
+ 'SQL SECURITY' => 7,
+ 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
+ 'DATA DIRECTORY' => 7,
+ 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
+ 'DEFAULT CHARACTER SET' => 7,
'XML' => 9,
'ENUM' => 9, 'TEXT' => 9,
@@ -179,18 +179,18 @@ class ContextMySql50100 extends Context
'CHARACTER' => 11, 'MEDIUMINT' => 11, 'VARBINARY' => 11,
'MEDIUMBLOB' => 11, 'MEDIUMTEXT' => 11,
- 'BINARY VARYING' => 13,
+ 'BINARY VARYING' => 15,
'KEY' => 19,
'INDEX' => 19,
'UNIQUE' => 19,
- 'INDEX KEY' => 21,
- 'UNIQUE KEY' => 21,
- 'FOREIGN KEY' => 21, 'PRIMARY KEY' => 21, 'SPATIAL KEY' => 21,
- 'FULLTEXT KEY' => 21, 'UNIQUE INDEX' => 21,
- 'SPATIAL INDEX' => 21,
- 'FULLTEXT INDEX' => 21,
+ 'INDEX KEY' => 23,
+ 'UNIQUE KEY' => 23,
+ 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23,
+ 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23,
+ 'SPATIAL INDEX' => 23,
+ 'FULLTEXT INDEX' => 23,
'X' => 33, 'Y' => 33,
'LN' => 33, 'PI' => 33,
@@ -280,7 +280,7 @@ class ContextMySql50100 extends Context
'LOCALTIMESTAMP' => 35,
'CURRENT_TIMESTAMP' => 35,
- 'NOT IN' => 37,
+ 'NOT IN' => 39,
'DATE' => 41, 'TIME' => 41, 'YEAR' => 41,
'TIMESTAMP' => 41,
diff --git a/src/Contexts/ContextMySql50500.php b/src/Contexts/ContextMySql50500.php
index 03105ab..e338232 100644
--- a/src/Contexts/ContextMySql50500.php
+++ b/src/Contexts/ContextMySql50500.php
@@ -159,14 +159,14 @@ class ContextMySql50500 extends Context
'SQL_CALC_FOUND_ROWS' => 3,
'MASTER_SSL_VERIFY_SERVER_CERT' => 3,
- 'NOT NULL' => 5, 'SET NULL' => 5,
- 'NO ACTION' => 5, 'ON DELETE' => 5, 'ON UPDATE' => 5,
- 'CHARACTER SET' => 5, 'IF NOT EXISTS' => 5,
- 'DATA DIRECTORY' => 5,
- 'DEFAULT COLLATE' => 5, 'INDEX DIRECTORY' => 5,
- 'DEFAULT CHARACTER SET' => 5,
-
- 'GROUP BY' => 7, 'ORDER BY' => 7,
+ 'GROUP BY' => 7, 'NOT NULL' => 7, 'ORDER BY' => 7, 'SET NULL' => 7,
+ 'IF EXISTS' => 7, 'NO ACTION' => 7, 'ON DELETE' => 7, 'ON UPDATE' => 7,
+ 'OR REPLACE' => 7,
+ 'SQL SECURITY' => 7,
+ 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
+ 'DATA DIRECTORY' => 7,
+ 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
+ 'DEFAULT CHARACTER SET' => 7,
'XML' => 9,
'ENUM' => 9, 'TEXT' => 9,
@@ -184,18 +184,18 @@ class ContextMySql50500 extends Context
'CHARACTER' => 11, 'MEDIUMINT' => 11, 'VARBINARY' => 11,
'MEDIUMBLOB' => 11, 'MEDIUMTEXT' => 11,
- 'BINARY VARYING' => 13,
+ 'BINARY VARYING' => 15,
'KEY' => 19,
'INDEX' => 19,
'UNIQUE' => 19,
- 'INDEX KEY' => 21,
- 'UNIQUE KEY' => 21,
- 'FOREIGN KEY' => 21, 'PRIMARY KEY' => 21, 'SPATIAL KEY' => 21,
- 'FULLTEXT KEY' => 21, 'UNIQUE INDEX' => 21,
- 'SPATIAL INDEX' => 21,
- 'FULLTEXT INDEX' => 21,
+ 'INDEX KEY' => 23,
+ 'UNIQUE KEY' => 23,
+ 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23,
+ 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23,
+ 'SPATIAL INDEX' => 23,
+ 'FULLTEXT INDEX' => 23,
'X' => 33, 'Y' => 33,
'LN' => 33, 'PI' => 33,
@@ -284,7 +284,7 @@ class ContextMySql50500 extends Context
'LOCALTIMESTAMP' => 35,
'CURRENT_TIMESTAMP' => 35,
- 'NOT IN' => 37,
+ 'NOT IN' => 39,
'DATE' => 41, 'TIME' => 41, 'YEAR' => 41,
'TIMESTAMP' => 41,
diff --git a/src/Contexts/ContextMySql50600.php b/src/Contexts/ContextMySql50600.php
index 91978cb..780ea52 100644
--- a/src/Contexts/ContextMySql50600.php
+++ b/src/Contexts/ContextMySql50600.php
@@ -165,14 +165,14 @@ class ContextMySql50600 extends Context
'SQL_CALC_FOUND_ROWS' => 3,
'MASTER_SSL_VERIFY_SERVER_CERT' => 3,
- 'NOT NULL' => 5, 'SET NULL' => 5,
- 'NO ACTION' => 5, 'ON DELETE' => 5, 'ON UPDATE' => 5,
- 'CHARACTER SET' => 5, 'IF NOT EXISTS' => 5,
- 'DATA DIRECTORY' => 5,
- 'DEFAULT COLLATE' => 5, 'INDEX DIRECTORY' => 5,
- 'DEFAULT CHARACTER SET' => 5,
-
- 'GROUP BY' => 7, 'ORDER BY' => 7,
+ 'GROUP BY' => 7, 'NOT NULL' => 7, 'ORDER BY' => 7, 'SET NULL' => 7,
+ 'IF EXISTS' => 7, 'NO ACTION' => 7, 'ON DELETE' => 7, 'ON UPDATE' => 7,
+ 'OR REPLACE' => 7,
+ 'SQL SECURITY' => 7,
+ 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
+ 'DATA DIRECTORY' => 7,
+ 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
+ 'DEFAULT CHARACTER SET' => 7,
'XML' => 9,
'ENUM' => 9, 'TEXT' => 9,
@@ -190,18 +190,18 @@ class ContextMySql50600 extends Context
'CHARACTER' => 11, 'MEDIUMINT' => 11, 'VARBINARY' => 11,
'MEDIUMBLOB' => 11, 'MEDIUMTEXT' => 11,
- 'BINARY VARYING' => 13,
+ 'BINARY VARYING' => 15,
'KEY' => 19,
'INDEX' => 19,
'UNIQUE' => 19,
- 'INDEX KEY' => 21,
- 'UNIQUE KEY' => 21,
- 'FOREIGN KEY' => 21, 'PRIMARY KEY' => 21, 'SPATIAL KEY' => 21,
- 'FULLTEXT KEY' => 21, 'UNIQUE INDEX' => 21,
- 'SPATIAL INDEX' => 21,
- 'FULLTEXT INDEX' => 21,
+ 'INDEX KEY' => 23,
+ 'UNIQUE KEY' => 23,
+ 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23,
+ 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23,
+ 'SPATIAL INDEX' => 23,
+ 'FULLTEXT INDEX' => 23,
'X' => 33, 'Y' => 33,
'LN' => 33, 'PI' => 33,
@@ -315,7 +315,7 @@ class ContextMySql50600 extends Context
'LOCALTIMESTAMP' => 35,
'CURRENT_TIMESTAMP' => 35,
- 'NOT IN' => 37,
+ 'NOT IN' => 39,
'DATE' => 41, 'TIME' => 41, 'YEAR' => 41,
'TIMESTAMP' => 41,
diff --git a/src/Contexts/ContextMySql50700.php b/src/Contexts/ContextMySql50700.php
index 0837409..6a3cfd6 100644
--- a/src/Contexts/ContextMySql50700.php
+++ b/src/Contexts/ContextMySql50700.php
@@ -173,14 +173,14 @@ class ContextMySql50700 extends Context
'SQL_CALC_FOUND_ROWS' => 3,
'MASTER_SSL_VERIFY_SERVER_CERT' => 3,
- 'NOT NULL' => 5, 'SET NULL' => 5,
- 'NO ACTION' => 5, 'ON DELETE' => 5, 'ON UPDATE' => 5,
- 'CHARACTER SET' => 5, 'IF NOT EXISTS' => 5,
- 'DATA DIRECTORY' => 5,
- 'DEFAULT COLLATE' => 5, 'INDEX DIRECTORY' => 5,
- 'DEFAULT CHARACTER SET' => 5,
-
- 'GROUP BY' => 7, 'ORDER BY' => 7,
+ 'GROUP BY' => 7, 'NOT NULL' => 7, 'ORDER BY' => 7, 'SET NULL' => 7,
+ 'IF EXISTS' => 7, 'NO ACTION' => 7, 'ON DELETE' => 7, 'ON UPDATE' => 7,
+ 'OR REPLACE' => 7,
+ 'SQL SECURITY' => 7,
+ 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
+ 'DATA DIRECTORY' => 7,
+ 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
+ 'DEFAULT CHARACTER SET' => 7,
'XML' => 9,
'ENUM' => 9, 'TEXT' => 9,
@@ -198,18 +198,18 @@ class ContextMySql50700 extends Context
'CHARACTER' => 11, 'MEDIUMINT' => 11, 'VARBINARY' => 11,
'MEDIUMBLOB' => 11, 'MEDIUMTEXT' => 11,
- 'BINARY VARYING' => 13,
+ 'BINARY VARYING' => 15,
'KEY' => 19,
'INDEX' => 19,
'UNIQUE' => 19,
- 'INDEX KEY' => 21,
- 'UNIQUE KEY' => 21,
- 'FOREIGN KEY' => 21, 'PRIMARY KEY' => 21, 'SPATIAL KEY' => 21,
- 'FULLTEXT KEY' => 21, 'UNIQUE INDEX' => 21,
- 'SPATIAL INDEX' => 21,
- 'FULLTEXT INDEX' => 21,
+ 'INDEX KEY' => 23,
+ 'UNIQUE KEY' => 23,
+ 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23,
+ 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23,
+ 'SPATIAL INDEX' => 23,
+ 'FULLTEXT INDEX' => 23,
'X' => 33, 'Y' => 33,
'LN' => 33, 'PI' => 33,
@@ -327,7 +327,7 @@ class ContextMySql50700 extends Context
'LOCALTIMESTAMP' => 35,
'CURRENT_TIMESTAMP' => 35,
- 'NOT IN' => 37,
+ 'NOT IN' => 39,
'DATE' => 41, 'TIME' => 41, 'YEAR' => 41,
'TIMESTAMP' => 41,
diff --git a/src/Fragments/AlterFragment.php b/src/Fragments/AlterFragment.php
new file mode 100644
index 0000000..54338f9
--- /dev/null
+++ b/src/Fragments/AlterFragment.php
@@ -0,0 +1,201 @@
+<?php
+
+/**
+ * Parses a reference to a field.
+ *
+ * @package SqlParser
+ * @subpackage Fragments
+ */
+namespace SqlParser\Fragments;
+
+use SqlParser\Fragment;
+use SqlParser\Parser;
+use SqlParser\Token;
+use SqlParser\TokensList;
+
+/**
+ * Parses a reference to a field.
+ *
+ * @category Fragments
+ * @package SqlParser
+ * @subpackage Fragments
+ * @author Dan Ungureanu <udan1107@gmail.com>
+ * @license http://opensource.org/licenses/GPL-2.0 GNU Public License
+ */
+class AlterFragment extends Fragment
+{
+
+ /**
+ * All alter operations.
+ *
+ * @var array
+ */
+ public static $OPTIONS = array(
+ 'ADD' => 3,
+ 'ALTER' => 3,
+ 'ANALYZE' => 3,
+ 'CHANGE' => 3,
+ 'CHECK' => 3,
+ 'COALESCE' => 3,
+ 'CONVERT' => 3,
+ 'DISABLE' => 3,
+ 'DISCARD' => 3,
+ 'DROP' => 3,
+ 'ENABLE' => 3,
+ 'IMPORT' => 3,
+ 'MODIFY' => 3,
+ 'OPTIMIZE' => 3,
+ 'ORDER' => 3,
+ 'PARTITION' => 3,
+ 'REBUILD' => 3,
+ 'REMOVE' => 3,
+ 'RENAME' => 3,
+ 'REORGANIZE' => 3,
+ 'REPAIR' => 3,
+
+ 'COLUMN' => 4,
+ 'CONSTRAINT' => 4,
+ 'DEFAULT' => 4,
+ 'TO' => 4,
+ 'BY' => 4,
+ 'FOREIGN' => 4,
+ 'FULLTEXT' => 4,
+ 'KEY' => 4,
+ 'KEYS' => 4,
+ 'PARTITIONING' => 4,
+ 'PRIMARY KEY' => 4,
+ 'SPATIAL' => 4,
+ 'TABLESPACE' => 4,
+ 'INDEX' => 4,
+
+ 'DEFAULT CHARACTER SET' => array(5, 'var'),
+
+ 'COLLATE' => array(6, 'var'),
+ );
+
+ /**
+ * Options of this operation.
+ *
+ * @var OptionsFragment
+ */
+ public $options;
+
+ /**
+ * The altered field.
+ *
+ * @var FieldFragment
+ */
+ public $field;
+
+ /**
+ * Unparsed tokens.
+ *
+ * @var Token[]
+ */
+ public $unknown = array();
+
+ /**
+ * @param Parser $parser The parser that serves as context.
+ * @param TokensList $list The list of tokens that are being parsed.
+ * @param array $options Parameters for parsing.
+ *
+ * @return AlterFragment
+ */
+ public static function parse(Parser $parser, TokensList $list, array $options = array())
+ {
+ $ret = new AlterFragment();
+
+ /**
+ * Counts brackets.
+ * @var int
+ */
+ $brackets = 0;
+
+ /**
+ * The state of the parser.
+ *
+ * Below are the states of the parser.
+ *
+ * 0 ---------------------[ options ]---------------------> 1
+ *
+ * 1 ----------------------[ field ]----------------------> 2
+ *
+ * 2 -------------------------[ , ]-----------------------> 0
+ *
+ * @var int
+ */
+ $state = 0;
+
+ for (; $list->idx < $list->count; ++$list->idx) {
+ /**
+ * Token parsed at this moment.
+ * @var Token
+ */
+ $token = $list->tokens[$list->idx];
+
+ // End of statement.
+ if ($token->type === Token::TYPE_DELIMITER) {
+ break;
+ }
+
+ // Skipping whitespaces and comments.
+ if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) {
+ if ($state !== 2) {
+ // State 2 parses the unknown part which must include whitespaces as well.
+ continue;
+ }
+ }
+
+ if ($state === 0) {
+ $ret->options = OptionsFragment::parse($parser, $list, static::$OPTIONS);
+ $state = 1;
+ } elseif ($state === 1) {
+ $ret->field = FieldFragment::parse(
+ $parser,
+ $list,
+ array(
+ 'noAlias' => true,
+ 'noBrackets' => true,
+ )
+ );
+ if ($ret->field === null) {
+ // No field was read. We go back one token so the next
+ // iteration will parse the same on, but in state 2.
+ --$list->idx;
+ }
+ $state = 2;
+ } elseif ($state === 2) {
+ if ($token->type === Token::TYPE_OPERATOR) {
+ if ($token->value === '(') {
+ ++$brackets;
+ } elseif ($token->value === ')') {
+ --$brackets;
+ } elseif ($token->value === ',') {
+ break;
+ }
+ }
+ $ret->unknown[] = $token;
+ }
+ }
+
+ --$list->idx;
+ return $ret;
+ }
+
+ /**
+ * @param AlterFragment $fragment The fragment to be built.
+ *
+ * @return string
+ */
+ public static function build($fragment)
+ {
+ $ret = OptionsFragment::build($fragment->options) . ' ';
+ if (!empty($fragment->field)) {
+ $ret .= FieldFragment::build($fragment->field) . ' ';
+ }
+ foreach ($fragment->unknown as $token) {
+ $ret .= $token->token;
+ }
+ return $ret;
+ }
+}
diff --git a/src/Fragments/DataTypeFragment.php b/src/Fragments/DataTypeFragment.php
index 0b9e1a8..6a44b78 100644
--- a/src/Fragments/DataTypeFragment.php
+++ b/src/Fragments/DataTypeFragment.php
@@ -35,7 +35,7 @@ class DataTypeFragment extends Fragment
'BINARY' => 1,
'CHARACTER SET' => array(2, 'var'),
'CHARSET' => array(2, 'var'),
- 'COLLATE' => 3,
+ 'COLLATE' => array(3, 'var'),
'UNSIGNED' => 4,
'ZEROFILL' => 5,
);
@@ -70,6 +70,21 @@ class DataTypeFragment extends Fragment
public $options;
/**
+ * Constructor.
+ *
+ * @param string $name The name of this data type.
+ * @param array $parameters The parameters (size or possible values).
+ * @param OptionsFragment $options The options of this data type.
+ */
+ public function __construct($name = null, array $parameters = array(),
+ $options = null
+ ) {
+ $this->name = $name;
+ $this->parameters = $parameters;
+ $this->options = $options;
+ }
+
+ /**
* @param Parser $parser The parser that serves as context.
* @param TokensList $list The list of tokens that are being parsed.
* @param array $options Parameters for parsing.
@@ -113,10 +128,10 @@ class DataTypeFragment extends Fragment
$state = 1;
} elseif ($state === 1) {
if (($token->type === Token::TYPE_OPERATOR) && ($token->value === '(')) {
- $size = ArrayFragment::parse($parser, $list);
+ $parameters = ArrayFragment::parse($parser, $list);
++$list->idx;
$ret->parameters = (($ret->name === 'ENUM') || ($ret->name === 'SET')) ?
- $size->raw : $size->values;
+ $parameters->raw : $parameters->values;
}
$ret->options = OptionsFragment::parse($parser, $list, static::$DATA_TYPE_OPTIONS);
++$list->idx;
@@ -132,4 +147,21 @@ class DataTypeFragment extends Fragment
--$list->idx;
return $ret;
}
+
+ /**
+ * @param DataTypeFragment $fragment The fragment to be built.
+ *
+ * @return string
+ */
+ public static function build($fragment)
+ {
+ $tmp = '';
+ if (!empty($fragment->parameters)) {
+ $tmp = '('. implode(', ', $fragment->parameters) . ')';
+ }
+ return trim(
+ $fragment->name . ' ' . $tmp . ' '
+ . OptionsFragment::build($fragment->options)
+ );
+ }
}
diff --git a/src/Fragments/FieldDefFragment.php b/src/Fragments/FieldDefFragment.php
index 6c5771e..9f43fcc 100644
--- a/src/Fragments/FieldDefFragment.php
+++ b/src/Fragments/FieldDefFragment.php
@@ -92,6 +92,29 @@ class FieldDefFragment extends Fragment
public $options;
/**
+ * Constructor.
+ *
+ * @param string $name The name of the field.
+ * @param OptionsFragment $options The options of this field.
+ * @param DataTypeFragment|KeyFragment $type The data type of this field or the key.
+ * @param bool $isConstraint Whether this field is a constraint or not.
+ * @param ReferencesKeyword $references References.
+ */
+ public function __construct($name = null, $options = null, $type = null,
+ $isConstraint = false, $references = null
+ ) {
+ $this->name = $name;
+ $this->options = $options;
+ if ($type instanceof DataTypeFragment) {
+ $this->type = $type;
+ } elseif ($type instanceof KeyFragment) {
+ $this->key = $type;
+ $this->isConstraint = $isConstraint;
+ $this->references = $references;
+ }
+ }
+
+ /**
* @param Parser $parser The parser that serves as context.
* @param TokensList $list The list of tokens that are being parsed.
* @param array $options Parameters for parsing.
@@ -200,4 +223,42 @@ class FieldDefFragment extends Fragment
return $ret;
}
+
+ /**
+ * @param FieldDefFragment[] $fragment The fragment to be built.
+ *
+ * @return string
+ */
+ public static function build($fragment)
+ {
+ $ret = array();
+ foreach ($fragment as $f) {
+ $tmp = '';
+
+ if ($f->isConstraint) {
+ $tmp .= 'CONSTRAINT ';
+ }
+
+ if (!empty($f->name)) {
+ $tmp .= Context::escape($f->name) . ' ';
+ }
+
+ if (!empty($f->type)) {
+ $tmp .= DataTypeFragment::build($f->type) . ' ';
+ }
+
+ if (!empty($f->key)) {
+ $tmp .= KeyFragment::build($f->key) . ' ';
+ }
+
+ if (!empty($f->references)) {
+ $tmp .= 'REFERENCES ' . ReferencesKeyword::build($f->references) . ' ';
+ }
+
+ $tmp .= OptionsFragment::build($f->options);
+
+ $ret[] = trim($tmp);
+ }
+ return '(' . implode(', ', $ret) . ')';
+ }
}
diff --git a/src/Fragments/FieldFragment.php b/src/Fragments/FieldFragment.php
index edd0a2b..c33a7d7 100644
--- a/src/Fragments/FieldFragment.php
+++ b/src/Fragments/FieldFragment.php
@@ -8,6 +8,7 @@
*/
namespace SqlParser\Fragments;
+use SqlParser\Context;
use SqlParser\Fragment;
use SqlParser\Parser;
use SqlParser\Token;
@@ -168,7 +169,7 @@ class FieldFragment extends Fragment
if (($isExpr) && (!$alias)) {
$ret->expr .= $token->token;
}
- if (($alias === 0) && (!$isExpr) && (!$period) && (!empty($ret->expr))) {
+ if (($alias === 0) && (empty($options['noAlias'])) && (!$isExpr) && (!$period) && (!empty($ret->expr))) {
$alias = 1;
}
continue;
@@ -194,14 +195,14 @@ class FieldFragment extends Fragment
}
if ($token->type === Token::TYPE_OPERATOR) {
- if ((!empty($options['noBrackets'])) &&
- (($token->value === '(') || ($token->value === ')'))
+ if ((!empty($options['noBrackets']))
+ && (($token->value === '(') || ($token->value === ')'))
) {
break;
}
if ($token->value === '(') {
++$brackets;
- // We don't check to see if `$prev` is `true` (open bracke
+ // We don't check to see if `$prev` is `true` (open bracket
// was found before) because the brackets count is one (the
// only bracket we found is this one).
if (($brackets === 1) && (empty($ret->function)) && ($prev !== null) && ($prev !== true)) {
@@ -246,13 +247,20 @@ class FieldFragment extends Fragment
}
$ret->database = $ret->table;
$ret->table = $ret->column;
+ $ret->column = null;
$period = true;
} else {
// We found the name of a column (or table if column
// field should be skipped; used to parse table names).
if (!empty($options['skipColumn'])) {
+ if (!empty($ret->table)) {
+ break;
+ }
$ret->table = $token->value;
} else {
+ if (!empty($ret->column)) {
+ break;
+ }
$ret->column = $token->value;
}
$period = false;
@@ -317,11 +325,11 @@ class FieldFragment extends Fragment
if (!empty($fragment->column)) {
$fields[] = $fragment->column;
}
- $ret = implode('.', $fields);
+ $ret = implode('.', Context::escape($fields));
}
if (!empty($fragment->alias)) {
- $ret .= ' AS ' . $fragment->alias;
+ $ret .= ' AS ' . Context::escape($fragment->alias);
}
return $ret;
diff --git a/src/Fragments/KeyFragment.php b/src/Fragments/KeyFragment.php
index d84c9f6..1964cd2 100644
--- a/src/Fragments/KeyFragment.php
+++ b/src/Fragments/KeyFragment.php
@@ -67,6 +67,16 @@ class KeyFragment extends Fragment
*/
public $options;
+
+ public function __construct($name = null, array $columns = array(),
+ $type = null, $options = null
+ ) {
+ $this->name = $name;
+ $this->columns = $columns;
+ $this->type = $type;
+ $this->options = $options;
+ }
+
/**
* @param Parser $parser The parser that serves as context.
* @param TokensList $list The list of tokens that are being parsed.
@@ -131,6 +141,21 @@ class KeyFragment extends Fragment
--$list->idx;
return $ret;
+ }
+ /**
+ * @param KeyFragment $fragment The fragment to be built.
+ *
+ * @return string
+ */
+ public static function build($fragment)
+ {
+ $ret = $fragment->type . ' ';
+ if (!empty($fragment->name)) {
+ $ret .= Context::escape($fragment->name) . ' ';
+ }
+ $ret .= '(' . implode(', ', Context::escape($fragment->columns)) . ')';
+ $ret .= OptionsFragment::build($fragment->options);
+ return trim($ret);
}
}
diff --git a/src/Fragments/OptionsFragment.php b/src/Fragments/OptionsFragment.php
index 00ac282..fa06b0d 100644
--- a/src/Fragments/OptionsFragment.php
+++ b/src/Fragments/OptionsFragment.php
@@ -110,7 +110,12 @@ class OptionsFragment extends Fragment
if (is_array($lastOption)) {
if (empty($ret->options[$lastOptionId])) {
- $ret->options[$lastOptionId] = array('name' => $token->value, 'value' => '');
+ $ret->options[$lastOptionId] = array(
+ 'name' => $token->value,
+ 'equal' => $lastOption[1] === 'var=',
+ 'value' => '',
+ 'value_' => '',
+ );
} else {
if ($token->value !== '=') {
if ($token->value === '(') {
@@ -118,7 +123,9 @@ class OptionsFragment extends Fragment
} elseif ($token->value === ')') {
--$brackets;
} else {
- $ret->options[$lastOptionId]['value'] .= $token->value;
+ // Raw and processed value.
+ $ret->options[$lastOptionId]['value'] .= $token->token;
+ $ret->options[$lastOptionId]['value_'] .= $token->value;
}
if ($brackets === 0) {
$lastOption = null;
@@ -144,10 +151,15 @@ class OptionsFragment extends Fragment
*/
public static function build($fragment)
{
+ if ((empty($fragment)) || (!is_array($fragment->options))) {
+ return '';
+ }
$options = array();
foreach ($fragment->options as $option) {
if (is_array($option)) {
- $options[] = $option['name'] . '=' . $option['value'];
+ $options[] = $option['name']
+ . (!empty($option['equal']) ? '=' : ' ')
+ . $option['value'];
} else {
$options[] = $option;
}
diff --git a/src/Fragments/ReferencesKeyword.php b/src/Fragments/ReferencesKeyword.php
index 8de0233..ea10d20 100644
--- a/src/Fragments/ReferencesKeyword.php
+++ b/src/Fragments/ReferencesKeyword.php
@@ -8,6 +8,7 @@
*/
namespace SqlParser\Fragments;
+use SqlParser\Context;
use SqlParser\Fragment;
use SqlParser\Parser;
use SqlParser\Token;
@@ -58,6 +59,20 @@ class ReferencesKeyword extends Fragment
public $options;
/**
+ * Constructor.
+ *
+ * @param string $table The name of the table referenced.
+ * @param array $columns The columns referenced.
+ * @param OptionsFragment $options The options.
+ */
+ public function __construct($table = null, array $columns = array(), $options = null)
+ {
+ $this->table = $table;
+ $this->columns = $columns;
+ $this->options = $options;
+ }
+
+ /**
* @param Parser $parser The parser that serves as context.
* @param TokensList $list The list of tokens that are being parsed.
* @param array $options Parameters for parsing.
@@ -117,4 +132,18 @@ class ReferencesKeyword extends Fragment
--$list->idx;
return $ret;
}
+
+ /**
+ * @param ReferencesKeyword $fragment The fragment to be built.
+ *
+ * @return string
+ */
+ public static function build($fragment)
+ {
+ return trim(
+ Context::escape($fragment->table)
+ . ' (' . implode(', ', Context::escape($fragment->columns)) . ') '
+ . OptionsFragment::build($fragment->options)
+ );
+ }
}
diff --git a/src/Lexer.php b/src/Lexer.php
index 0d0862d..01d41d8 100644
--- a/src/Lexer.php
+++ b/src/Lexer.php
@@ -290,7 +290,25 @@ class Lexer
*/
$iEnd = $this->last;
+ /**
+ * Whether last parsed character is a whitespace.
+ * @var bool
+ */
+ $lastSpace = false;
+
for ($j = 1; $j < Context::KEYWORD_MAX_LENGTH && $this->last < $this->len; ++$j, ++$this->last) {
+ // Composed keywords shouldn't have more than one whitespace between
+ // keywords.
+ if (Context::isWhitespace($this->str[$this->last])) {
+ if ($lastSpace) {
+ --$j; // The size of the keyword didn't increase.
+ continue;
+ } else {
+ $lastSpace = true;
+ }
+ } else {
+ $lastSpace = false;
+ }
$token .= $this->str[$this->last];
if (($this->last + 1 === $this->len) || (Context::isSeparator($this->str[$this->last + 1]))) {
if (($flags = Context::isKeyword($token))) {
diff --git a/src/Parser.php b/src/Parser.php
index 11874fa..ff55f5f 100644
--- a/src/Parser.php
+++ b/src/Parser.php
@@ -337,10 +337,7 @@ class Parser
* Processed statement.
* @var Statement
*/
- $stmt = new $class();
-
- // Parsing the actual statement.
- $stmt->parse($this, $this->list);
+ $stmt = new $class($this, $this->list);
// The first token that is a part of this token is the next token
// unprocessed by the previous statement.
diff --git a/src/Statement.php b/src/Statement.php
index 1591d66..5ef7aec 100644
--- a/src/Statement.php
+++ b/src/Statement.php
@@ -38,7 +38,7 @@ abstract class Statement
*
* @var array
*/
- public static $CLAUSES;
+ public static $CLAUSES = array();
/**
* The options of this query.
@@ -79,7 +79,7 @@ abstract class Statement
/**
* Builds the statement.
*
- * @return void
+ * @return string
*/
public function build()
{
diff --git a/src/Statements/AlterStatement.php b/src/Statements/AlterStatement.php
index 81bca05..92f3744 100644
--- a/src/Statements/AlterStatement.php
+++ b/src/Statements/AlterStatement.php
@@ -9,11 +9,12 @@
namespace SqlParser\Statements;
use SqlParser\Parser;
+use SqlParser\Statement;
use SqlParser\Token;
use SqlParser\TokensList;
+use SqlParser\Fragments\AlterFragment;
use SqlParser\Fragments\FieldFragment;
use SqlParser\Fragments\OptionsFragment;
-use SqlParser\Statements\NotImplementedStatement;
/**
* `ALTER` statement.
@@ -24,7 +25,7 @@ use SqlParser\Statements\NotImplementedStatement;
* @author Dan Ungureanu <udan1107@gmail.com>
* @license http://opensource.org/licenses/GPL-2.0 GNU Public License
*/
-class AlterStatement extends NotImplementedStatement
+class AlterStatement extends Statement
{
/**
@@ -37,9 +38,9 @@ class AlterStatement extends NotImplementedStatement
/**
* Column affected by this statement.
*
- * @var FieldFragment
+ * @var AlterFragment[]
*/
- public $altered;
+ public $altered = array();
/**
* Options of this statement.
@@ -47,83 +48,91 @@ class AlterStatement extends NotImplementedStatement
* @var array
*/
public static $OPTIONS = array(
-
'ONLINE' => 1,
'OFFLINE' => 1,
-
'IGNORE' => 2,
-
- 'TABLE' => 3,
-
- 'ADD' => 4,
- 'ALTER' => 4,
- 'ANALYZE' => 4,
- 'CHANGE' => 4,
- 'CHECK' => 4,
- 'COALESCE' => 4,
- 'CONVERT' => 4,
- 'DISABLE' => 4,
- 'DISCARD' => 4,
- 'DROP' => 4,
- 'ENABLE' => 4,
- 'IMPORT' => 4,
- 'MODIFY' => 4,
- 'OPTIMIZE' => 4,
- 'ORDER' => 4,
- 'PARTITION' => 4,
- 'REBUILD' => 4,
- 'REMOVE' => 4,
- 'RENAME' => 4,
- 'REORGANIZE' => 4,
- 'REPAIR' => 4,
-
- 'COLUMN' => 5,
- 'CONSTRAINT' => 5,
- 'DEFAULT' => 5,
- 'TO' => 5,
- 'BY' => 5,
- 'FOREIGN' => 5,
- 'FULLTEXT' => 5,
- 'KEYS' => 5,
- 'PARTITIONING' => 5,
- 'PRIMARY KEY' => 5,
- 'SPATIAL' => 5,
- 'TABLESPACE' => 5,
- 'INDEX' => 5,
-
- 'DEFAULT CHARACTER SET' => array(6, 'var'),
-
- 'COLLATE' => array(7, 'var'),
);
/**
- * Function called after the token was processed.
- *
- * Extracts the name of affected column.
- *
* @param Parser $parser The instance that requests parsing.
* @param TokensList $list The list of tokens to be parsed.
- * @param Token $token The token that is being parsed.
*
* @return void
*/
- public function after(Parser $parser, TokensList $list, Token $token)
+ public function parse(Parser $parser, TokensList $list)
{
- // Parsing operation.
- ++$list->idx;
- $this->options->merge(
- OptionsFragment::parse(
- $parser,
- $list,
- static::$OPTIONS
- )
+ ++$list->idx; // Skipping `ALTER`.
+ $this->options = OptionsFragment::parse(
+ $parser,
+ $list,
+ static::$OPTIONS
);
- // Parsing affected field.
- ++$list->idx;
- $this->altered = FieldFragment::parse($parser, $list);
+ // Skipping `TABLE`.
+ $list->getNextOfTypeAndValue(Token::TYPE_KEYWORD, 'TABLE');
- //
- parent::after($parser, $list, $token);
+ // Parsing affected table.
+ $this->table = FieldFragment::parse(
+ $parser, $list, array(
+ 'noAlias' => true,
+ 'noBrackets' => true,
+ )
+ );
+ ++$list->idx; // Skipping field.
+
+ /**
+ * The state of the parser.
+ *
+ * Below are the states of the parser.
+ *
+ * 0 -----------------[ alter operation ]-----------------> 1
+ *
+ * 1 -------------------------[ , ]-----------------------> 0
+ *
+ * @var int
+ */
+ $state = 0;
+
+ for (; $list->idx < $list->count; ++$list->idx) {
+ /**
+ * Token parsed at this moment.
+ * @var Token
+ */
+ $token = $list->tokens[$list->idx];
+
+ // End of statement.
+ if ($token->type === Token::TYPE_DELIMITER) {
+ break;
+ }
+
+ // Skipping whitespaces and comments.
+ if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) {
+ continue;
+ }
+
+ if ($state === 0) {
+ $this->altered[] = AlterFragment::parse($parser, $list);
+ $state = 1;
+ } else if ($state === 1) {
+ if (($token->type === Token::TYPE_OPERATOR) && ($token->value === ',')) {
+ $state = 0;
+ }
+ }
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function build()
+ {
+ $tmp = array();
+ foreach ($this->altered as $altered) {
+ $tmp[] = $altered::build($altered);
+ }
+
+ return 'ALTER ' . OptionsFragment::build($this->options)
+ . ' TABLE ' . FieldFragment::build($this->table)
+ . ' ' . implode(', ', $tmp);
}
}
diff --git a/src/Statements/CreateStatement.php b/src/Statements/CreateStatement.php
index 7fd8ef0..306bfeb 100644
--- a/src/Statements/CreateStatement.php
+++ b/src/Statements/CreateStatement.php
@@ -38,30 +38,30 @@ class CreateStatement extends Statement
*/
public static $OPTIONS = array(
- 'DATABASE' => 1,
- 'EVENT' => 1,
- 'FUNCTION' => 1,
- 'INDEX' => 1,
- 'PROCEDURE' => 1,
- 'SERVER' => 1,
- 'TABLE' => 1,
- 'TABLESPACE' => 1,
- 'TRIGGER' => 1,
- 'USER' => 1,
- 'VIEW' => 1,
-
// CREATE TABLE
- 'TEMPORARY' => 2,
- 'IF NOT EXISTS' => 3,
+ 'TEMPORARY' => 1,
+ 'IF NOT EXISTS' => 2,
// CREATE FUNCTION / PROCEDURE and CREATE VIEW
- 'DEFINER' => array(2, 'var'),
+ 'DEFINER' => array(1, 'var='),
// CREATE VIEW
- 'OR REPLACE' => array(3, 'var'),
- 'ALGORITHM' => array(4, 'var'),
- 'DEFINER' => array(5, 'var'),
- 'SQL SECURITY' => array(6, 'var'),
+ 'OR REPLACE' => array(2, 'var='),
+ 'ALGORITHM' => array(3, 'var='),
+ 'DEFINER' => array(4, 'var='),
+ 'SQL SECURITY' => array(5, 'var'),
+
+ 'DATABASE' => 6,
+ 'EVENT' => 6,
+ 'FUNCTION' => 6,
+ 'INDEX' => 6,
+ 'PROCEDURE' => 6,
+ 'SERVER' => 6,
+ 'TABLE' => 6,
+ 'TABLESPACE' => 6,
+ 'TRIGGER' => 6,
+ 'USER' => 6,
+ 'VIEW' => 6,
);
/**
@@ -70,8 +70,8 @@ class CreateStatement extends Statement
* @var array
*/
public static $TABLE_OPTIONS = array(
- 'ENGINE' => array(1, 'var'),
- 'AUTO_INCREMENT' => array(2, 'var'),
+ 'ENGINE' => array(1, 'var='),
+ 'AUTO_INCREMENT' => array(2, 'var='),
'AVG_ROW_LENGTH' => array(3, 'var'),
'DEFAULT CHARACTER SET' => array(4, 'var'),
'CHARACTER SET' => array(4, 'var'),
@@ -144,15 +144,6 @@ class CreateStatement extends Statement
public $fields;
/**
- * The `SELECT` statement that defines this view.
- *
- * Used by `CREATE VIEW`.
- *
- * @var SelectStatement
- */
- public $select;
-
- /**
* The return data type of this routine.
*
* Used by `CREATE FUNCTION`.
@@ -170,15 +161,36 @@ class CreateStatement extends Statement
*/
public $parameters;
-
/**
- * The body of this function or procedure.
+ * The body of this function or procedure. For views, it is the select
+ * statement that gets the
*
- * Used by `CREATE FUNCTION` and `CREATE PROCEDURE`.
+ * Used by `CREATE FUNCTION`, `CREATE PROCEDURE` and `CREATE VIEW`.
*
* @var Token[]
*/
- public $body;
+ public $body = array();
+
+ /**
+ * @return string
+ */
+ public function build()
+ {
+ $tmp = '';
+ if ($this->options->has('TABLE')) {
+ $tmp = FieldDefFragment::build($this->fields);
+ } elseif ($this->options->has('VIEW')) {
+ if (!empty($this->fields)) {
+ $tmp .= ArrayFragment::build($this->fields) . ' ';
+ }
+ $tmp .= 'AS ' . TokensList::build($this->body);
+ }
+ return 'CREATE '
+ . OptionsFragment::build($this->options) . ' '
+ . FieldFragment::build($this->name) . ' '
+ . $tmp . ' '
+ . OptionsFragment::build($this->entityOptions);
+ }
/**
* @param Parser $parser The instance that requests parsing.
@@ -258,11 +270,17 @@ class CreateStatement extends Statement
--$list->idx; // getNext() also goes forward one field.
$this->fields = ArrayFragment::parse($parser, $list);
++$list->idx; // Skipping last token from the array.
- $token = $list->getNext();
+ $list->getNext();
}
- // Parsing the 'SELECT' statement.
- $this->select = new SelectStatement($parser, $list);
+ // Parsing the `AS` keyword.
+ for (; $list->idx < $list->count; ++$list->idx) {
+ $token = $list->tokens[$list->idx];
+ if ($token->type === Token::TYPE_DELIMITER) {
+ break;
+ }
+ $this->body[] = $token;
+ }
}
}
}
diff --git a/src/Statements/DropStatement.php b/src/Statements/DropStatement.php
index babf18a..f0cd1ce 100644
--- a/src/Statements/DropStatement.php
+++ b/src/Statements/DropStatement.php
@@ -46,6 +46,21 @@ class DropStatement extends Statement
);
/**
+ * The clauses of this statement, in order.
+ *
+ * @see Statement::$CLAUSES
+ *
+ * @var array
+ */
+ public static $CLAUSES = array(
+ 'DROP' => array('DROP', 2),
+ // Used for options.
+ '_OPTIONS' => array('_OPTIONS', 1),
+ // Used for select expressions.
+ 'DROP_' => array('DROP', 1),
+ );
+
+ /**
* Dropped elements.
*
* @var FieldFragment[]
diff --git a/src/Statements/NotImplementedStatement.php b/src/Statements/NotImplementedStatement.php
index b96c558..f5f8b8f 100644
--- a/src/Statements/NotImplementedStatement.php
+++ b/src/Statements/NotImplementedStatement.php
@@ -28,19 +28,40 @@ class NotImplementedStatement extends Statement
{
/**
- * Function called after the token was processed.
- *
- * Jump to the end of the delimiter.
- *
+ * The part of the statement that can't be parsed.
+ * @var Token[]
+ */
+ public $unknown = array();
+
+ /**
+ * @return string
+ */
+ public function build()
+ {
+ // Building the parsed part of the query (if any).
+ $query = parent::build() . ' ';
+
+ // Rebuilding the unknown part from tokens.
+ foreach ($this->unknown as $token) {
+ $query .= $token->token;
+ }
+
+ return $query;
+ }
+
+ /**
* @param Parser $parser The instance that requests parsing.
* @param TokensList $list The list of tokens to be parsed.
- * @param Token $token The token that is being parsed.
*
* @return void
*/
- public function after(Parser $parser, TokensList $list, Token $token)
+ public function parse(Parser $parser, TokensList $list)
{
- $list->getNextOfType(Token::TYPE_DELIMITER);
- --$list->idx;
+ for (; $list->idx < $list->count; ++$list->idx) {
+ if ($list->tokens[$list->idx]->type === Token::TYPE_DELIMITER) {
+ break;
+ }
+ $this->unknown[] = $list->tokens[$list->idx];
+ }
}
}
diff --git a/src/Statements/SelectStatement.php b/src/Statements/SelectStatement.php
index 84ec5a2..e376b47 100644
--- a/src/Statements/SelectStatement.php
+++ b/src/Statements/SelectStatement.php
@@ -57,7 +57,7 @@ class SelectStatement extends Statement
'DISTINCT' => 1,
'DISTINCTROW' => 1,
'HIGH_PRIORITY' => 2,
- 'MAX_STATEMENT_TIME' => array(3, 'var'),
+ 'MAX_STATEMENT_TIME' => array(3, 'var='),
'STRAIGHT_JOIN' => 4,
'SQL_SMALL_RESULT' => 5,
'SQL_BIG_RESULT' => 6,
diff --git a/src/TokensList.php b/src/TokensList.php
index 52a464e..229bebc 100644
--- a/src/TokensList.php
+++ b/src/TokensList.php
@@ -40,6 +40,42 @@ class TokensList implements \ArrayAccess
public $idx = 0;
/**
+ * Constructor.
+ *
+ * @param array $tokens The initial array of tokens.
+ */
+ public function __construct(array $tokens = array(), $count = -1)
+ {
+ if (!empty($tokens)) {
+ $this->tokens = $tokens;
+ if ($count === -1) {
+ $this->count = count($tokens);
+ }
+ }
+ }
+
+ /**
+ * Builds an array of tokens by merging their raw value.
+ *
+ * @param array $tokens
+ *
+ * @return string
+ */
+ public static function build($list)
+ {
+ if ($list instanceof TokensList) {
+ $list = $list->tokens;
+ }
+ $ret = '';
+ if (is_array($list)) {
+ foreach ($list as $tok) {
+ $ret .= $tok->token;
+ }
+ }
+ return $ret;
+ }
+
+ /**
* Adds a new token.
*
* @param Token $token Token to be added in list.
@@ -61,7 +97,8 @@ class TokensList implements \ArrayAccess
{
for (; $this->idx < $this->count; ++$this->idx) {
if (($this->tokens[$this->idx]->type !== Token::TYPE_WHITESPACE)
- && ($this->tokens[$this->idx]->type !== Token::TYPE_COMMENT)) {
+ && ($this->tokens[$this->idx]->type !== Token::TYPE_COMMENT)
+ ) {
return $this->tokens[$this->idx++];
}
}
diff --git a/src/Utils/Query.php b/src/Utils/Query.php
index 11a08d0..f741620 100644
--- a/src/Utils/Query.php
+++ b/src/Utils/Query.php
@@ -531,7 +531,7 @@ class Query
if ($onlyType) {
return static::getClause($statement, $list, $old, -1, false) . ' ' .
- $new . ' ' . static::getCLause($statement, $list, $old, 0) . ' ' .
+ $new . ' ' . static::getClause($statement, $list, $old, 0) . ' ' .
static::getClause($statement, $list, $old, 1, false);
}
diff --git a/src/Utils/Table.php b/src/Utils/Table.php
index 86ccbfb..ba7f82f 100644
--- a/src/Utils/Table.php
+++ b/src/Utils/Table.php
@@ -36,7 +36,10 @@ class Table
*/
public static function getForeignKeys($statement)
{
- if ((empty($statement->fields)) || (!$statement->options->has('TABLE'))) {
+ if ((empty($statement->fields))
+ || (!is_array($statement->fields))
+ || (!$statement->options->has('TABLE'))
+ ) {
return array();
}
@@ -85,7 +88,10 @@ class Table
*/
public static function getFields($statement)
{
- if ((empty($statement->fields)) || (!$statement->options->has('TABLE'))) {
+ if ((empty($statement->fields))
+ || (!is_array($statement->fields))
+ || (!$statement->options->has('TABLE'))
+ ) {
return array();
}
diff --git a/tests/Builder/AlterStatementTest.php b/tests/Builder/AlterStatementTest.php
new file mode 100644
index 0000000..2fa735d
--- /dev/null
+++ b/tests/Builder/AlterStatementTest.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace SqlParser\Tests\Builder;
+
+use SqlParser\Parser;
+
+use SqlParser\Tests\TestCase;
+
+class AlterStatementTest extends TestCase
+{
+
+ public function testBuilderView()
+ {
+ $query = 'ALTER TABLE `actor` ' .
+ 'ADD PRIMARY KEY (`actor_id`), ' .
+ 'ADD KEY `idx_actor_last_name` (`last_name`);';
+
+ $parser = new Parser($query);
+ $stmt = $parser->statements[0];
+
+ $this->assertEquals(
+ 'ALTER TABLE `actor` ' .
+ 'ADD PRIMARY KEY (`actor_id`), ' .
+ 'ADD KEY `idx_actor_last_name` (`last_name`)',
+ $stmt->build()
+ );
+ }
+}
diff --git a/tests/Builder/CreateStatementTest.php b/tests/Builder/CreateStatementTest.php
new file mode 100644
index 0000000..6434c87
--- /dev/null
+++ b/tests/Builder/CreateStatementTest.php
@@ -0,0 +1,60 @@
+<?php
+
+namespace SqlParser\Tests\Builder;
+
+use SqlParser\Parser;
+use SqlParser\Fragments\DataTypeFragment;
+use SqlParser\Fragments\FieldFragment;
+use SqlParser\Fragments\FieldDefFragment;
+use SqlParser\Fragments\KeyFragment;
+use SqlParser\Fragments\OptionsFragment;
+use SqlParser\Statements\CreateStatement;
+
+use SqlParser\Tests\TestCase;
+
+class CreateStatementTest extends TestCase
+{
+
+ public function testBuilderTable()
+ {
+ $stmt = new CreateStatement();
+
+ $stmt->name = new FieldFragment('', 'test', '');
+ $stmt->options = new OptionsFragment(array('TABLE'));
+ $stmt->fields = array(
+ new FieldDefFragment(
+ 'id',
+ new OptionsFragment(array('NOT NULL', 'AUTO_INCREMENT')),
+ new DataTypeFragment('INT', array(11), new OptionsFragment(array('UNSIGNED')))
+ ),
+ new FieldDefFragment(
+ '',
+ null,
+ new KeyFragment('', array('id'), 'PRIMARY KEY')
+ )
+ );
+
+ $this->assertEquals(
+ 'CREATE TABLE `test` (' .
+ '`id` INT (11) UNSIGNED NOT NULL AUTO_INCREMENT, ' .
+ 'PRIMARY KEY (`id`)' .
+ ') ',
+ $stmt->build()
+ );
+ }
+
+ public function testBuilderView()
+ {
+ $query = 'CREATE VIEW myView (vid, vfirstname) AS ' .
+ 'SELECT id, first_name FROM employee WHERE id = 1';
+
+ $parser = new Parser($query);
+ $stmt = $parser->statements[0];
+
+ $this->assertEquals(
+ 'CREATE VIEW myView (vid, vfirstname) AS ' .
+ 'SELECT id, first_name FROM employee WHERE id = 1 ',
+ $stmt->build()
+ );
+ }
+}
diff --git a/tests/Builder/ExplainStatement.php b/tests/Builder/ExplainStatement.php
new file mode 100644
index 0000000..1a44f44
--- /dev/null
+++ b/tests/Builder/ExplainStatement.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace SqlParser\Tests\Builder;
+
+use SqlParser\Parser;
+
+use SqlParser\Tests\TestCase;
+
+class ExplainStatementTest extends TestCase
+{
+
+ public function testBuilderView()
+ {
+ $query = 'EXPLAIN SELECT * FROM test;';
+
+ $parser = new Parser($query);
+ $stmt = $parser->statements[0];
+
+ $this->assertEquals(
+ ' EXPLAIN SELECT * FROM test',
+ $stmt->build()
+ );
+ }
+}
diff --git a/tests/Builder/StatementTest.php b/tests/Builder/StatementTest.php
index 0a65aac..29163d1 100644
--- a/tests/Builder/StatementTest.php
+++ b/tests/Builder/StatementTest.php
@@ -2,7 +2,6 @@
namespace SqlParser\Tests\Builder;
-use SqlParser\Builder;
use SqlParser\Fragments\OptionsFragment;
use SqlParser\Fragments\FieldFragment;
use SqlParser\Fragments\WhereKeyword;
@@ -33,8 +32,8 @@ class StatementTest extends TestCase
$stmt->limit = new LimitKeyword(1, 10);
$this->assertEquals(
- 'SELECT DISTINCT sakila.film.film_id AS fid, COUNT(film_id) ' .
- 'FROM film, actor ' .
+ 'SELECT DISTINCT `sakila`.`film`.`film_id` AS `fid`, COUNT(film_id) ' .
+ 'FROM `film`, `actor` ' .
'WHERE film_id > 10 OR actor.age > 25 ' .
'LIMIT 10, 1 ',
$stmt->build()
diff --git a/tests/Fragments/ArrayFragmentTest.php b/tests/Fragments/ArrayFragmentTest.php
index f73ce54..9242dbb 100644
--- a/tests/Fragments/ArrayFragmentTest.php
+++ b/tests/Fragments/ArrayFragmentTest.php
@@ -20,4 +20,21 @@ class ArrayFragmentTest extends TestCase
$fragment = new ArrayFragment(array(), array('a', 'b'));
$this->assertEquals('(a, b)', ArrayFragment::build($fragment));
}
+
+ /**
+ * @dataProvider testParseProvider
+ */
+ public function testParse($test)
+ {
+ $this->runParserTest($test);
+ }
+
+ public function testParseProvider()
+ {
+ return array(
+ array('parseArrayErr1'),
+ array('parseArrayErr2'),
+ array('parseArrayErr3'),
+ );
+ }
}
diff --git a/tests/Fragments/FieldFragmentTest.php b/tests/Fragments/FieldFragmentTest.php
index f688260..785f87a 100644
--- a/tests/Fragments/FieldFragmentTest.php
+++ b/tests/Fragments/FieldFragmentTest.php
@@ -35,6 +35,6 @@ class FieldFragmentTest extends TestCase
public function testBuild()
{
$fragment = new FieldFragment('1 + 2', 'three');
- $this->assertEquals(FieldFragment::build($fragment), '1 + 2 AS three');
+ $this->assertEquals(FieldFragment::build($fragment), '1 + 2 AS `three`');
}
}
diff --git a/tests/Parser/FragmentTest.php b/tests/Fragments/FragmentTest.php
index 638b84d..638b84d 100644
--- a/tests/Parser/FragmentTest.php
+++ b/tests/Fragments/FragmentTest.php
diff --git a/tests/Fragments/LimitKeywordTest.php b/tests/Fragments/LimitKeywordTest.php
index f26d871..ff97cf0 100644
--- a/tests/Fragments/LimitKeywordTest.php
+++ b/tests/Fragments/LimitKeywordTest.php
@@ -21,4 +21,20 @@ class LimitKeywordTest extends TestCase
$fragment = new LimitKeyword(1, 2);
$this->assertEquals(LimitKeyword::build($fragment), '2, 1');
}
+
+ /**
+ * @dataProvider testParseProvider
+ */
+ public function testParse($test)
+ {
+ $this->runParserTest($test);
+ }
+
+ public function testParseProvider()
+ {
+ return array(
+ array('parseLimitErr1'),
+ array('parseLimitErr2'),
+ );
+ }
}
diff --git a/tests/Fragments/OptionsFragmentTest.php b/tests/Fragments/OptionsFragmentTest.php
index 47738b9..8fe596d 100644
--- a/tests/Fragments/OptionsFragmentTest.php
+++ b/tests/Fragments/OptionsFragmentTest.php
@@ -27,6 +27,8 @@ class OptionsFragmentTest extends TestCase
2 => array(
'name' => 'B',
'value' => 'test',
+ 'value_' => 'test',
+ 'equal' => false,
),
3 => 'C',
),
@@ -50,6 +52,8 @@ class OptionsFragmentTest extends TestCase
array(
'name' => 'MAX_STATEMENT_TIME',
'value' => '42',
+ 'value_' => '42',
+ 'equal' => true,
),
)
);
diff --git a/tests/Fragments/ReferencesKeyword.php b/tests/Fragments/ReferencesKeyword.php
new file mode 100644
index 0000000..9f874ec
--- /dev/null
+++ b/tests/Fragments/ReferencesKeyword.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace SqlParser\Tests\Fragments;
+
+use SqlParser\Parser;
+use SqlParser\Fragments\ReferencesKeyword;
+
+use SqlParser\Tests\TestCase;
+
+class ReferencesKeywordTest extends TestCase
+{
+
+ public function testParse()
+ {
+ $fragment = ReferencesKeyword::parse(new Parser(), $this->getTokensList('tbl (id)'));
+ $this->assertEquals('tbl', $fragment->table);
+ $this->assertEquals(array('id'), $fragment->columns);
+ }
+
+ public function testBuild()
+ {
+ $fragment = new ReferencesKeyword('tbl', array('id'));
+ $this->assertEquals('`tbl` (`id`)', ReferencesKeyword::build($fragment));
+ }
+}
diff --git a/tests/Lexer/ContextTest.php b/tests/Lexer/ContextTest.php
index b630d03..50e500a 100644
--- a/tests/Lexer/ContextTest.php
+++ b/tests/Lexer/ContextTest.php
@@ -36,4 +36,29 @@ class ContextTest extends TestCase
{
Context::load('Foo');
}
+
+ public function testMode()
+ {
+ Context::setMode('REAL_AS_FLOAT,ANSI_QUOTES,IGNORE_SPACE');
+ $this->assertEquals(
+ Context::REAL_AS_FLOAT | Context::ANSI_QUOTES | Context::IGNORE_SPACE,
+ Context::$MODE
+ );
+ Context::setMode();
+ $this->assertEquals(0, Context::$MODE);
+ }
+
+ public function testEscape()
+ {
+ Context::setMode('ANSI_QUOTES');
+ $this->assertEquals('"test"', Context::escape('test'));
+
+ Context::setMode();
+ $this->assertEquals('`test`', Context::escape('test'));
+
+ $this->assertEquals(
+ array('`a`', '`b`'),
+ Context::escape(array('a', 'b'))
+ );
+ }
}
diff --git a/tests/Lexer/IsMethodsTest.php b/tests/Lexer/IsMethodsTest.php
index dfd065d..a817e65 100644
--- a/tests/Lexer/IsMethodsTest.php
+++ b/tests/Lexer/IsMethodsTest.php
@@ -17,13 +17,16 @@ class IsMethodsTest extends TestCase
$this->assertEquals(1 | Token::FLAG_KEYWORD_RESERVED, Context::isKeyword('DISTINCT'));
$this->assertEquals(
- 1 | Token::FLAG_KEYWORD_COMPOSED | Token::FLAG_KEYWORD_KEY,
+ 1 | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED | Token::FLAG_KEYWORD_KEY,
Context::isKeyword('PRIMARY KEY')
);
- $this->assertEquals(1 | Token::FLAG_KEYWORD_COMPOSED, Context::isKeyword('CHARACTER SET'));
+ $this->assertEquals(
+ 1 | Token::FLAG_KEYWORD_RESERVED | Token::FLAG_KEYWORD_COMPOSED,
+ Context::isKeyword('CHARACTER SET')
+ );
$this->assertEquals(1 | Token::FLAG_KEYWORD_RESERVED, Context::isKeyword('FROM', true));
- $this->assertEquals(null, Context::isKeyword('PRIMARY KEY', true));
+ $this->assertEquals(null, Context::isKeyword('MODIFY', true));
$this->assertEquals(null, Context::isKeyword('foo'));
$this->assertEquals(null, Context::isKeyword('bar baz'));
diff --git a/tests/Lexer/TokensList.php b/tests/Lexer/TokensListTest.php
index 8887241..55bf1b9 100644
--- a/tests/Lexer/TokensList.php
+++ b/tests/Lexer/TokensListTest.php
@@ -7,7 +7,7 @@ use SqlParser\TokensList;
use SqlParser\Tests\TestCase;
-class TokensListCase extends TestCase
+class TokensListTest extends TestCase
{
/**
@@ -24,24 +24,20 @@ class TokensListCase extends TestCase
{
$this->tokens = array(
new Token('SELECT', Token::TYPE_KEYWORD),
+ new Token(' ', Token::TYPE_WHITESPACE),
new Token('*', Token::TYPE_OPERATOR),
+ new Token(' ', Token::TYPE_WHITESPACE),
new Token('FROM', Token::TYPE_KEYWORD),
- new Token('`test`', Token::TYPE_SYMBOL)
+ new Token(' ', Token::TYPE_WHITESPACE),
+ new Token('`test`', Token::TYPE_SYMBOL),
+ new Token(' ', Token::TYPE_WHITESPACE),
);
}
- /**
- * Gets a list used for testing.
- *
- * @return TokensList
- */
- public function getList()
+ public function testBuild()
{
- $list = new TokensList();
- foreach ($this->tokens as $token) {
- $list[] = $token;
- }
- return $list;
+ $list = new TokensList($this->tokens);
+ $this->assertEquals('SELECT * FROM `test` ', TokensList::build($list));
}
public function testAdd()
@@ -50,30 +46,30 @@ class TokensListCase extends TestCase
foreach ($this->tokens as $token) {
$list->add($token);
}
- $this->assertEquals($this->getList(), $list);
+ $this->assertEquals(new TokensList($this->tokens), $list);
}
public function testGetNext()
{
- $list = $this->getList();
+ $list = new TokensList($this->tokens);
$this->assertEquals($this->tokens[0], $list->getNext());
- $this->assertEquals($this->tokens[1], $list->getNext());
$this->assertEquals($this->tokens[2], $list->getNext());
- $this->assertEquals($this->tokens[3], $list->getNext());
+ $this->assertEquals($this->tokens[4], $list->getNext());
+ $this->assertEquals($this->tokens[6], $list->getNext());
$this->assertEquals(null, $list->getNext());
}
public function testGetNextOfType()
{
- $list = $this->getList();
+ $list = new TokensList($this->tokens);
$this->assertEquals($this->tokens[0], $list->getNextOfType(Token::TYPE_KEYWORD));
- $this->assertEquals($this->tokens[2], $list->getNextOfType(Token::TYPE_KEYWORD));
+ $this->assertEquals($this->tokens[4], $list->getNextOfType(Token::TYPE_KEYWORD));
$this->assertEquals(null, $list->getNextOfType(Token::TYPE_KEYWORD));
}
public function testGetNextOfTypeAndValue()
{
- $list = $this->getList();
+ $list = new TokensList($this->tokens);
$this->assertEquals($this->tokens[0], $list->getNextOfTypeAndValue(Token::TYPE_KEYWORD, 'SELECT'));
$this->assertEquals(null, $list->getNextOfTypeAndValue(Token::TYPE_KEYWORD, 'SELECT'));
}
@@ -97,11 +93,10 @@ class TokensListCase extends TestCase
// offsetExists($offset)
$this->assertTrue(isset($list[2]));
- $this->assertFalse(isset($list[5]));
+ $this->assertFalse(isset($list[8]));
// offsetUnset($offset)
unset($list[2]);
$this->assertEquals($this->tokens[3], $list[2]);
-
}
}
diff --git a/tests/Parser/AlterStatementTest.php b/tests/Parser/AlterStatementTest.php
new file mode 100644
index 0000000..4b315f1
--- /dev/null
+++ b/tests/Parser/AlterStatementTest.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace SqlParser\Tests\Parser;
+
+use SqlParser\Tests\TestCase;
+
+class AlterStatementTest extends TestCase
+{
+
+ /**
+ * @dataProvider testAlterProvider
+ */
+ public function testAlter($test)
+ {
+ $this->runParserTest($test);
+ }
+
+ public function testAlterProvider()
+ {
+ return array(
+ array('parseAlter'),
+ );
+ }
+}
diff --git a/tests/Parser/ArrayFragmentTest.php b/tests/Parser/ArrayFragmentTest.php
deleted file mode 100644
index a31bf2a..0000000
--- a/tests/Parser/ArrayFragmentTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace SqlParser\Tests\Parser;
-
-use SqlParser\Tests\TestCase;
-
-class ArrayFragmentTest extends TestCase
-{
-
- /**
- * @dataProvider testArrayProvider
- */
- public function testArray($test)
- {
- $this->runParserTest($test);
- }
-
- public function testArrayProvider()
- {
- return array(
- array('parseArrayErr1'),
- array('parseArrayErr2'),
- array('parseArrayErr3'),
- );
- }
-}
diff --git a/tests/Parser/CreateStatementTest.php b/tests/Parser/CreateStatementTest.php
index 8f8c43a..11bfc5e 100644
--- a/tests/Parser/CreateStatementTest.php
+++ b/tests/Parser/CreateStatementTest.php
@@ -18,15 +18,17 @@ class CreateStatementTest extends TestCase
public function testCreateProvider()
{
return array(
- array('parseCreateTable'),
- array('parseCreateTable2'),
- array('parseCreateTableErr1'),
- array('parseCreateProcedure'),
- array('parseCreateProcedure2'),
array('parseCreateFunction'),
array('parseCreateFunctionErr1'),
array('parseCreateFunctionErr2'),
+ array('parseCreateProcedure'),
+ array('parseCreateProcedure2'),
+ array('parseCreateTable'),
+ array('parseCreateTable2'),
+ array('parseCreateTableErr1'),
array('parseCreateUser'),
+ array('parseCreateView'),
+ array('parseCreateView2'),
);
}
}
diff --git a/tests/Parser/ExplainStatement.php b/tests/Parser/ExplainStatement.php
new file mode 100644
index 0000000..3e1aaf9
--- /dev/null
+++ b/tests/Parser/ExplainStatement.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace SqlParser\Tests\Parser;
+
+use SqlParser\Tests\TestCase;
+
+class ExplainStatementTest extends TestCase
+{
+
+ /**
+ * @dataProvider testExplainProvider
+ */
+ public function testExplain($test)
+ {
+ $this->runParserTest($test);
+ }
+
+ public function testExplainProvider()
+ {
+ return array(
+ array('parseExplain'),
+ );
+ }
+}
diff --git a/tests/Parser/LimitKeywordTest.php b/tests/Parser/LimitKeywordTest.php
deleted file mode 100644
index 2e7831d..0000000
--- a/tests/Parser/LimitKeywordTest.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-namespace SqlParser\Tests\Parser;
-
-use SqlParser\Tests\TestCase;
-
-class LimitKeywordTest extends TestCase
-{
-
- /**
- * @dataProvider testCallProvider
- */
- public function testCall($test)
- {
- $this->runParserTest($test);
- }
-
- public function testCallProvider()
- {
- return array(
- array('parseLimitErr1'),
- array('parseLimitErr2'),
- );
- }
-}
diff --git a/tests/data/parseAlter.in b/tests/data/parseAlter.in
new file mode 100644
index 0000000..6e2afe8
--- /dev/null
+++ b/tests/data/parseAlter.in
@@ -0,0 +1,3 @@
+ALTER TABLE `actor`
+ ADD PRIMARY KEY (`actor_id`),
+ ADD KEY `idx_actor_last_name` (`last_name`); \ No newline at end of file
diff --git a/tests/data/parseAlter.out b/tests/data/parseAlter.out
new file mode 100644
index 0000000..f26ac81
--- /dev/null
+++ b/tests/data/parseAlter.out
@@ -0,0 +1,3 @@
+a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:26:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"ALTER";s:5:"value";s:5:"ALTER";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:5;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"TABLE";s:5:"value";s:5:"TABLE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:6;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:11;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"`actor`";s:5:"value";s:5:"actor";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:12;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:19;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"ADD";s:5:"value";s:3:"ADD";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:24;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:27;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"PRIMARY KEY";s:5:"value";s:11:"PRIMARY KEY";s:4:"type";i:1;s:5:"flags";i:23;s:8:"position";i:28;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:39;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:40;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`actor_id`";s:5:"value";s:8:"actor_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:41;}i:12;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:51;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:52;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:53;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"ADD";s:5:"value";s:3:"ADD";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:58;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:61;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"KEY";s:5:"value";s:3:"KEY";s:4:"type";i:1;s:5:"flags";i:19;s:8:"position";i:62;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:65;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:21:"`idx_actor_last_name`";s:5:"value";s:19:"idx_actor_last_name";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:66;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:87;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:88;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"`last_name`";s:5:"value";s:9:"last_name";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:89;}i:23;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:100;}i:24;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:101;}i:25;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:26;s:3:"idx";i:26;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:35:"SqlParser\Statements\AlterStatement":5:{s:5:"table";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:5:"actor";s:4:"expr";s:7:"`actor`";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:7:"altered";a:2:{i:0;O:33:"SqlParser\Fragments\AlterFragment":3:{s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:3;s:3:"ADD";i:4;s:11:"PRIMARY KEY";}}s:5:"field";N;s:7:"unknown";a:3:{i:0;r:65;i:1;r:71;i:2;r:77;}}i:1;O:33:"SqlParser\Fragments\AlterFragment":3:{s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:3;s:3:"ADD";i:4;s:3:"KEY";}}s:5:"field";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:19:"idx_actor_last_name";s:4:"expr";s:21:"`idx_actor_last_name`";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:7:"unknown";a:3:{i:0;r:131;i:1;r:137;i:2;r:143;}}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}s:5:"first";i:0;s:4:"last";i:24;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseCreateFunction.out b/tests/data/parseCreateFunction.out
index 78620ea..07eca1a 100644
--- a/tests/data/parseCreateFunction.out
+++ b/tests/data/parseCreateFunction.out
@@ -3,4 +3,4 @@ a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensLi
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:53;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"DECLARE";s:5:"value";s:7:"DECLARE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:58;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:65;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:66;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:74;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"VARCHAR";s:5:"value";s:7:"VARCHAR";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:75;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:82;}i:23;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"DEFAULT";s:5:"value";s:7:"DEFAULT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:83;}i:24;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:90;}i:25;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"""";s:5:"value";s:0:"";s:4:"type";i:7;s:5:"flags";i:2;s:8:"position";i:91;}i:26;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:93;}i:27;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:94;}i:28;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:99;}i:29;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:105;}i:30;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:106;}i:31;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:114;}i:32;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"INTO";s:5:"value";s:4:"INTO";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:115;}i:33;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:119;}i:34;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:120;}i:35;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:128;}i:36;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"FROM";s:5:"value";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:129;}i:37;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:133;}i:38;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"users";s:5:"value";s:5:"users";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:134;}i:39;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:139;}i:40;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"WHERE";s:5:"value";s:5:"WHERE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:140;}i:41;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:145;}i:42;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"ID";s:5:"value";s:2:"ID";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:146;}i:43;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:148;}i:44;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:149;}i:45;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:150;}i:46;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"uid";s:5:"value";s:3:"uid";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:151;}i:47;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:154;}i:48;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:155;}i:49;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"RETURN";s:5:"value";s:6:"RETURN";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:160;}i:50;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:166;}i:51;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:167;}i:52;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:175;}i:53;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
-";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:176;}i:54;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"END";s:5:"value";s:3:"END";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:177;}i:55;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:56;s:3:"idx";i:56;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":1:{s:4:"name";s:6:"F_TEST";}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}s:6:"fields";N;s:6:"return";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"VARCHAR";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"parameters";a:1:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":3:{s:4:"name";s:3:"uid";s:5:"inOut";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}}}s:4:"body";a:40:{i:0;r:95;i:1;r:101;i:2;r:107;i:3;r:113;i:4;r:119;i:5;r:125;i:6;r:131;i:7;r:137;i:8;r:143;i:9;r:149;i:10;r:155;i:11;r:161;i:12;r:167;i:13;r:173;i:14;r:179;i:15;r:185;i:16;r:191;i:17;r:197;i:18;r:203;i:19;r:209;i:20;r:215;i:21;r:221;i:22;r:227;i:23;r:233;i:24;r:239;i:25;r:245;i:26;r:251;i:27;r:257;i:28;r:263;i:29;r:269;i:30;r:275;i:31;r:281;i:32;r:287;i:33;r:293;i:34;r:299;i:35;r:305;i:36;r:311;i:37;r:317;i:38;r:323;i:39;r:329;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:8:"FUNCTION";}}s:5:"first";i:0;s:4:"last";i:54;}}}s:6:"errors";a:0:{}} \ No newline at end of file
+";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:176;}i:54;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"END";s:5:"value";s:3:"END";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:177;}i:55;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:56;s:3:"idx";i:56;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:6:"F_TEST";s:6:"column";N;s:4:"expr";s:6:"F_TEST";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}s:6:"fields";N;s:6:"return";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"VARCHAR";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"parameters";a:1:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":3:{s:4:"name";s:3:"uid";s:5:"inOut";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}}}s:4:"body";a:40:{i:0;r:95;i:1;r:101;i:2;r:107;i:3;r:113;i:4;r:119;i:5;r:125;i:6;r:131;i:7;r:137;i:8;r:143;i:9;r:149;i:10;r:155;i:11;r:161;i:12;r:167;i:13;r:173;i:14;r:179;i:15;r:185;i:16;r:191;i:17;r:197;i:18;r:203;i:19;r:209;i:20;r:215;i:21;r:221;i:22;r:227;i:23;r:233;i:24;r:239;i:25;r:245;i:26;r:251;i:27;r:257;i:28;r:263;i:29;r:269;i:30;r:275;i:31;r:281;i:32;r:287;i:33;r:293;i:34;r:299;i:35;r:305;i:36;r:311;i:37;r:317;i:38;r:323;i:39;r:329;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:6;s:8:"FUNCTION";}}s:5:"first";i:0;s:4:"last";i:54;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseCreateFunctionErr1.out b/tests/data/parseCreateFunctionErr1.out
index 90dce98..5062d4b 100644
--- a/tests/data/parseCreateFunctionErr1.out
+++ b/tests/data/parseCreateFunctionErr1.out
@@ -3,4 +3,4 @@ a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensLi
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:37;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"DECLARE";s:5:"value";s:7:"DECLARE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:42;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:49;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:50;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:58;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"VARCHAR";s:5:"value";s:7:"VARCHAR";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:59;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:66;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"DEFAULT";s:5:"value";s:7:"DEFAULT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:67;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:74;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"""";s:5:"value";s:0:"";s:4:"type";i:7;s:5:"flags";i:2;s:8:"position";i:75;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:77;}i:23;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:78;}i:24;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:83;}i:25;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:89;}i:26;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:90;}i:27;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:98;}i:28;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"INTO";s:5:"value";s:4:"INTO";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:99;}i:29;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:103;}i:30;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:104;}i:31;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:112;}i:32;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"FROM";s:5:"value";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:113;}i:33;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:117;}i:34;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"users";s:5:"value";s:5:"users";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:118;}i:35;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:123;}i:36;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"WHERE";s:5:"value";s:5:"WHERE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:124;}i:37;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:129;}i:38;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"ID";s:5:"value";s:2:"ID";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:130;}i:39;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:132;}i:40;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:133;}i:41;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:134;}i:42;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"uid";s:5:"value";s:3:"uid";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:135;}i:43;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:138;}i:44;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:139;}i:45;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"RETURN";s:5:"value";s:6:"RETURN";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:144;}i:46;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:150;}i:47;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:151;}i:48;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:159;}i:49;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
-";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:160;}i:50;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"END";s:5:"value";s:3:"END";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:161;}i:51;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:52;s:3:"idx";i:52;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":1:{s:4:"name";s:6:"F_TEST";}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}s:6:"fields";N;s:6:"return";N;s:10:"parameters";a:1:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":3:{s:4:"name";s:3:"uid";s:5:"inOut";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}}}s:4:"body";a:38:{i:0;r:83;i:1;r:89;i:2;r:95;i:3;r:101;i:4;r:107;i:5;r:113;i:6;r:119;i:7;r:125;i:8;r:131;i:9;r:137;i:10;r:143;i:11;r:149;i:12;r:155;i:13;r:161;i:14;r:167;i:15;r:173;i:16;r:179;i:17;r:185;i:18;r:191;i:19;r:197;i:20;r:203;i:21;r:209;i:22;r:215;i:23;r:221;i:24;r:227;i:25;r:233;i:26;r:239;i:27;r:245;i:28;r:251;i:29;r:257;i:30;r:263;i:31;r:269;i:32;r:275;i:33;r:281;i:34;r:287;i:35;r:293;i:36;r:299;i:37;r:305;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:8:"FUNCTION";}}s:5:"first";i:0;s:4:"last";i:50;}}}s:6:"errors";a:1:{i:0;a:3:{i:0;s:31:"'RETURNS' keyword was expected.";i:1;r:71;i:2;i:0;}}} \ No newline at end of file
+";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:160;}i:50;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"END";s:5:"value";s:3:"END";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:161;}i:51;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:52;s:3:"idx";i:52;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:6:"F_TEST";s:6:"column";N;s:4:"expr";s:6:"F_TEST";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}s:6:"fields";N;s:6:"return";N;s:10:"parameters";a:1:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":3:{s:4:"name";s:3:"uid";s:5:"inOut";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}}}s:4:"body";a:38:{i:0;r:83;i:1;r:89;i:2;r:95;i:3;r:101;i:4;r:107;i:5;r:113;i:6;r:119;i:7;r:125;i:8;r:131;i:9;r:137;i:10;r:143;i:11;r:149;i:12;r:155;i:13;r:161;i:14;r:167;i:15;r:173;i:16;r:179;i:17;r:185;i:18;r:191;i:19;r:197;i:20;r:203;i:21;r:209;i:22;r:215;i:23;r:221;i:24;r:227;i:25;r:233;i:26;r:239;i:27;r:245;i:28;r:251;i:29;r:257;i:30;r:263;i:31;r:269;i:32;r:275;i:33;r:281;i:34;r:287;i:35;r:293;i:36;r:299;i:37;r:305;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:6;s:8:"FUNCTION";}}s:5:"first";i:0;s:4:"last";i:50;}}}s:6:"errors";a:1:{i:0;a:3:{i:0;s:31:"'RETURNS' keyword was expected.";i:1;r:71;i:2;i:0;}}} \ No newline at end of file
diff --git a/tests/data/parseCreateFunctionErr2.out b/tests/data/parseCreateFunctionErr2.out
index c7a576c..fa6bd9b 100644
--- a/tests/data/parseCreateFunctionErr2.out
+++ b/tests/data/parseCreateFunctionErr2.out
@@ -1 +1 @@
-a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:10:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"FUNCTION";s:5:"value";s:8:"FUNCTION";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:15;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"test";s:5:"value";s:4:"test";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:16;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:20;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:21;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:22;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"RETURNS";s:5:"value";s:7:"RETURNS";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:23;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:10;s:3:"idx";i:12;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":1:{s:4:"name";s:4:"test";}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}s:6:"fields";N;s:6:"return";N;s:10:"parameters";a:0:{}s:4:"body";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:8:"FUNCTION";}}s:5:"first";i:0;s:4:"last";i:11;}}}s:6:"errors";a:0:{}} \ No newline at end of file
+a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:10:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"FUNCTION";s:5:"value";s:8:"FUNCTION";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:15;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"test";s:5:"value";s:4:"test";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:16;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:20;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:21;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:22;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"RETURNS";s:5:"value";s:7:"RETURNS";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:23;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:10;s:3:"idx";i:12;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:4:"test";s:6:"column";N;s:4:"expr";s:4:"test";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}s:6:"fields";N;s:6:"return";N;s:10:"parameters";a:0:{}s:4:"body";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:6;s:8:"FUNCTION";}}s:5:"first";i:0;s:4:"last";i:11;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseCreateProcedure.out b/tests/data/parseCreateProcedure.out
index 60fb751..758b767 100644
--- a/tests/data/parseCreateProcedure.out
+++ b/tests/data/parseCreateProcedure.out
@@ -1,4 +1,4 @@
a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:32:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"PROCEDURE";s:5:"value";s:9:"PROCEDURE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:16;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"P_TEST";s:5:"value";s:6:"P_TEST";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:17;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:23;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"uid";s:5:"value";s:3:"uid";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:24;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:27;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"INT";s:5:"value";s:3:"INT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:28;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:31;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:32;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"BEGIN";s:5:"value";s:5:"BEGIN";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:33;}i:12;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:38;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:43;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:49;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:50;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:58;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"FROM";s:5:"value";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:59;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:63;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"users";s:5:"value";s:5:"users";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:64;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:69;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"WHERE";s:5:"value";s:5:"WHERE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:70;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:75;}i:23;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"ID";s:5:"value";s:2:"ID";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:76;}i:24;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:78;}i:25;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:79;}i:26;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:80;}i:27;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"uid";s:5:"value";s:3:"uid";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:81;}i:28;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:84;}i:29;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
-";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:85;}i:30;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"END";s:5:"value";s:3:"END";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:86;}i:31;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:32;s:3:"idx";i:32;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":1:{s:4:"name";s:6:"P_TEST";}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}s:6:"fields";N;s:6:"return";N;s:10:"parameters";a:1:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":3:{s:4:"name";s:3:"uid";s:5:"inOut";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}}}s:4:"body";a:20:{i:0;r:71;i:1;r:77;i:2;r:83;i:3;r:89;i:4;r:95;i:5;r:101;i:6;r:107;i:7;r:113;i:8;r:119;i:9;r:125;i:10;r:131;i:11;r:137;i:12;r:143;i:13;r:149;i:14;r:155;i:15;r:161;i:16;r:167;i:17;r:173;i:18;r:179;i:19;r:185;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:9:"PROCEDURE";}}s:5:"first";i:0;s:4:"last";i:30;}}}s:6:"errors";a:0:{}} \ No newline at end of file
+";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:85;}i:30;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"END";s:5:"value";s:3:"END";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:86;}i:31;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:32;s:3:"idx";i:32;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:6:"P_TEST";s:6:"column";N;s:4:"expr";s:6:"P_TEST";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}s:6:"fields";N;s:6:"return";N;s:10:"parameters";a:1:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":3:{s:4:"name";s:3:"uid";s:5:"inOut";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}}}s:4:"body";a:20:{i:0;r:71;i:1;r:77;i:2;r:83;i:3;r:89;i:4;r:95;i:5;r:101;i:6;r:107;i:7;r:113;i:8;r:119;i:9;r:125;i:10;r:131;i:11;r:137;i:12;r:143;i:13;r:149;i:14;r:155;i:15;r:161;i:16;r:167;i:17;r:173;i:18;r:179;i:19;r:185;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:6;s:9:"PROCEDURE";}}s:5:"first";i:0;s:4:"last";i:30;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseCreateProcedure2.out b/tests/data/parseCreateProcedure2.out
index db28ce0..7f7480a 100644
--- a/tests/data/parseCreateProcedure2.out
+++ b/tests/data/parseCreateProcedure2.out
@@ -1,4 +1,4 @@
a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:41:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"PROCEDURE";s:5:"value";s:9:"PROCEDURE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:16;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"P_TEST";s:5:"value";s:6:"P_TEST";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:17;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:23;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"IN";s:5:"value";s:2:"IN";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:24;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:26;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"uid";s:5:"value";s:3:"uid";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:27;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:30;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"INT";s:5:"value";s:3:"INT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:31;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:34;}i:12;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:35;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"IN";s:5:"value";s:2:"IN";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:36;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:38;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"unused";s:5:"value";s:6:"unused";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:39;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:45;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"VARCHAR";s:5:"value";s:7:"VARCHAR";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:46;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:53;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:54;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"BEGIN";s:5:"value";s:5:"BEGIN";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:55;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:60;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:65;}i:23;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:71;}i:24;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:72;}i:25;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:80;}i:26;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"FROM";s:5:"value";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:81;}i:27;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:85;}i:28;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"users";s:5:"value";s:5:"users";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:86;}i:29;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:91;}i:30;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"WHERE";s:5:"value";s:5:"WHERE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:92;}i:31;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:97;}i:32;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"ID";s:5:"value";s:2:"ID";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:98;}i:33;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:100;}i:34;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:101;}i:35;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:102;}i:36;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"uid";s:5:"value";s:3:"uid";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:103;}i:37;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:106;}i:38;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
-";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:107;}i:39;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"END";s:5:"value";s:3:"END";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:108;}i:40;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:41;s:3:"idx";i:41;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":1:{s:4:"name";s:6:"P_TEST";}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}s:6:"fields";N;s:6:"return";N;s:10:"parameters";a:2:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":3:{s:4:"name";s:3:"uid";s:5:"inOut";s:2:"IN";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}}i:1;O:36:"SqlParser\Fragments\ParamDefFragment":3:{s:4:"name";s:6:"unused";s:5:"inOut";s:2:"IN";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"VARCHAR";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}}}s:4:"body";a:20:{i:0;r:125;i:1;r:131;i:2;r:137;i:3;r:143;i:4;r:149;i:5;r:155;i:6;r:161;i:7;r:167;i:8;r:173;i:9;r:179;i:10;r:185;i:11;r:191;i:12;r:197;i:13;r:203;i:14;r:209;i:15;r:215;i:16;r:221;i:17;r:227;i:18;r:233;i:19;r:239;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:9:"PROCEDURE";}}s:5:"first";i:0;s:4:"last";i:39;}}}s:6:"errors";a:0:{}} \ No newline at end of file
+";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:107;}i:39;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"END";s:5:"value";s:3:"END";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:108;}i:40;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:41;s:3:"idx";i:41;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:6:"P_TEST";s:6:"column";N;s:4:"expr";s:6:"P_TEST";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}s:6:"fields";N;s:6:"return";N;s:10:"parameters";a:2:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":3:{s:4:"name";s:3:"uid";s:5:"inOut";s:2:"IN";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}}i:1;O:36:"SqlParser\Fragments\ParamDefFragment":3:{s:4:"name";s:6:"unused";s:5:"inOut";s:2:"IN";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"VARCHAR";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}}}s:4:"body";a:20:{i:0;r:125;i:1;r:131;i:2;r:137;i:3;r:143;i:4;r:149;i:5;r:155;i:6;r:161;i:7;r:167;i:8;r:173;i:9;r:179;i:10;r:185;i:11;r:191;i:12;r:197;i:13;r:203;i:14;r:209;i:15;r:215;i:16;r:221;i:17;r:227;i:18;r:233;i:19;r:239;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:6;s:9:"PROCEDURE";}}s:5:"first";i:0;s:4:"last";i:39;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseCreateTable.out b/tests/data/parseCreateTable.out
index 40209d1..848cb96 100644
--- a/tests/data/parseCreateTable.out
+++ b/tests/data/parseCreateTable.out
@@ -1,7 +1,7 @@
-a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:65:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"TABLE";s:5:"value";s:5:"TABLE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:12;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"IF NOT EXISTS";s:5:"value";s:13:"IF NOT EXISTS";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:13;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:26;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"users";s:5:"value";s:5:"users";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:27;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:32;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:33;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
- ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:34;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`id`";s:5:"value";s:2:"id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:39;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:43;}i:12;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"INT";s:5:"value";s:3:"INT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:44;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:47;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:48;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:56;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:14:"AUTO_INCREMENT";s:5:"value";s:14:"AUTO_INCREMENT";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:57;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:71;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
+a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:65:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"TABLE";s:5:"value";s:5:"TABLE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:12;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"IF NOT EXISTS";s:5:"value";s:13:"IF NOT EXISTS";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:13;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:26;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"users";s:5:"value";s:5:"users";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:27;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:32;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:33;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:34;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`id`";s:5:"value";s:2:"id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:39;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:43;}i:12;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"INT";s:5:"value";s:3:"INT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:44;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:47;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:48;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:56;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:14:"AUTO_INCREMENT";s:5:"value";s:14:"AUTO_INCREMENT";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:57;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:71;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:72;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:77;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:85;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"VARCHAR";s:5:"value";s:7:"VARCHAR";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:86;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:93;}i:23;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"64";s:5:"value";i:64;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:94;}i:24;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:96;}i:25;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:97;}i:26;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"NULL";s:5:"value";s:4:"NULL";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:98;}i:27;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:102;}i:28;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:103;}i:29;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`password`";s:5:"value";s:8:"password";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:108;}i:30;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:118;}i:31;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"VARCHAR";s:5:"value";s:7:"VARCHAR";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:119;}i:32;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:126;}i:33;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"256";s:5:"value";i:256;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:127;}i:34;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:130;}i:35;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:131;}i:36;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"DEFAULT";s:5:"value";s:7:"DEFAULT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:132;}i:37;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:139;}i:38;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"'123456'";s:5:"value";s:6:"123456";s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:140;}i:39;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:148;}i:40;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
- ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:149;}i:41;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"CONSTRAINT";s:5:"value";s:10:"CONSTRAINT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:154;}i:42;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:164;}i:43;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"pk_id";s:5:"value";s:5:"pk_id";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:165;}i:44;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:170;}i:45;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"PRIMARY KEY";s:5:"value";s:11:"PRIMARY KEY";s:4:"type";i:1;s:5:"flags";i:21;s:8:"position";i:171;}i:46;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:182;}i:47;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:183;}i:48;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`id`";s:5:"value";s:2:"id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:184;}i:49;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:188;}i:50;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:189;}i:51;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:149;}i:41;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"CONSTRAINT";s:5:"value";s:10:"CONSTRAINT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:154;}i:42;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:164;}i:43;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"pk_id";s:5:"value";s:5:"pk_id";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:165;}i:44;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:170;}i:45;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"PRIMARY KEY";s:5:"value";s:11:"PRIMARY KEY";s:4:"type";i:1;s:5:"flags";i:23;s:8:"position";i:171;}i:46;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:182;}i:47;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:183;}i:48;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`id`";s:5:"value";s:2:"id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:184;}i:49;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:188;}i:50;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:189;}i:51;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:190;}i:52;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"UNIQUE";s:5:"value";s:6:"UNIQUE";s:4:"type";i:1;s:5:"flags";i:19;s:8:"position";i:195;}i:53;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:201;}i:54;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:202;}i:55;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:203;}i:56;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:211;}i:57;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
-";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:212;}i:58;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:213;}i:59;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:214;}i:60;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"ENGINE";s:5:"value";s:6:"ENGINE";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:215;}i:61;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:221;}i:62;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"InnoDB";s:5:"value";s:6:"InnoDB";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:222;}i:63;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:228;}i:64;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:65;s:3:"idx";i:65;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":1:{s:4:"name";s:5:"users";}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;a:2:{s:4:"name";s:6:"ENGINE";s:5:"value";s:6:"InnoDB";}}}s:6:"fields";a:5:{i:0;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:2:"id";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:1;s:8:"NOT NULL";i:3;s:14:"AUTO_INCREMENT";}}}i:1;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:8:"username";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"VARCHAR";s:10:"parameters";a:1:{i:0;i:64;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:4:"NULL";}}}i:2;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:8:"password";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"VARCHAR";s:10:"parameters";a:1:{i:0;i:256;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:2;a:2:{s:4:"name";s:7:"DEFAULT";s:5:"value";s:6:"123456";}}}}i:3;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:5:"pk_id";s:12:"isConstraint";b:1;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";N;s:7:"columns";a:1:{i:0;s:2:"id";}s:4:"type";s:11:"PRIMARY KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";N;s:7:"options";N;}i:4;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";N;s:12:"isConstraint";N;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";N;s:7:"columns";a:1:{i:0;s:8:"username";}s:4:"type";s:6:"UNIQUE";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";N;s:7:"options";N;}}s:6:"return";N;s:10:"parameters";N;s:4:"body";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:1;s:5:"TABLE";i:3;s:13:"IF NOT EXISTS";}}s:5:"first";i:0;s:4:"last";i:62;}}}s:6:"errors";a:0:{}} \ No newline at end of file
+";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:212;}i:58;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:213;}i:59;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:214;}i:60;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"ENGINE";s:5:"value";s:6:"ENGINE";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:215;}i:61;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:221;}i:62;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"InnoDB";s:5:"value";s:6:"InnoDB";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:222;}i:63;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:228;}i:64;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:65;s:3:"idx";i:65;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:5:"users";s:6:"column";N;s:4:"expr";s:5:"users";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;a:4:{s:4:"name";s:6:"ENGINE";s:5:"equal";b:1;s:5:"value";s:6:"InnoDB";s:6:"value_";s:6:"InnoDB";}}}s:6:"fields";a:5:{i:0;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:2:"id";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:1;s:8:"NOT NULL";i:3;s:14:"AUTO_INCREMENT";}}}i:1;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:8:"username";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"VARCHAR";s:10:"parameters";a:1:{i:0;i:64;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:4:"NULL";}}}i:2;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:8:"password";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"VARCHAR";s:10:"parameters";a:1:{i:0;i:256;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:2;a:4:{s:4:"name";s:7:"DEFAULT";s:5:"equal";b:0;s:5:"value";s:8:"'123456'";s:6:"value_";s:6:"123456";}}}}i:3;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:5:"pk_id";s:12:"isConstraint";b:1;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";N;s:7:"columns";a:1:{i:0;s:2:"id";}s:4:"type";s:11:"PRIMARY KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";N;s:7:"options";N;}i:4;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";N;s:12:"isConstraint";N;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";N;s:7:"columns";a:1:{i:0;s:8:"username";}s:4:"type";s:6:"UNIQUE";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";N;s:7:"options";N;}}s:6:"return";N;s:10:"parameters";N;s:4:"body";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:2;s:13:"IF NOT EXISTS";i:6;s:5:"TABLE";}}s:5:"first";i:0;s:4:"last";i:62;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseCreateTable2.out b/tests/data/parseCreateTable2.out
index f532d03..7c5105c 100644
--- a/tests/data/parseCreateTable2.out
+++ b/tests/data/parseCreateTable2.out
@@ -1,16 +1,16 @@
a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:214:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"TABLE";s:5:"value";s:5:"TABLE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:12;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"`payment`";s:5:"value";s:7:"payment";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:13;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:22;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:23;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
- ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:24;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"`payment_id`";s:5:"value";s:10:"payment_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:27;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:39;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"smallint";s:5:"value";s:8:"SMALLINT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:40;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:48;}i:12;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"5";s:5:"value";i:5;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:49;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:50;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:51;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"unsigned";s:5:"value";s:8:"UNSIGNED";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:52;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:60;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:61;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:69;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:14:"AUTO_INCREMENT";s:5:"value";s:14:"AUTO_INCREMENT";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:70;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:84;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
- ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:85;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`customer_id`";s:5:"value";s:11:"customer_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:88;}i:23;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:101;}i:24;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"smallint";s:5:"value";s:8:"SMALLINT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:102;}i:25;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:110;}i:26;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"5";s:5:"value";i:5;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:111;}i:27;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:112;}i:28;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:113;}i:29;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"unsigned";s:5:"value";s:8:"UNSIGNED";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:114;}i:30;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:122;}i:31;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:123;}i:32;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:131;}i:33;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
- ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:132;}i:34;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`staff_id`";s:5:"value";s:8:"staff_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:135;}i:35;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:145;}i:36;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"tinyint";s:5:"value";s:7:"TINYINT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:146;}i:37;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:153;}i:38;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"3";s:5:"value";i:3;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:154;}i:39;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:155;}i:40;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:156;}i:41;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"unsigned";s:5:"value";s:8:"UNSIGNED";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:157;}i:42;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:165;}i:43;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:166;}i:44;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:174;}i:45;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:24;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"`payment_id`";s:5:"value";s:10:"payment_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:27;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:39;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"smallint";s:5:"value";s:8:"SMALLINT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:40;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:48;}i:12;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"5";s:5:"value";i:5;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:49;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:50;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:51;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"unsigned";s:5:"value";s:8:"UNSIGNED";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:52;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:60;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:61;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:69;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:14:"AUTO_INCREMENT";s:5:"value";s:14:"AUTO_INCREMENT";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:70;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:84;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:85;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`customer_id`";s:5:"value";s:11:"customer_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:88;}i:23;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:101;}i:24;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"smallint";s:5:"value";s:8:"SMALLINT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:102;}i:25;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:110;}i:26;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"5";s:5:"value";i:5;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:111;}i:27;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:112;}i:28;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:113;}i:29;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"unsigned";s:5:"value";s:8:"UNSIGNED";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:114;}i:30;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:122;}i:31;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:123;}i:32;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:131;}i:33;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:132;}i:34;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`staff_id`";s:5:"value";s:8:"staff_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:135;}i:35;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:145;}i:36;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"tinyint";s:5:"value";s:7:"TINYINT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:146;}i:37;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:153;}i:38;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"3";s:5:"value";i:3;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:154;}i:39;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:155;}i:40;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:156;}i:41;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"unsigned";s:5:"value";s:8:"UNSIGNED";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:157;}i:42;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:165;}i:43;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:166;}i:44;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:174;}i:45;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:175;}i:46;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"`rental_id`";s:5:"value";s:9:"rental_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:178;}i:47;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:189;}i:48;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"int";s:5:"value";s:3:"INT";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:190;}i:49;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:193;}i:50;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"11";s:5:"value";i:11;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:194;}i:51;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:196;}i:52;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:197;}i:53;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"DEFAULT";s:5:"value";s:7:"DEFAULT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:198;}i:54;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:205;}i:55;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"NULL";s:5:"value";s:4:"NULL";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:206;}i:56;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:210;}i:57;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
- ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:211;}i:58;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"`amount`";s:5:"value";s:6:"amount";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:214;}i:59;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:222;}i:60;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"decimal";s:5:"value";s:7:"DECIMAL";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:223;}i:61;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:230;}i:62;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"5";s:5:"value";i:5;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:231;}i:63;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:232;}i:64;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"2";s:5:"value";i:2;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:233;}i:65;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:234;}i:66;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:235;}i:67;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:236;}i:68;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:244;}i:69;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
- ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:245;}i:70;O:15:"SqlParser\Token":5:{s:5:"token";s:14:"`payment_date`";s:5:"value";s:12:"payment_date";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:248;}i:71;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:262;}i:72;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"datetime";s:5:"value";s:8:"datetime";s:4:"type";i:1;s:5:"flags";i:9;s:8:"position";i:263;}i:73;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:271;}i:74;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:272;}i:75;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:280;}i:76;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
- ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:281;}i:77;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`last_update`";s:5:"value";s:11:"last_update";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:284;}i:78;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:297;}i:79;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"timestamp";s:5:"value";s:9:"timestamp";s:4:"type";i:1;s:5:"flags";i:41;s:8:"position";i:298;}i:80;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:307;}i:81;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:308;}i:82;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:316;}i:83;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"DEFAULT";s:5:"value";s:7:"DEFAULT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:317;}i:84;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:324;}i:85;O:15:"SqlParser\Token":5:{s:5:"token";s:17:"CURRENT_TIMESTAMP";s:5:"value";s:17:"CURRENT_TIMESTAMP";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:325;}i:86;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:342;}i:87;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"ON UPDATE";s:5:"value";s:9:"ON UPDATE";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:343;}i:88;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:352;}i:89;O:15:"SqlParser\Token":5:{s:5:"token";s:17:"CURRENT_TIMESTAMP";s:5:"value";s:17:"CURRENT_TIMESTAMP";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:353;}i:90;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:370;}i:91;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
- ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:371;}i:92;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"PRIMARY KEY";s:5:"value";s:11:"PRIMARY KEY";s:4:"type";i:1;s:5:"flags";i:21;s:8:"position";i:374;}i:93;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:385;}i:94;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:386;}i:95;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"`payment_id`";s:5:"value";s:10:"payment_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:387;}i:96;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:399;}i:97;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:400;}i:98;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:211;}i:58;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"`amount`";s:5:"value";s:6:"amount";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:214;}i:59;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:222;}i:60;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"decimal";s:5:"value";s:7:"DECIMAL";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:223;}i:61;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:230;}i:62;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"5";s:5:"value";i:5;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:231;}i:63;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:232;}i:64;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"2";s:5:"value";i:2;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:233;}i:65;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:234;}i:66;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:235;}i:67;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:236;}i:68;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:244;}i:69;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:245;}i:70;O:15:"SqlParser\Token":5:{s:5:"token";s:14:"`payment_date`";s:5:"value";s:12:"payment_date";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:248;}i:71;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:262;}i:72;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"datetime";s:5:"value";s:8:"datetime";s:4:"type";i:1;s:5:"flags";i:9;s:8:"position";i:263;}i:73;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:271;}i:74;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:272;}i:75;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:280;}i:76;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:281;}i:77;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`last_update`";s:5:"value";s:11:"last_update";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:284;}i:78;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:297;}i:79;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"timestamp";s:5:"value";s:9:"timestamp";s:4:"type";i:1;s:5:"flags";i:41;s:8:"position";i:298;}i:80;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:307;}i:81;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"NOT NULL";s:5:"value";s:8:"NOT NULL";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:308;}i:82;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:316;}i:83;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"DEFAULT";s:5:"value";s:7:"DEFAULT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:317;}i:84;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:324;}i:85;O:15:"SqlParser\Token":5:{s:5:"token";s:17:"CURRENT_TIMESTAMP";s:5:"value";s:17:"CURRENT_TIMESTAMP";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:325;}i:86;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:342;}i:87;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"ON UPDATE";s:5:"value";s:9:"ON UPDATE";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:343;}i:88;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:352;}i:89;O:15:"SqlParser\Token":5:{s:5:"token";s:17:"CURRENT_TIMESTAMP";s:5:"value";s:17:"CURRENT_TIMESTAMP";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:353;}i:90;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:370;}i:91;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:371;}i:92;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"PRIMARY KEY";s:5:"value";s:11:"PRIMARY KEY";s:4:"type";i:1;s:5:"flags";i:23;s:8:"position";i:374;}i:93;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:385;}i:94;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:386;}i:95;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"`payment_id`";s:5:"value";s:10:"payment_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:387;}i:96;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:399;}i:97;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:400;}i:98;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:401;}i:99;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"KEY";s:5:"value";s:3:"KEY";s:4:"type";i:1;s:5:"flags";i:19;s:8:"position";i:404;}i:100;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:407;}i:101;O:15:"SqlParser\Token":5:{s:5:"token";s:17:"`idx_fk_staff_id`";s:5:"value";s:15:"idx_fk_staff_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:408;}i:102;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:425;}i:103;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:426;}i:104;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`staff_id`";s:5:"value";s:8:"staff_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:427;}i:105;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:437;}i:106;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:438;}i:107;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:439;}i:108;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"KEY";s:5:"value";s:3:"KEY";s:4:"type";i:1;s:5:"flags";i:19;s:8:"position";i:442;}i:109;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:445;}i:110;O:15:"SqlParser\Token":5:{s:5:"token";s:20:"`idx_fk_customer_id`";s:5:"value";s:18:"idx_fk_customer_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:446;}i:111;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:466;}i:112;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:467;}i:113;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`customer_id`";s:5:"value";s:11:"customer_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:468;}i:114;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:481;}i:115;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:482;}i:116;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:483;}i:117;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"KEY";s:5:"value";s:3:"KEY";s:4:"type";i:1;s:5:"flags";i:19;s:8:"position";i:486;}i:118;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:489;}i:119;O:15:"SqlParser\Token":5:{s:5:"token";s:19:"`fk_payment_rental`";s:5:"value";s:17:"fk_payment_rental";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:490;}i:120;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:509;}i:121;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:510;}i:122;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"`rental_id`";s:5:"value";s:9:"rental_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:511;}i:123;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:522;}i:124;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:523;}i:125;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
- ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:524;}i:126;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"CONSTRAINT";s:5:"value";s:10:"CONSTRAINT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:527;}i:127;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:537;}i:128;O:15:"SqlParser\Token":5:{s:5:"token";s:21:"`fk_payment_customer`";s:5:"value";s:19:"fk_payment_customer";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:538;}i:129;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:559;}i:130;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"FOREIGN KEY";s:5:"value";s:11:"FOREIGN KEY";s:4:"type";i:1;s:5:"flags";i:21;s:8:"position";i:560;}i:131;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:571;}i:132;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:572;}i:133;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`customer_id`";s:5:"value";s:11:"customer_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:573;}i:134;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:586;}i:135;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:587;}i:136;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"REFERENCES";s:5:"value";s:10:"REFERENCES";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:588;}i:137;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:598;}i:138;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`customer`";s:5:"value";s:8:"customer";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:599;}i:139;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:609;}i:140;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:610;}i:141;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`customer_id`";s:5:"value";s:11:"customer_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:611;}i:142;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:624;}i:143;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:625;}i:144;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"ON UPDATE";s:5:"value";s:9:"ON UPDATE";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:626;}i:145;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:635;}i:146;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"CASCADE";s:5:"value";s:7:"CASCADE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:636;}i:147;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:643;}i:148;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
- ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:644;}i:149;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"CONSTRAINT";s:5:"value";s:10:"CONSTRAINT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:647;}i:150;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:657;}i:151;O:15:"SqlParser\Token":5:{s:5:"token";s:19:"`fk_payment_rental`";s:5:"value";s:17:"fk_payment_rental";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:658;}i:152;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:677;}i:153;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"FOREIGN KEY";s:5:"value";s:11:"FOREIGN KEY";s:4:"type";i:1;s:5:"flags";i:21;s:8:"position";i:678;}i:154;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:689;}i:155;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:690;}i:156;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"`rental_id`";s:5:"value";s:9:"rental_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:691;}i:157;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:702;}i:158;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:703;}i:159;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"REFERENCES";s:5:"value";s:10:"REFERENCES";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:704;}i:160;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:714;}i:161;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"`rental`";s:5:"value";s:6:"rental";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:715;}i:162;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:723;}i:163;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:724;}i:164;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"`rental_id`";s:5:"value";s:9:"rental_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:725;}i:165;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:736;}i:166;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:737;}i:167;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"ON DELETE";s:5:"value";s:9:"ON DELETE";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:738;}i:168;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:747;}i:169;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"SET NULL";s:5:"value";s:8:"SET NULL";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:748;}i:170;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:756;}i:171;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"ON UPDATE";s:5:"value";s:9:"ON UPDATE";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:757;}i:172;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:766;}i:173;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"CASCADE";s:5:"value";s:7:"CASCADE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:767;}i:174;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:774;}i:175;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
- ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:775;}i:176;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"CONSTRAINT";s:5:"value";s:10:"CONSTRAINT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:778;}i:177;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:788;}i:178;O:15:"SqlParser\Token":5:{s:5:"token";s:18:"`fk_payment_staff`";s:5:"value";s:16:"fk_payment_staff";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:789;}i:179;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:807;}i:180;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"FOREIGN KEY";s:5:"value";s:11:"FOREIGN KEY";s:4:"type";i:1;s:5:"flags";i:21;s:8:"position";i:808;}i:181;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:819;}i:182;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:820;}i:183;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`staff_id`";s:5:"value";s:8:"staff_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:821;}i:184;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:831;}i:185;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:832;}i:186;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"REFERENCES";s:5:"value";s:10:"REFERENCES";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:833;}i:187;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:843;}i:188;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"`staff`";s:5:"value";s:5:"staff";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:844;}i:189;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:851;}i:190;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:852;}i:191;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`staff_id`";s:5:"value";s:8:"staff_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:853;}i:192;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:863;}i:193;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:864;}i:194;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"ON UPDATE";s:5:"value";s:9:"ON UPDATE";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:865;}i:195;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:874;}i:196;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"CASCADE";s:5:"value";s:7:"CASCADE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:875;}i:197;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
-";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:882;}i:198;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:883;}i:199;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:884;}i:200;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"ENGINE";s:5:"value";s:6:"ENGINE";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:885;}i:201;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:891;}i:202;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"InnoDB";s:5:"value";s:6:"InnoDB";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:892;}i:203;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:898;}i:204;O:15:"SqlParser\Token":5:{s:5:"token";s:14:"AUTO_INCREMENT";s:5:"value";s:14:"AUTO_INCREMENT";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:899;}i:205;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:913;}i:206;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"16050";s:5:"value";i:16050;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:914;}i:207;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:919;}i:208;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"DEFAULT";s:5:"value";s:7:"DEFAULT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:920;}i:209;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:927;}i:210;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"CHARSET";s:5:"value";s:7:"CHARSET";s:4:"type";i:1;s:5:"flags";i:33;s:8:"position";i:928;}i:211;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:935;}i:212;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"utf8";s:5:"value";s:4:"utf8";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:936;}i:213;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:214;s:3:"idx";i:214;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":1:{s:4:"name";s:7:"payment";}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:1;a:2:{s:4:"name";s:6:"ENGINE";s:5:"value";s:6:"InnoDB";}i:2;a:2:{s:4:"name";s:14:"AUTO_INCREMENT";s:5:"value";s:5:"16050";}}}s:6:"fields";a:14:{i:0;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:10:"payment_id";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:8:"SMALLINT";s:10:"parameters";a:1:{i:0;i:5;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:4;s:8:"UNSIGNED";}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:1;s:8:"NOT NULL";i:3;s:14:"AUTO_INCREMENT";}}}i:1;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:11:"customer_id";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:8:"SMALLINT";s:10:"parameters";a:1:{i:0;i:5;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:4;s:8:"UNSIGNED";}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:8:"NOT NULL";}}}i:2;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:8:"staff_id";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"TINYINT";s:10:"parameters";a:1:{i:0;i:3;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:4;s:8:"UNSIGNED";}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:8:"NOT NULL";}}}i:3;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:9:"rental_id";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:1:{i:0;i:11;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:2;a:2:{s:4:"name";s:7:"DEFAULT";s:5:"value";s:4:"NULL";}}}}i:4;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:6:"amount";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"DECIMAL";s:10:"parameters";a:2:{i:0;i:5;i:1;i:2;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:8:"NOT NULL";}}}i:5;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:12:"payment_date";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:8:"DATETIME";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:8:"NOT NULL";}}}i:6;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:11:"last_update";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:9:"TIMESTAMP";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:3:{i:1;s:8:"NOT NULL";i:2;a:2:{s:4:"name";s:7:"DEFAULT";s:5:"value";s:17:"CURRENT_TIMESTAMP";}i:7;a:2:{s:4:"name";s:9:"ON UPDATE";s:5:"value";s:17:"CURRENT_TIMESTAMP";}}}}i:7;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";N;s:12:"isConstraint";N;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";N;s:7:"columns";a:1:{i:0;s:10:"payment_id";}s:4:"type";s:11:"PRIMARY KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";N;s:7:"options";N;}i:8;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";N;s:12:"isConstraint";N;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";s:15:"idx_fk_staff_id";s:7:"columns";a:1:{i:0;s:8:"staff_id";}s:4:"type";s:3:"KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";N;s:7:"options";N;}i:9;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";N;s:12:"isConstraint";N;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";s:18:"idx_fk_customer_id";s:7:"columns";a:1:{i:0;s:11:"customer_id";}s:4:"type";s:3:"KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";N;s:7:"options";N;}i:10;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";N;s:12:"isConstraint";N;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";s:17:"fk_payment_rental";s:7:"columns";a:1:{i:0;s:9:"rental_id";}s:4:"type";s:3:"KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";N;s:7:"options";N;}i:11;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:19:"fk_payment_customer";s:12:"isConstraint";b:1;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";N;s:7:"columns";a:1:{i:0;s:11:"customer_id";}s:4:"type";s:11:"FOREIGN KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";O:37:"SqlParser\Fragments\ReferencesKeyword":3:{s:5:"table";s:8:"customer";s:7:"columns";a:1:{i:0;s:11:"customer_id";}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:3;a:2:{s:4:"name";s:9:"ON UPDATE";s:5:"value";s:7:"CASCADE";}}}}s:7:"options";N;}i:12;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:17:"fk_payment_rental";s:12:"isConstraint";b:1;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";N;s:7:"columns";a:1:{i:0;s:9:"rental_id";}s:4:"type";s:11:"FOREIGN KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";O:37:"SqlParser\Fragments\ReferencesKeyword":3:{s:5:"table";s:6:"rental";s:7:"columns";a:1:{i:0;s:9:"rental_id";}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:2;a:2:{s:4:"name";s:9:"ON DELETE";s:5:"value";s:8:"SET NULL";}i:3;a:2:{s:4:"name";s:9:"ON UPDATE";s:5:"value";s:7:"CASCADE";}}}}s:7:"options";N;}i:13;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:16:"fk_payment_staff";s:12:"isConstraint";b:1;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";N;s:7:"columns";a:1:{i:0;s:8:"staff_id";}s:4:"type";s:11:"FOREIGN KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";O:37:"SqlParser\Fragments\ReferencesKeyword":3:{s:5:"table";s:5:"staff";s:7:"columns";a:1:{i:0;s:8:"staff_id";}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:3;a:2:{s:4:"name";s:9:"ON UPDATE";s:5:"value";s:7:"CASCADE";}}}}s:7:"options";N;}}s:6:"return";N;s:10:"parameters";N;s:4:"body";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:5:"TABLE";}}s:5:"first";i:0;s:4:"last";i:212;}}}s:6:"errors";a:2:{i:0;a:3:{i:0;s:31:"Unrecognized keyword "DEFAULT".";i:1;r:1253;i:2;i:0;}i:1;a:3:{i:0;s:31:"Unrecognized keyword "CHARSET".";i:1;r:1265;i:2;i:0;}}} \ No newline at end of file
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:524;}i:126;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"CONSTRAINT";s:5:"value";s:10:"CONSTRAINT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:527;}i:127;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:537;}i:128;O:15:"SqlParser\Token":5:{s:5:"token";s:21:"`fk_payment_customer`";s:5:"value";s:19:"fk_payment_customer";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:538;}i:129;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:559;}i:130;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"FOREIGN KEY";s:5:"value";s:11:"FOREIGN KEY";s:4:"type";i:1;s:5:"flags";i:23;s:8:"position";i:560;}i:131;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:571;}i:132;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:572;}i:133;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`customer_id`";s:5:"value";s:11:"customer_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:573;}i:134;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:586;}i:135;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:587;}i:136;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"REFERENCES";s:5:"value";s:10:"REFERENCES";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:588;}i:137;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:598;}i:138;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`customer`";s:5:"value";s:8:"customer";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:599;}i:139;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:609;}i:140;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:610;}i:141;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`customer_id`";s:5:"value";s:11:"customer_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:611;}i:142;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:624;}i:143;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:625;}i:144;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"ON UPDATE";s:5:"value";s:9:"ON UPDATE";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:626;}i:145;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:635;}i:146;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"CASCADE";s:5:"value";s:7:"CASCADE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:636;}i:147;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:643;}i:148;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:644;}i:149;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"CONSTRAINT";s:5:"value";s:10:"CONSTRAINT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:647;}i:150;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:657;}i:151;O:15:"SqlParser\Token":5:{s:5:"token";s:19:"`fk_payment_rental`";s:5:"value";s:17:"fk_payment_rental";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:658;}i:152;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:677;}i:153;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"FOREIGN KEY";s:5:"value";s:11:"FOREIGN KEY";s:4:"type";i:1;s:5:"flags";i:23;s:8:"position";i:678;}i:154;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:689;}i:155;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:690;}i:156;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"`rental_id`";s:5:"value";s:9:"rental_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:691;}i:157;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:702;}i:158;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:703;}i:159;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"REFERENCES";s:5:"value";s:10:"REFERENCES";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:704;}i:160;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:714;}i:161;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"`rental`";s:5:"value";s:6:"rental";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:715;}i:162;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:723;}i:163;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:724;}i:164;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"`rental_id`";s:5:"value";s:9:"rental_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:725;}i:165;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:736;}i:166;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:737;}i:167;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"ON DELETE";s:5:"value";s:9:"ON DELETE";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:738;}i:168;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:747;}i:169;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"SET NULL";s:5:"value";s:8:"SET NULL";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:748;}i:170;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:756;}i:171;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"ON UPDATE";s:5:"value";s:9:"ON UPDATE";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:757;}i:172;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:766;}i:173;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"CASCADE";s:5:"value";s:7:"CASCADE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:767;}i:174;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:774;}i:175;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"
+ ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:775;}i:176;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"CONSTRAINT";s:5:"value";s:10:"CONSTRAINT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:778;}i:177;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:788;}i:178;O:15:"SqlParser\Token":5:{s:5:"token";s:18:"`fk_payment_staff`";s:5:"value";s:16:"fk_payment_staff";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:789;}i:179;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:807;}i:180;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"FOREIGN KEY";s:5:"value";s:11:"FOREIGN KEY";s:4:"type";i:1;s:5:"flags";i:23;s:8:"position";i:808;}i:181;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:819;}i:182;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:820;}i:183;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`staff_id`";s:5:"value";s:8:"staff_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:821;}i:184;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:831;}i:185;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:832;}i:186;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"REFERENCES";s:5:"value";s:10:"REFERENCES";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:833;}i:187;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:843;}i:188;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"`staff`";s:5:"value";s:5:"staff";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:844;}i:189;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:851;}i:190;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:852;}i:191;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`staff_id`";s:5:"value";s:8:"staff_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:853;}i:192;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:863;}i:193;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:864;}i:194;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"ON UPDATE";s:5:"value";s:9:"ON UPDATE";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:865;}i:195;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:874;}i:196;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"CASCADE";s:5:"value";s:7:"CASCADE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:875;}i:197;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
+";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:882;}i:198;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:883;}i:199;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:884;}i:200;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"ENGINE";s:5:"value";s:6:"ENGINE";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:885;}i:201;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:891;}i:202;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"InnoDB";s:5:"value";s:6:"InnoDB";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:892;}i:203;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:898;}i:204;O:15:"SqlParser\Token":5:{s:5:"token";s:14:"AUTO_INCREMENT";s:5:"value";s:14:"AUTO_INCREMENT";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:899;}i:205;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:913;}i:206;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"16050";s:5:"value";i:16050;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:914;}i:207;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:919;}i:208;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"DEFAULT";s:5:"value";s:7:"DEFAULT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:920;}i:209;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:927;}i:210;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"CHARSET";s:5:"value";s:7:"CHARSET";s:4:"type";i:1;s:5:"flags";i:33;s:8:"position";i:928;}i:211;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:935;}i:212;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"utf8";s:5:"value";s:4:"utf8";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:936;}i:213;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:214;s:3:"idx";i:215;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:7:"payment";s:6:"column";N;s:4:"expr";s:9:"`payment`";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:1;a:4:{s:4:"name";s:6:"ENGINE";s:5:"equal";b:1;s:5:"value";s:6:"InnoDB";s:6:"value_";s:6:"InnoDB";}i:2;a:4:{s:4:"name";s:14:"AUTO_INCREMENT";s:5:"equal";b:1;s:5:"value";s:5:"16050";s:6:"value_";s:5:"16050";}}}s:6:"fields";a:14:{i:0;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:10:"payment_id";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:8:"SMALLINT";s:10:"parameters";a:1:{i:0;i:5;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:4;s:8:"UNSIGNED";}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:1;s:8:"NOT NULL";i:3;s:14:"AUTO_INCREMENT";}}}i:1;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:11:"customer_id";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:8:"SMALLINT";s:10:"parameters";a:1:{i:0;i:5;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:4;s:8:"UNSIGNED";}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:8:"NOT NULL";}}}i:2;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:8:"staff_id";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"TINYINT";s:10:"parameters";a:1:{i:0;i:3;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:4;s:8:"UNSIGNED";}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:8:"NOT NULL";}}}i:3;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:9:"rental_id";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:3:"INT";s:10:"parameters";a:1:{i:0;i:11;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:2;a:4:{s:4:"name";s:7:"DEFAULT";s:5:"equal";b:0;s:5:"value";s:4:"NULL";s:6:"value_";s:4:"NULL";}}}}i:4;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:6:"amount";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"DECIMAL";s:10:"parameters";a:2:{i:0;i:5;i:1;i:2;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:8:"NOT NULL";}}}i:5;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:12:"payment_date";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:8:"DATETIME";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:8:"NOT NULL";}}}i:6;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:11:"last_update";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:9:"TIMESTAMP";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:3:{i:1;s:8:"NOT NULL";i:2;a:4:{s:4:"name";s:7:"DEFAULT";s:5:"equal";b:0;s:5:"value";s:17:"CURRENT_TIMESTAMP";s:6:"value_";s:17:"CURRENT_TIMESTAMP";}i:7;a:4:{s:4:"name";s:9:"ON UPDATE";s:5:"equal";b:0;s:5:"value";s:17:"CURRENT_TIMESTAMP";s:6:"value_";s:17:"CURRENT_TIMESTAMP";}}}}i:7;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";N;s:12:"isConstraint";N;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";N;s:7:"columns";a:1:{i:0;s:10:"payment_id";}s:4:"type";s:11:"PRIMARY KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";N;s:7:"options";N;}i:8;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";N;s:12:"isConstraint";N;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";s:15:"idx_fk_staff_id";s:7:"columns";a:1:{i:0;s:8:"staff_id";}s:4:"type";s:3:"KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";N;s:7:"options";N;}i:9;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";N;s:12:"isConstraint";N;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";s:18:"idx_fk_customer_id";s:7:"columns";a:1:{i:0;s:11:"customer_id";}s:4:"type";s:3:"KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";N;s:7:"options";N;}i:10;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";N;s:12:"isConstraint";N;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";s:17:"fk_payment_rental";s:7:"columns";a:1:{i:0;s:9:"rental_id";}s:4:"type";s:3:"KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";N;s:7:"options";N;}i:11;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:19:"fk_payment_customer";s:12:"isConstraint";b:1;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";N;s:7:"columns";a:1:{i:0;s:11:"customer_id";}s:4:"type";s:11:"FOREIGN KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";O:37:"SqlParser\Fragments\ReferencesKeyword":3:{s:5:"table";s:8:"customer";s:7:"columns";a:1:{i:0;s:11:"customer_id";}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:3;a:4:{s:4:"name";s:9:"ON UPDATE";s:5:"equal";b:0;s:5:"value";s:7:"CASCADE";s:6:"value_";s:7:"CASCADE";}}}}s:7:"options";N;}i:12;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:17:"fk_payment_rental";s:12:"isConstraint";b:1;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";N;s:7:"columns";a:1:{i:0;s:9:"rental_id";}s:4:"type";s:11:"FOREIGN KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";O:37:"SqlParser\Fragments\ReferencesKeyword":3:{s:5:"table";s:6:"rental";s:7:"columns";a:1:{i:0;s:9:"rental_id";}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:2;a:4:{s:4:"name";s:9:"ON DELETE";s:5:"equal";b:0;s:5:"value";s:8:"SET NULL";s:6:"value_";s:8:"SET NULL";}i:3;a:4:{s:4:"name";s:9:"ON UPDATE";s:5:"equal";b:0;s:5:"value";s:7:"CASCADE";s:6:"value_";s:7:"CASCADE";}}}}s:7:"options";N;}i:13;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:16:"fk_payment_staff";s:12:"isConstraint";b:1;s:4:"type";N;s:3:"key";O:31:"SqlParser\Fragments\KeyFragment":4:{s:4:"name";N;s:7:"columns";a:1:{i:0;s:8:"staff_id";}s:4:"type";s:11:"FOREIGN KEY";s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:10:"references";O:37:"SqlParser\Fragments\ReferencesKeyword":3:{s:5:"table";s:5:"staff";s:7:"columns";a:1:{i:0;s:8:"staff_id";}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:3;a:4:{s:4:"name";s:9:"ON UPDATE";s:5:"equal";b:0;s:5:"value";s:7:"CASCADE";s:6:"value_";s:7:"CASCADE";}}}}s:7:"options";N;}}s:6:"return";N;s:10:"parameters";N;s:4:"body";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:6;s:5:"TABLE";}}s:5:"first";i:0;s:4:"last";i:207;}}}s:6:"errors";a:1:{i:0;a:3:{i:0;s:38:"Unrecognized statement type "DEFAULT".";i:1;r:1253;i:2;i:0;}}} \ No newline at end of file
diff --git a/tests/data/parseCreateTableErr1.out b/tests/data/parseCreateTableErr1.out
index 2337079..095a535 100644
--- a/tests/data/parseCreateTableErr1.out
+++ b/tests/data/parseCreateTableErr1.out
@@ -1,3 +1,3 @@
-a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:21:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"TABLE";s:5:"value";s:5:"TABLE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:12;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"IF NOT EXISTS";s:5:"value";s:13:"IF NOT EXISTS";s:4:"type";i:1;s:5:"flags";i:5;s:8:"position";i:13;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:26;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"users";s:5:"value";s:5:"users";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:27;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:32;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:33;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
+a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:21:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"TABLE";s:5:"value";s:5:"TABLE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:12;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"IF NOT EXISTS";s:5:"value";s:13:"IF NOT EXISTS";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:13;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:26;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"users";s:5:"value";s:5:"users";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:27;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:32;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:33;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:34;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`id`";s:5:"value";s:2:"id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:39;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:43;}i:12;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"UNKNOWN";s:5:"value";s:7:"UNKNOWN";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:44;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
-";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:51;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:52;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:53;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"ENGINE";s:5:"value";s:6:"ENGINE";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:54;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:60;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"InnoDB";s:5:"value";s:6:"InnoDB";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:61;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:67;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:21;s:3:"idx";i:21;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":1:{s:4:"name";s:5:"users";}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;a:2:{s:4:"name";s:6:"ENGINE";s:5:"value";s:6:"InnoDB";}}}s:6:"fields";a:1:{i:0;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:2:"id";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"UNKNOWN";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}}s:6:"return";N;s:10:"parameters";N;s:4:"body";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:1;s:5:"TABLE";i:3;s:13:"IF NOT EXISTS";}}s:5:"first";i:0;s:4:"last";i:18;}}}s:6:"errors";a:1:{i:0;a:3:{i:0;s:23:"Unrecognized data type.";i:1;r:77;i:2;i:0;}}} \ No newline at end of file
+";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:51;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:52;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:53;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"ENGINE";s:5:"value";s:6:"ENGINE";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:54;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:60;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"InnoDB";s:5:"value";s:6:"InnoDB";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:61;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:67;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:21;s:3:"idx";i:21;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:5:"users";s:6:"column";N;s:4:"expr";s:5:"users";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;a:4:{s:4:"name";s:6:"ENGINE";s:5:"equal";b:1;s:5:"value";s:6:"InnoDB";s:6:"value_";s:6:"InnoDB";}}}s:6:"fields";a:1:{i:0;O:36:"SqlParser\Fragments\FieldDefFragment":6:{s:4:"name";s:2:"id";s:12:"isConstraint";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":3:{s:4:"name";s:7:"UNKNOWN";s:10:"parameters";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}s:3:"key";N;s:10:"references";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:0:{}}}}s:6:"return";N;s:10:"parameters";N;s:4:"body";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:2;s:13:"IF NOT EXISTS";i:6;s:5:"TABLE";}}s:5:"first";i:0;s:4:"last";i:18;}}}s:6:"errors";a:1:{i:0;a:3:{i:0;s:23:"Unrecognized data type.";i:1;r:77;i:2;i:0;}}} \ No newline at end of file
diff --git a/tests/data/parseCreateUser.out b/tests/data/parseCreateUser.out
index e9aea56..9d01cd0 100644
--- a/tests/data/parseCreateUser.out
+++ b/tests/data/parseCreateUser.out
@@ -1 +1 @@
-a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:6:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"USER";s:5:"value";s:4:"USER";s:4:"type";i:1;s:5:"flags";i:33;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:11;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"test";s:5:"value";s:4:"test";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:12;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:6;s:3:"idx";i:6;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":1:{s:4:"name";s:4:"test";}s:13:"entityOptions";N;s:6:"fields";N;s:6:"return";N;s:10:"parameters";N;s:4:"body";N;s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:1;s:4:"USER";}}s:5:"first";i:0;s:4:"last";i:4;}}}s:6:"errors";a:0:{}} \ No newline at end of file
+a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:6:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"USER";s:5:"value";s:4:"USER";s:4:"type";i:1;s:5:"flags";i:33;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:11;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"test";s:5:"value";s:4:"test";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:12;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:6;s:3:"idx";i:6;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:4:"test";s:6:"column";N;s:4:"expr";s:4:"test";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";N;s:6:"fields";N;s:6:"return";N;s:10:"parameters";N;s:4:"body";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:6;s:4:"USER";}}s:5:"first";i:0;s:4:"last";i:5;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseCreateView.in b/tests/data/parseCreateView.in
new file mode 100644
index 0000000..1bd25ed
--- /dev/null
+++ b/tests/data/parseCreateView.in
@@ -0,0 +1 @@
+CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY INVOKER VIEW `sakila`.`actor_info` AS select `a`.`actor_id` AS `actor_id`,`a`.`first_name` AS `first_name`,`a`.`last_name` AS `last_name`,group_concat(distinct concat(`c`.`name`,': ',(select group_concat(`f`.`title` order by `f`.`title` ASC separator ', ') from ((`sakila`.`film` `f` join `sakila`.`film_category` `fc` on((`f`.`film_id` = `fc`.`film_id`))) join `sakila`.`film_actor` `fa` on((`f`.`film_id` = `fa`.`film_id`))) where ((`fc`.`category_id` = `c`.`category_id`) and (`fa`.`actor_id` = `a`.`actor_id`)))) order by `c`.`name` ASC separator '; ') AS `film_info` from (((`sakila`.`actor` `a` left join `sakila`.`film_actor` `fa` on((`a`.`actor_id` = `fa`.`actor_id`))) left join `sakila`.`film_category` `fc` on((`fa`.`film_id` = `fc`.`film_id`))) left join `sakila`.`category` `c` on((`fc`.`category_id` = `c`.`category_id`))) group by `a`.`actor_id`,`a`.`first_name`,`a`.`last_name` \ No newline at end of file
diff --git a/tests/data/parseCreateView.out b/tests/data/parseCreateView.out
new file mode 100644
index 0000000..c4634e2
--- /dev/null
+++ b/tests/data/parseCreateView.out
@@ -0,0 +1 @@
+a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:292:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"ALGORITHM";s:5:"value";s:9:"ALGORITHM";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:16;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"UNDEFINED";s:5:"value";s:9:"UNDEFINED";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:17;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:26;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"DEFINER";s:5:"value";s:7:"DEFINER";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:27;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:34;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:18:"`root`@`localhost`";s:5:"value";s:14:"root@localhost";s:4:"type";i:8;s:5:"flags";i:4;s:8:"position";i:35;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:53;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"SQL SECURITY";s:5:"value";s:12:"SQL SECURITY";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:54;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:66;}i:12;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"INVOKER";s:5:"value";s:7:"INVOKER";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:67;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:74;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"VIEW";s:5:"value";s:4:"VIEW";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:75;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:79;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"`sakila`";s:5:"value";s:6:"sakila";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:80;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:88;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"`actor_info`";s:5:"value";s:10:"actor_info";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:89;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:101;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"AS";s:5:"value";s:2:"AS";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:102;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:104;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"select";s:5:"value";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:105;}i:23;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:111;}i:24;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`a`";s:5:"value";s:1:"a";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:112;}i:25;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:115;}i:26;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`actor_id`";s:5:"value";s:8:"actor_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:116;}i:27;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:126;}i:28;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"AS";s:5:"value";s:2:"AS";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:127;}i:29;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:129;}i:30;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`actor_id`";s:5:"value";s:8:"actor_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:130;}i:31;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:140;}i:32;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`a`";s:5:"value";s:1:"a";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:141;}i:33;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:144;}i:34;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"`first_name`";s:5:"value";s:10:"first_name";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:145;}i:35;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:157;}i:36;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"AS";s:5:"value";s:2:"AS";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:158;}i:37;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:160;}i:38;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"`first_name`";s:5:"value";s:10:"first_name";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:161;}i:39;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:173;}i:40;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`a`";s:5:"value";s:1:"a";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:174;}i:41;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:177;}i:42;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"`last_name`";s:5:"value";s:9:"last_name";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:178;}i:43;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:189;}i:44;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"AS";s:5:"value";s:2:"AS";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:190;}i:45;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:192;}i:46;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"`last_name`";s:5:"value";s:9:"last_name";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:193;}i:47;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:204;}i:48;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"group_concat";s:5:"value";s:12:"group_concat";s:4:"type";i:1;s:5:"flags";i:33;s:8:"position";i:205;}i:49;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:217;}i:50;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"distinct";s:5:"value";s:8:"DISTINCT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:218;}i:51;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:226;}i:52;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"concat";s:5:"value";s:6:"concat";s:4:"type";i:1;s:5:"flags";i:33;s:8:"position";i:227;}i:53;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:233;}i:54;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`c`";s:5:"value";s:1:"c";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:234;}i:55;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:237;}i:56;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"`name`";s:5:"value";s:4:"name";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:238;}i:57;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:244;}i:58;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"': '";s:5:"value";s:2:": ";s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:245;}i:59;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:249;}i:60;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:250;}i:61;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"select";s:5:"value";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:251;}i:62;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:257;}i:63;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"group_concat";s:5:"value";s:12:"group_concat";s:4:"type";i:1;s:5:"flags";i:33;s:8:"position";i:258;}i:64;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:270;}i:65;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`f`";s:5:"value";s:1:"f";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:271;}i:66;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:274;}i:67;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"`title`";s:5:"value";s:5:"title";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:275;}i:68;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:282;}i:69;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"order by";s:5:"value";s:8:"ORDER BY";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:283;}i:70;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:291;}i:71;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`f`";s:5:"value";s:1:"f";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:292;}i:72;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:295;}i:73;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"`title`";s:5:"value";s:5:"title";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:296;}i:74;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:303;}i:75;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"ASC";s:5:"value";s:3:"ASC";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:304;}i:76;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:307;}i:77;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"separator";s:5:"value";s:9:"SEPARATOR";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:308;}i:78;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:317;}i:79;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"', '";s:5:"value";s:2:", ";s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:318;}i:80;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:322;}i:81;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:323;}i:82;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"from";s:5:"value";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:324;}i:83;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:328;}i:84;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:329;}i:85;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:330;}i:86;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"`sakila`";s:5:"value";s:6:"sakila";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:331;}i:87;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:339;}i:88;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"`film`";s:5:"value";s:4:"film";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:340;}i:89;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:346;}i:90;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`f`";s:5:"value";s:1:"f";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:347;}i:91;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:350;}i:92;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"join";s:5:"value";s:4:"JOIN";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:351;}i:93;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:355;}i:94;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"`sakila`";s:5:"value";s:6:"sakila";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:356;}i:95;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:364;}i:96;O:15:"SqlParser\Token":5:{s:5:"token";s:15:"`film_category`";s:5:"value";s:13:"film_category";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:365;}i:97;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:380;}i:98;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`fc`";s:5:"value";s:2:"fc";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:381;}i:99;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:385;}i:100;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"on";s:5:"value";s:2:"ON";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:386;}i:101;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:388;}i:102;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:389;}i:103;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`f`";s:5:"value";s:1:"f";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:390;}i:104;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:393;}i:105;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"`film_id`";s:5:"value";s:7:"film_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:394;}i:106;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:403;}i:107;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:404;}i:108;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:405;}i:109;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`fc`";s:5:"value";s:2:"fc";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:406;}i:110;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:410;}i:111;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"`film_id`";s:5:"value";s:7:"film_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:411;}i:112;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:420;}i:113;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:421;}i:114;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:422;}i:115;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:423;}i:116;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"join";s:5:"value";s:4:"JOIN";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:424;}i:117;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:428;}i:118;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"`sakila`";s:5:"value";s:6:"sakila";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:429;}i:119;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:437;}i:120;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"`film_actor`";s:5:"value";s:10:"film_actor";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:438;}i:121;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:450;}i:122;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`fa`";s:5:"value";s:2:"fa";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:451;}i:123;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:455;}i:124;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"on";s:5:"value";s:2:"ON";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:456;}i:125;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:458;}i:126;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:459;}i:127;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`f`";s:5:"value";s:1:"f";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:460;}i:128;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:463;}i:129;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"`film_id`";s:5:"value";s:7:"film_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:464;}i:130;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:473;}i:131;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:474;}i:132;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:475;}i:133;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`fa`";s:5:"value";s:2:"fa";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:476;}i:134;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:480;}i:135;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"`film_id`";s:5:"value";s:7:"film_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:481;}i:136;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:490;}i:137;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:491;}i:138;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:492;}i:139;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:493;}i:140;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"where";s:5:"value";s:5:"WHERE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:494;}i:141;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:499;}i:142;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:500;}i:143;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:501;}i:144;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`fc`";s:5:"value";s:2:"fc";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:502;}i:145;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:506;}i:146;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`category_id`";s:5:"value";s:11:"category_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:507;}i:147;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:520;}i:148;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:521;}i:149;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:522;}i:150;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`c`";s:5:"value";s:1:"c";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:523;}i:151;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:526;}i:152;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`category_id`";s:5:"value";s:11:"category_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:527;}i:153;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:540;}i:154;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:541;}i:155;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"and";s:5:"value";s:3:"AND";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:542;}i:156;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:545;}i:157;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:546;}i:158;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`fa`";s:5:"value";s:2:"fa";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:547;}i:159;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:551;}i:160;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`actor_id`";s:5:"value";s:8:"actor_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:552;}i:161;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:562;}i:162;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:563;}i:163;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:564;}i:164;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`a`";s:5:"value";s:1:"a";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:565;}i:165;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:568;}i:166;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`actor_id`";s:5:"value";s:8:"actor_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:569;}i:167;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:579;}i:168;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:580;}i:169;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:581;}i:170;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:582;}i:171;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:583;}i:172;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"order by";s:5:"value";s:8:"ORDER BY";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:584;}i:173;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:592;}i:174;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`c`";s:5:"value";s:1:"c";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:593;}i:175;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:596;}i:176;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"`name`";s:5:"value";s:4:"name";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:597;}i:177;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:603;}i:178;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"ASC";s:5:"value";s:3:"ASC";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:604;}i:179;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:607;}i:180;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"separator";s:5:"value";s:9:"SEPARATOR";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:608;}i:181;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:617;}i:182;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"'; '";s:5:"value";s:2:"; ";s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:618;}i:183;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:622;}i:184;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:623;}i:185;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"AS";s:5:"value";s:2:"AS";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:624;}i:186;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:626;}i:187;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"`film_info`";s:5:"value";s:9:"film_info";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:627;}i:188;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:638;}i:189;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"from";s:5:"value";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:639;}i:190;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:643;}i:191;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:644;}i:192;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:645;}i:193;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:646;}i:194;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"`sakila`";s:5:"value";s:6:"sakila";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:647;}i:195;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:655;}i:196;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"`actor`";s:5:"value";s:5:"actor";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:656;}i:197;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:663;}i:198;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`a`";s:5:"value";s:1:"a";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:664;}i:199;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:667;}i:200;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"left";s:5:"value";s:4:"LEFT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:668;}i:201;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:672;}i:202;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"join";s:5:"value";s:4:"JOIN";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:673;}i:203;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:677;}i:204;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"`sakila`";s:5:"value";s:6:"sakila";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:678;}i:205;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:686;}i:206;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"`film_actor`";s:5:"value";s:10:"film_actor";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:687;}i:207;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:699;}i:208;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`fa`";s:5:"value";s:2:"fa";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:700;}i:209;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:704;}i:210;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"on";s:5:"value";s:2:"ON";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:705;}i:211;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:707;}i:212;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:708;}i:213;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`a`";s:5:"value";s:1:"a";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:709;}i:214;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:712;}i:215;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`actor_id`";s:5:"value";s:8:"actor_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:713;}i:216;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:723;}i:217;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:724;}i:218;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:725;}i:219;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`fa`";s:5:"value";s:2:"fa";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:726;}i:220;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:730;}i:221;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`actor_id`";s:5:"value";s:8:"actor_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:731;}i:222;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:741;}i:223;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:742;}i:224;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:743;}i:225;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:744;}i:226;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"left";s:5:"value";s:4:"LEFT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:745;}i:227;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:749;}i:228;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"join";s:5:"value";s:4:"JOIN";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:750;}i:229;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:754;}i:230;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"`sakila`";s:5:"value";s:6:"sakila";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:755;}i:231;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:763;}i:232;O:15:"SqlParser\Token":5:{s:5:"token";s:15:"`film_category`";s:5:"value";s:13:"film_category";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:764;}i:233;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:779;}i:234;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`fc`";s:5:"value";s:2:"fc";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:780;}i:235;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:784;}i:236;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"on";s:5:"value";s:2:"ON";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:785;}i:237;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:787;}i:238;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:788;}i:239;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`fa`";s:5:"value";s:2:"fa";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:789;}i:240;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:793;}i:241;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"`film_id`";s:5:"value";s:7:"film_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:794;}i:242;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:803;}i:243;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:804;}i:244;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:805;}i:245;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`fc`";s:5:"value";s:2:"fc";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:806;}i:246;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:810;}i:247;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"`film_id`";s:5:"value";s:7:"film_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:811;}i:248;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:820;}i:249;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:821;}i:250;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:822;}i:251;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:823;}i:252;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"left";s:5:"value";s:4:"LEFT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:824;}i:253;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:828;}i:254;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"join";s:5:"value";s:4:"JOIN";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:829;}i:255;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:833;}i:256;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"`sakila`";s:5:"value";s:6:"sakila";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:834;}i:257;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:842;}i:258;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`category`";s:5:"value";s:8:"category";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:843;}i:259;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:853;}i:260;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`c`";s:5:"value";s:1:"c";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:854;}i:261;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:857;}i:262;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"on";s:5:"value";s:2:"ON";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:858;}i:263;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:860;}i:264;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:861;}i:265;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"`fc`";s:5:"value";s:2:"fc";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:862;}i:266;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:866;}i:267;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`category_id`";s:5:"value";s:11:"category_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:867;}i:268;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:880;}i:269;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:881;}i:270;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:882;}i:271;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`c`";s:5:"value";s:1:"c";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:883;}i:272;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:886;}i:273;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"`category_id`";s:5:"value";s:11:"category_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:887;}i:274;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:900;}i:275;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:901;}i:276;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:902;}i:277;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:903;}i:278;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"group by";s:5:"value";s:8:"GROUP BY";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:904;}i:279;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:912;}i:280;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`a`";s:5:"value";s:1:"a";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:913;}i:281;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:916;}i:282;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"`actor_id`";s:5:"value";s:8:"actor_id";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:917;}i:283;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:927;}i:284;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`a`";s:5:"value";s:1:"a";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:928;}i:285;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:931;}i:286;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"`first_name`";s:5:"value";s:10:"first_name";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:932;}i:287;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:944;}i:288;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"`a`";s:5:"value";s:1:"a";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:945;}i:289;O:15:"SqlParser\Token":5:{s:5:"token";s:1:".";s:5:"value";s:1:".";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:948;}i:290;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"`last_name`";s:5:"value";s:9:"last_name";s:4:"type";i:8;s:5:"flags";i:2;s:8:"position";i:949;}i:291;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:292;s:3:"idx";i:292;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";s:6:"sakila";s:5:"table";s:10:"actor_info";s:6:"column";N;s:4:"expr";s:21:"`sakila`.`actor_info`";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";N;s:6:"fields";N;s:6:"return";N;s:10:"parameters";N;s:4:"body";a:270:{i:0;r:131;i:1;r:137;i:2;r:143;i:3;r:149;i:4;r:155;i:5;r:161;i:6;r:167;i:7;r:173;i:8;r:179;i:9;r:185;i:10;r:191;i:11;r:197;i:12;r:203;i:13;r:209;i:14;r:215;i:15;r:221;i:16;r:227;i:17;r:233;i:18;r:239;i:19;r:245;i:20;r:251;i:21;r:257;i:22;r:263;i:23;r:269;i:24;r:275;i:25;r:281;i:26;r:287;i:27;r:293;i:28;r:299;i:29;r:305;i:30;r:311;i:31;r:317;i:32;r:323;i:33;r:329;i:34;r:335;i:35;r:341;i:36;r:347;i:37;r:353;i:38;r:359;i:39;r:365;i:40;r:371;i:41;r:377;i:42;r:383;i:43;r:389;i:44;r:395;i:45;r:401;i:46;r:407;i:47;r:413;i:48;r:419;i:49;r:425;i:50;r:431;i:51;r:437;i:52;r:443;i:53;r:449;i:54;r:455;i:55;r:461;i:56;r:467;i:57;r:473;i:58;r:479;i:59;r:485;i:60;r:491;i:61;r:497;i:62;r:503;i:63;r:509;i:64;r:515;i:65;r:521;i:66;r:527;i:67;r:533;i:68;r:539;i:69;r:545;i:70;r:551;i:71;r:557;i:72;r:563;i:73;r:569;i:74;r:575;i:75;r:581;i:76;r:587;i:77;r:593;i:78;r:599;i:79;r:605;i:80;r:611;i:81;r:617;i:82;r:623;i:83;r:629;i:84;r:635;i:85;r:641;i:86;r:647;i:87;r:653;i:88;r:659;i:89;r:665;i:90;r:671;i:91;r:677;i:92;r:683;i:93;r:689;i:94;r:695;i:95;r:701;i:96;r:707;i:97;r:713;i:98;r:719;i:99;r:725;i:100;r:731;i:101;r:737;i:102;r:743;i:103;r:749;i:104;r:755;i:105;r:761;i:106;r:767;i:107;r:773;i:108;r:779;i:109;r:785;i:110;r:791;i:111;r:797;i:112;r:803;i:113;r:809;i:114;r:815;i:115;r:821;i:116;r:827;i:117;r:833;i:118;r:839;i:119;r:845;i:120;r:851;i:121;r:857;i:122;r:863;i:123;r:869;i:124;r:875;i:125;r:881;i:126;r:887;i:127;r:893;i:128;r:899;i:129;r:905;i:130;r:911;i:131;r:917;i:132;r:923;i:133;r:929;i:134;r:935;i:135;r:941;i:136;r:947;i:137;r:953;i:138;r:959;i:139;r:965;i:140;r:971;i:141;r:977;i:142;r:983;i:143;r:989;i:144;r:995;i:145;r:1001;i:146;r:1007;i:147;r:1013;i:148;r:1019;i:149;r:1025;i:150;r:1031;i:151;r:1037;i:152;r:1043;i:153;r:1049;i:154;r:1055;i:155;r:1061;i:156;r:1067;i:157;r:1073;i:158;r:1079;i:159;r:1085;i:160;r:1091;i:161;r:1097;i:162;r:1103;i:163;r:1109;i:164;r:1115;i:165;r:1121;i:166;r:1127;i:167;r:1133;i:168;r:1139;i:169;r:1145;i:170;r:1151;i:171;r:1157;i:172;r:1163;i:173;r:1169;i:174;r:1175;i:175;r:1181;i:176;r:1187;i:177;r:1193;i:178;r:1199;i:179;r:1205;i:180;r:1211;i:181;r:1217;i:182;r:1223;i:183;r:1229;i:184;r:1235;i:185;r:1241;i:186;r:1247;i:187;r:1253;i:188;r:1259;i:189;r:1265;i:190;r:1271;i:191;r:1277;i:192;r:1283;i:193;r:1289;i:194;r:1295;i:195;r:1301;i:196;r:1307;i:197;r:1313;i:198;r:1319;i:199;r:1325;i:200;r:1331;i:201;r:1337;i:202;r:1343;i:203;r:1349;i:204;r:1355;i:205;r:1361;i:206;r:1367;i:207;r:1373;i:208;r:1379;i:209;r:1385;i:210;r:1391;i:211;r:1397;i:212;r:1403;i:213;r:1409;i:214;r:1415;i:215;r:1421;i:216;r:1427;i:217;r:1433;i:218;r:1439;i:219;r:1445;i:220;r:1451;i:221;r:1457;i:222;r:1463;i:223;r:1469;i:224;r:1475;i:225;r:1481;i:226;r:1487;i:227;r:1493;i:228;r:1499;i:229;r:1505;i:230;r:1511;i:231;r:1517;i:232;r:1523;i:233;r:1529;i:234;r:1535;i:235;r:1541;i:236;r:1547;i:237;r:1553;i:238;r:1559;i:239;r:1565;i:240;r:1571;i:241;r:1577;i:242;r:1583;i:243;r:1589;i:244;r:1595;i:245;r:1601;i:246;r:1607;i:247;r:1613;i:248;r:1619;i:249;r:1625;i:250;r:1631;i:251;r:1637;i:252;r:1643;i:253;r:1649;i:254;r:1655;i:255;r:1661;i:256;r:1667;i:257;r:1673;i:258;r:1679;i:259;r:1685;i:260;r:1691;i:261;r:1697;i:262;r:1703;i:263;r:1709;i:264;r:1715;i:265;r:1721;i:266;r:1727;i:267;r:1733;i:268;r:1739;i:269;r:1745;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:4:{i:3;a:4:{s:4:"name";s:9:"ALGORITHM";s:5:"equal";b:1;s:5:"value";s:9:"UNDEFINED";s:6:"value_";s:9:"UNDEFINED";}i:4;a:4:{s:4:"name";s:7:"DEFINER";s:5:"equal";b:1;s:5:"value";s:18:"`root`@`localhost`";s:6:"value_";s:14:"root@localhost";}i:5;a:4:{s:4:"name";s:12:"SQL SECURITY";s:5:"equal";b:0;s:5:"value";s:7:"INVOKER";s:6:"value_";s:7:"INVOKER";}i:6;s:4:"VIEW";}}s:5:"first";i:0;s:4:"last";i:291;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseCreateView2.in b/tests/data/parseCreateView2.in
new file mode 100644
index 0000000..7e64abc
--- /dev/null
+++ b/tests/data/parseCreateView2.in
@@ -0,0 +1,2 @@
+CREATE VIEW myView (vid, vfirstname) AS
+SELECT id, first_name FROM employee WHERE id = 1; \ No newline at end of file
diff --git a/tests/data/parseCreateView2.out b/tests/data/parseCreateView2.out
new file mode 100644
index 0000000..ee651d1
--- /dev/null
+++ b/tests/data/parseCreateView2.out
@@ -0,0 +1,2 @@
+a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:35:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"VIEW";s:5:"value";s:4:"VIEW";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:11;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"myView";s:5:"value";s:6:"myView";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:12;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:18;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:19;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"vid";s:5:"value";s:3:"vid";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:20;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:23;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:24;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"vfirstname";s:5:"value";s:10:"vfirstname";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:25;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:35;}i:12;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:36;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"AS";s:5:"value";s:2:"AS";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:37;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
+";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:39;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:40;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:46;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"id";s:5:"value";s:2:"id";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:47;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:49;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:50;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"first_name";s:5:"value";s:10:"first_name";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:51;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:61;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"FROM";s:5:"value";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:62;}i:23;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:66;}i:24;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"employee";s:5:"value";s:8:"employee";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:67;}i:25;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:75;}i:26;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"WHERE";s:5:"value";s:5:"WHERE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:76;}i:27;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:81;}i:28;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"id";s:5:"value";s:2:"id";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:82;}i:29;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:84;}i:30;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:85;}i:31;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:86;}i:32;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"1";s:5:"value";i:1;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:87;}i:33;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:88;}i:34;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:35;s:3:"idx";i:35;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":9:{s:4:"name";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:6:"myView";s:6:"column";N;s:4:"expr";s:6:"myView";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";N;s:6:"fields";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:3:"raw";a:2:{i:0;s:3:"vid";i:1;s:10:"vfirstname";}s:6:"values";a:2:{i:0;s:3:"vid";i:1;s:10:"vfirstname";}}s:6:"return";N;s:10:"parameters";N;s:4:"body";a:19:{i:0;r:89;i:1;r:95;i:2;r:101;i:3;r:107;i:4;r:113;i:5;r:119;i:6;r:125;i:7;r:131;i:8;r:137;i:9;r:143;i:10;r:149;i:11;r:155;i:12;r:161;i:13;r:167;i:14;r:173;i:15;r:179;i:16;r:185;i:17;r:191;i:18;r:197;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:1:{i:6;s:4:"VIEW";}}s:5:"first";i:0;s:4:"last";i:33;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseExplain.in b/tests/data/parseExplain.in
new file mode 100644
index 0000000..bb599d6
--- /dev/null
+++ b/tests/data/parseExplain.in
@@ -0,0 +1 @@
+EXPLAIN SELECT * FROM test; \ No newline at end of file
diff --git a/tests/data/parseExplain.out b/tests/data/parseExplain.out
new file mode 100644
index 0000000..269ee71
--- /dev/null
+++ b/tests/data/parseExplain.out
@@ -0,0 +1 @@
+a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:11:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"EXPLAIN";s:5:"value";s:7:"EXPLAIN";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:7;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:8;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:14;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"*";s:5:"value";s:1:"*";s:4:"type";i:2;s:5:"flags";i:1;s:8:"position";i:15;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:16;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"FROM";s:5:"value";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:17;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:21;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"test";s:5:"value";s:4:"test";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:22;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:26;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:11;s:3:"idx";i:11;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:37:"SqlParser\Statements\ExplainStatement":4:{s:7:"unknown";a:9:{i:0;r:5;i:1;r:11;i:2;r:17;i:3;r:23;i:4;r:29;i:5;r:35;i:6;r:41;i:7;r:47;i:8;r:53;}s:7:"options";N;s:5:"first";i:0;s:4:"last";i:9;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseRestore.out b/tests/data/parseRestore.out
index e9a302e..d9a4c7d 100644
--- a/tests/data/parseRestore.out
+++ b/tests/data/parseRestore.out
@@ -1 +1 @@
-a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:10:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"RESTORE";s:5:"value";s:7:"RESTORE";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:7;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"TABLE";s:5:"value";s:5:"TABLE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:8;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:13;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"my_table";s:5:"value";s:8:"my_table";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:14;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:22;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"FROM";s:5:"value";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:23;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:27;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:27:""/path/to/backup/directory"";s:5:"value";s:25:"/path/to/backup/directory";s:4:"type";i:7;s:5:"flags";i:2;s:8:"position";i:28;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";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:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:37:"SqlParser\Statements\RestoreStatement":4:{s:6:"tables";a:1:{i:0;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:8:"my_table";s:6:"column";N;s:4:"expr";s:8:"my_table";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:0;s:5:"TABLE";i:1;a:2:{s:4:"name";s:4:"FROM";s:5:"value";s:25:"/path/to/backup/directory";}}}s:5:"first";i:0;s:4:"last";i:8;}}}s:6:"errors";a:0:{}} \ No newline at end of file
+a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:10:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"RESTORE";s:5:"value";s:7:"RESTORE";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:7;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"TABLE";s:5:"value";s:5:"TABLE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:8;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:13;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"my_table";s:5:"value";s:8:"my_table";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:14;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:22;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"FROM";s:5:"value";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:23;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:27;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:27:""/path/to/backup/directory"";s:5:"value";s:25:"/path/to/backup/directory";s:4:"type";i:7;s:5:"flags";i:2;s:8:"position";i:28;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";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:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:37:"SqlParser\Statements\RestoreStatement":4:{s:6:"tables";a:1:{i:0;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:8:"my_table";s:6:"column";N;s:4:"expr";s:8:"my_table";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:0;s:5:"TABLE";i:1;a:4:{s:4:"name";s:4:"FROM";s:5:"equal";b:0;s:5:"value";s:27:""/path/to/backup/directory"";s:6:"value_";s:25:"/path/to/backup/directory";}}}s:5:"first";i:0;s:4:"last";i:8;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseSelect.out b/tests/data/parseSelect.out
index cfa48e3..aa652ad 100644
--- a/tests/data/parseSelect.out
+++ b/tests/data/parseSelect.out
@@ -11,4 +11,4 @@ a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensLi
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:178;}i:63;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"ORDER BY";s:5:"value";s:8:"ORDER BY";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:179;}i:64;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:187;}i:65;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:192;}i:66;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:200;}i:67;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"DESC";s:5:"value";s:4:"DESC";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:201;}i:68;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:205;}i:69;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:206;}i:70;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"id";s:5:"value";s:2:"id";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:211;}i:71;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
-";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:213;}i:72;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"LIMIT";s:5:"value";s:5:"LIMIT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:214;}i:73;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:219;}i:74;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"3";s:5:"value";i:3;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:220;}i:75;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:221;}i:76;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"OFFSET";s:5:"value";s:6:"OFFSET";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:222;}i:77;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:228;}i:78;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"2";s:5:"value";i:2;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:229;}i:79;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:230;}i:80;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:81;s:3:"idx";i:81;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\SelectStatement":15:{s:4:"expr";a:4:{i:0;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:5:"1 + 2";s:5:"alias";s:6:"result";s:8:"function";N;s:8:"subquery";N;}i:1;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:4:"@idx";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}i:2;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:2:"id";s:4:"expr";s:2:"id";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}i:3;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";s:4:"test";s:5:"table";s:5:"users";s:6:"column";s:8:"username";s:4:"expr";s:21:"test.`users`.username";s:5:"alias";s:4:"name";s:8:"function";N;s:8:"subquery";N;}}s:4:"from";a:2:{i:0;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";s:4:"test";s:5:"table";s:5:"users";s:6:"column";N;s:4:"expr";s:12:"`test`.users";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}i:1;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:5:"posts";s:6:"column";N;s:4:"expr";s:5:"posts";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:9:"partition";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:3:"raw";a:2:{i:0;s:2:"p1";i:1;s:2:"p2";}s:6:"values";a:2:{i:0;s:2:"p1";i:1;s:2:"p2";}}s:5:"where";a:1:{i:0;O:32:"SqlParser\Fragments\WhereKeyword":3:{s:11:"identifiers";a:1:{i:0;s:2:"id";}s:10:"isOperator";b:0;s:4:"expr";s:6:"id > 0";}}s:5:"group";N;s:6:"having";N;s:5:"order";a:2:{i:0;O:32:"SqlParser\Fragments\OrderKeyword":2:{s:5:"field";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:8:"username";s:4:"expr";s:8:"username";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:4:"type";s:4:"DESC";}i:1;O:32:"SqlParser\Fragments\OrderKeyword":2:{s:5:"field";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:2:"id";s:4:"expr";s:2:"id";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:4:"type";s:3:"ASC";}}s:5:"limit";O:32:"SqlParser\Fragments\LimitKeyword":2:{s:6:"offset";i:2;s:8:"rowCount";i:3;}s:9:"procedure";N;s:4:"into";N;s:4:"join";N;s:5:"union";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:1;s:3:"ALL";i:3;a:2:{s:4:"name";s:18:"MAX_STATEMENT_TIME";s:5:"value";s:2:"10";}}}s:5:"first";i:0;s:4:"last";i:78;}}}s:6:"errors";a:0:{}} \ No newline at end of file
+";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:213;}i:72;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"LIMIT";s:5:"value";s:5:"LIMIT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:214;}i:73;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:219;}i:74;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"3";s:5:"value";i:3;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:220;}i:75;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:221;}i:76;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"OFFSET";s:5:"value";s:6:"OFFSET";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:222;}i:77;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:228;}i:78;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"2";s:5:"value";i:2;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:229;}i:79;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:230;}i:80;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:81;s:3:"idx";i:81;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\SelectStatement":15:{s:4:"expr";a:4:{i:0;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:5:"1 + 2";s:5:"alias";s:6:"result";s:8:"function";N;s:8:"subquery";N;}i:1;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:4:"@idx";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}i:2;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:2:"id";s:4:"expr";s:2:"id";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}i:3;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";s:4:"test";s:5:"table";s:5:"users";s:6:"column";s:8:"username";s:4:"expr";s:21:"test.`users`.username";s:5:"alias";s:4:"name";s:8:"function";N;s:8:"subquery";N;}}s:4:"from";a:2:{i:0;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";s:4:"test";s:5:"table";s:5:"users";s:6:"column";N;s:4:"expr";s:12:"`test`.users";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}i:1;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";s:5:"posts";s:6:"column";N;s:4:"expr";s:5:"posts";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:9:"partition";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:3:"raw";a:2:{i:0;s:2:"p1";i:1;s:2:"p2";}s:6:"values";a:2:{i:0;s:2:"p1";i:1;s:2:"p2";}}s:5:"where";a:1:{i:0;O:32:"SqlParser\Fragments\WhereKeyword":3:{s:11:"identifiers";a:1:{i:0;s:2:"id";}s:10:"isOperator";b:0;s:4:"expr";s:6:"id > 0";}}s:5:"group";N;s:6:"having";N;s:5:"order";a:2:{i:0;O:32:"SqlParser\Fragments\OrderKeyword":2:{s:5:"field";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:8:"username";s:4:"expr";s:8:"username";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:4:"type";s:4:"DESC";}i:1;O:32:"SqlParser\Fragments\OrderKeyword":2:{s:5:"field";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:2:"id";s:4:"expr";s:2:"id";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:4:"type";s:3:"ASC";}}s:5:"limit";O:32:"SqlParser\Fragments\LimitKeyword":2:{s:6:"offset";i:2;s:8:"rowCount";i:3;}s:9:"procedure";N;s:4:"into";N;s:4:"join";N;s:5:"union";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:2:{i:1;s:3:"ALL";i:3;a:4:{s:4:"name";s:18:"MAX_STATEMENT_TIME";s:5:"equal";b:1;s:5:"value";s:2:"10";s:6:"value_";s:2:"10";}}}s:5:"first";i:0;s:4:"last";i:78;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseSelectErr1.out b/tests/data/parseSelectErr1.out
index aa1ae02..aba8ae2 100644
--- a/tests/data/parseSelectErr1.out
+++ b/tests/data/parseSelectErr1.out
@@ -11,4 +11,4 @@ a:2:{s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";O:20:"SqlParser\TokensLi
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:173;}i:60;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"ORDER BY";s:5:"value";s:8:"ORDER BY";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:174;}i:61;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:182;}i:62;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"username";s:5:"value";s:8:"username";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:187;}i:63;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:195;}i:64;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"DESC";s:5:"value";s:4:"DESC";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:196;}i:65;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:200;}i:66;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:201;}i:67;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"id";s:5:"value";s:2:"id";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:206;}i:68;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
-";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:208;}i:69;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"LIMIT";s:5:"value";s:5:"LIMIT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:209;}i:70;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:214;}i:71;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"2";s:5:"value";i:2;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:215;}i:72;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:216;}i:73;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:217;}i:74;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"3";s:5:"value";i:3;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:218;}i:75;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:219;}i:76;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:77;s:3:"idx";i:77;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\SelectStatement":15:{s:4:"expr";a:4:{i:0;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:5:"1 + 2";s:5:"alias";s:6:"result";s:8:"function";N;s:8:"subquery";N;}i:1;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:4:"@idx";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}i:2;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:2:"id";s:4:"expr";s:2:"id";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}i:3;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";s:4:"test";s:5:"table";s:5:"users";s:6:"column";s:8:"username";s:4:"expr";s:21:"test.`users`.username";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:4:"from";a:1:{i:0;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";s:4:"test";s:5:"table";s:5:"users";s:6:"column";N;s:4:"expr";s:12:"`test`.users";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:9:"partition";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:3:"raw";a:2:{i:0;s:2:"p1";i:1;s:2:"p2";}s:6:"values";a:2:{i:0;s:2:"p1";i:1;s:2:"p2";}}s:5:"where";a:1:{i:0;O:32:"SqlParser\Fragments\WhereKeyword":3:{s:11:"identifiers";a:1:{i:0;s:2:"id";}s:10:"isOperator";b:0;s:4:"expr";s:6:"id > 0";}}s:5:"group";N;s:6:"having";N;s:5:"order";a:2:{i:0;O:32:"SqlParser\Fragments\OrderKeyword":2:{s:5:"field";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:8:"username";s:4:"expr";s:8:"username";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:4:"type";s:4:"DESC";}i:1;O:32:"SqlParser\Fragments\OrderKeyword":2:{s:5:"field";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:2:"id";s:4:"expr";s:2:"id";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:4:"type";s:3:"ASC";}}s:5:"limit";O:32:"SqlParser\Fragments\LimitKeyword":2:{s:6:"offset";i:2;s:8:"rowCount";i:3;}s:9:"procedure";N;s:4:"into";N;s:4:"join";N;s:5:"union";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:3:{i:1;s:3:"ALL";i:3;a:2:{s:4:"name";s:18:"MAX_STATEMENT_TIME";s:5:"value";s:2:"10";}i:13;s:8:"DISTINCT";}}s:5:"first";i:0;s:4:"last";i:74;}}}s:6:"errors";a:2:{i:0;a:3:{i:0;s:33:"This option conflicts with 'ALL'.";i:1;r:29;i:2;i:0;}i:1;a:3:{i:0;s:19:"Alias was expected.";i:1;N;i:2;i:0;}}} \ No newline at end of file
+";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:208;}i:69;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"LIMIT";s:5:"value";s:5:"LIMIT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:209;}i:70;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:214;}i:71;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"2";s:5:"value";i:2;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:215;}i:72;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:216;}i:73;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:217;}i:74;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"3";s:5:"value";i:3;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:218;}i:75;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:219;}i:76;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:77;s:3:"idx";i:77;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\SelectStatement":15:{s:4:"expr";a:4:{i:0;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:5:"1 + 2";s:5:"alias";s:6:"result";s:8:"function";N;s:8:"subquery";N;}i:1;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:4:"@idx";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}i:2;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:2:"id";s:4:"expr";s:2:"id";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}i:3;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";s:4:"test";s:5:"table";s:5:"users";s:6:"column";s:8:"username";s:4:"expr";s:21:"test.`users`.username";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:4:"from";a:1:{i:0;O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";s:4:"test";s:5:"table";s:5:"users";s:6:"column";N;s:4:"expr";s:12:"`test`.users";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:9:"partition";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:3:"raw";a:2:{i:0;s:2:"p1";i:1;s:2:"p2";}s:6:"values";a:2:{i:0;s:2:"p1";i:1;s:2:"p2";}}s:5:"where";a:1:{i:0;O:32:"SqlParser\Fragments\WhereKeyword":3:{s:11:"identifiers";a:1:{i:0;s:2:"id";}s:10:"isOperator";b:0;s:4:"expr";s:6:"id > 0";}}s:5:"group";N;s:6:"having";N;s:5:"order";a:2:{i:0;O:32:"SqlParser\Fragments\OrderKeyword":2:{s:5:"field";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:8:"username";s:4:"expr";s:8:"username";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:4:"type";s:4:"DESC";}i:1;O:32:"SqlParser\Fragments\OrderKeyword":2:{s:5:"field";O:33:"SqlParser\Fragments\FieldFragment":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:2:"id";s:4:"expr";s:2:"id";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:4:"type";s:3:"ASC";}}s:5:"limit";O:32:"SqlParser\Fragments\LimitKeyword":2:{s:6:"offset";i:2;s:8:"rowCount";i:3;}s:9:"procedure";N;s:4:"into";N;s:4:"join";N;s:5:"union";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":1:{s:7:"options";a:3:{i:1;s:3:"ALL";i:3;a:4:{s:4:"name";s:18:"MAX_STATEMENT_TIME";s:5:"equal";b:1;s:5:"value";s:2:"10";s:6:"value_";s:2:"10";}i:13;s:8:"DISTINCT";}}s:5:"first";i:0;s:4:"last";i:74;}}}s:6:"errors";a:2:{i:0;a:3:{i:0;s:33:"This option conflicts with 'ALL'.";i:1;r:29;i:2;i:0;}i:1;a:3:{i:0;s:19:"Alias was expected.";i:1;N;i:2;i:0;}}} \ No newline at end of file