summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/data/parseCreateFunction.out2
-rw-r--r--tests/data/parseCreateFunctionErr1.out2
-rw-r--r--tests/data/parseCreateProcedure.out2
-rw-r--r--tests/data/parseCreateProcedure2.out2
-rw-r--r--tests/data/parseCreateTable.out2
-rw-r--r--tests/data/parseSelect.out2
-rw-r--r--tests/data/parseSelect2.in1
-rw-r--r--tests/data/parseSelect2.out1
-rw-r--r--tests/data/parseSelectErr1.out2
-rw-r--r--tests/parser/SelectStatementTest.php5
-rw-r--r--tests/utils/MiscTest.php86
11 files changed, 100 insertions, 7 deletions
diff --git a/tests/data/parseCreateFunction.out b/tests/data/parseCreateFunction.out
index 59882e9..ed7e2d3 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:0;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:0;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:0;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:0;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:0;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:0;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:0;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:0;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:0;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":10:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":2:{s:4:"name";s:6:"F_TEST";s:6:"tokens";a:1:{i:0;r:29;}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:1;s:8:"FUNCTION";}s:6:"tokens";a:1:{i:0;r:17;}}s:12:"tableOptions";N;s:6:"fields";N;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:5:"first";N;s:4:"last";i:54;s:10:"parameters";a:1:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":4:{s:4:"name";s:3:"uid";s:5:"inOut";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:3:"INT";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:53;}}s:6:"tokens";a:2:{i:0;r:41;i:1;r:53;}}}s:6:"return";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:7:"VARCHAR";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:83;}}s:11:"funcOptions";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}}}}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:0;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":10:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":2:{s:4:"name";s:6:"F_TEST";s:6:"tokens";a:1:{i:0;r:29;}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:1;s:8:"FUNCTION";}s:6:"tokens";a:1:{i:0;r:17;}}s:10:"parameters";a:1:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":4:{s:4:"name";s:3:"uid";s:5:"inOut";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:3:"INT";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:53;}}s:6:"tokens";a:2:{i:0;r:41;i:1;r:53;}}}s:12:"tableOptions";N;s:6:"fields";N;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:5:"first";N;s:4:"last";i:54;s:6:"return";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:7:"VARCHAR";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:83;}}s:11:"funcOptions";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseCreateFunctionErr1.out b/tests/data/parseCreateFunctionErr1.out
index 4fd9441..74f54d7 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:0;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:0;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:0;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:0;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:0;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:0;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:0;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:0;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:0;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":2:{s:4:"name";s:6:"F_TEST";s:6:"tokens";a:1:{i:0;r:29;}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:1;s:8:"FUNCTION";}s:6:"tokens";a:1:{i:0;r:17;}}s:12:"tableOptions";N;s:6:"fields";N;s:4:"body";a:36:{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;}s:5:"first";N;s:4:"last";i:50;s:10:"parameters";a:1:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":4:{s:4:"name";s:3:"uid";s:5:"inOut";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:3:"INT";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:53;}}s:6:"tokens";a:2:{i:0;r:41;i:1;r:53;}}}s:11:"funcOptions";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}}}}s:6:"errors";a:1:{i:0;a:3:{i:0;s:31:"'RETURNS' keyword was expected.";i:1;r:83;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:0;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":2:{s:4:"name";s:6:"F_TEST";s:6:"tokens";a:1:{i:0;r:29;}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:1;s:8:"FUNCTION";}s:6:"tokens";a:1:{i:0;r:17;}}s:10:"parameters";a:1:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":4:{s:4:"name";s:3:"uid";s:5:"inOut";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:3:"INT";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:53;}}s:6:"tokens";a:2:{i:0;r:41;i:1;r:53;}}}s:12:"tableOptions";N;s:6:"fields";N;s:4:"body";a:36:{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;}s:5:"first";N;s:4:"last";i:50;s:11:"funcOptions";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}}}}s:6:"errors";a:1:{i:0;a:3:{i:0;s:31:"'RETURNS' keyword was expected.";i:1;r:83;i:2;i:0;}}} \ No newline at end of file
diff --git a/tests/data/parseCreateProcedure.out b/tests/data/parseCreateProcedure.out
index d8659c8..2ac839b 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:0;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:0;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:0;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:0;s:5:"flags";i:0;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:0;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:0;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:0;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:0;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":2:{s:4:"name";s:6:"P_TEST";s:6:"tokens";a:1:{i:0;r:29;}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:1;s:9:"PROCEDURE";}s:6:"tokens";a:1:{i:0;r:17;}}s:12:"tableOptions";N;s:6:"fields";N;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:5:"first";N;s:4:"last";i:30;s:10:"parameters";a:1:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":4:{s:4:"name";s:3:"uid";s:5:"inOut";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:3:"INT";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:53;}}s:6:"tokens";a:2:{i:0;r:41;i:1;r:53;}}}s:11:"funcOptions";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}}}}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:0;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":2:{s:4:"name";s:6:"P_TEST";s:6:"tokens";a:1:{i:0;r:29;}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:1;s:9:"PROCEDURE";}s:6:"tokens";a:1:{i:0;r:17;}}s:10:"parameters";a:1:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":4:{s:4:"name";s:3:"uid";s:5:"inOut";N;s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:3:"INT";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:53;}}s:6:"tokens";a:2:{i:0;r:41;i:1;r:53;}}}s:12:"tableOptions";N;s:6:"fields";N;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:5:"first";N;s:4:"last";i:30;s:11:"funcOptions";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseCreateProcedure2.out b/tests/data/parseCreateProcedure2.out
index 50b9594..b56baed 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:0;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:0;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: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: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:0;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:0;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:0;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:0;s:5:"flags";i:0;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:0;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:0;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:0;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:0;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":2:{s:4:"name";s:6:"P_TEST";s:6:"tokens";a:1:{i:0;r:29;}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:1;s:9:"PROCEDURE";}s:6:"tokens";a:1:{i:0;r:17;}}s:12:"tableOptions";N;s:6:"fields";N;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:5:"first";N;s:4:"last";i:39;s:10:"parameters";a:2:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":4:{s:4:"name";s:3:"uid";s:5:"inOut";s:2:"IN";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:3:"INT";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:65;}}s:6:"tokens";a:3:{i:0;r:41;i:1;r:53;i:2;r:65;}}i:1;O:36:"SqlParser\Fragments\ParamDefFragment":4:{s:4:"name";s:6:"unused";s:5:"inOut";s:2:"IN";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:7:"VARCHAR";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:107;}}s:6:"tokens";a:3:{i:0;r:83;i:1;r:95;i:2;r:107;}}}s:11:"funcOptions";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}}}}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:0;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":2:{s:4:"name";s:6:"P_TEST";s:6:"tokens";a:1:{i:0;r:29;}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:1;s:9:"PROCEDURE";}s:6:"tokens";a:1:{i:0;r:17;}}s:10:"parameters";a:2:{i:0;O:36:"SqlParser\Fragments\ParamDefFragment":4:{s:4:"name";s:3:"uid";s:5:"inOut";s:2:"IN";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:3:"INT";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:65;}}s:6:"tokens";a:3:{i:0;r:41;i:1;r:53;i:2;r:65;}}i:1;O:36:"SqlParser\Fragments\ParamDefFragment":4:{s:4:"name";s:6:"unused";s:5:"inOut";s:2:"IN";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:7:"VARCHAR";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:107;}}s:6:"tokens";a:3:{i:0;r:83;i:1;r:95;i:2;r:107;}}}s:12:"tableOptions";N;s:6:"fields";N;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:5:"first";N;s:4:"last";i:39;s:11:"funcOptions";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseCreateTable.out b/tests/data/parseCreateTable.out
index 5477ae1..c16376e 100644
--- a/tests/data/parseCreateTable.out
+++ b/tests/data/parseCreateTable.out
@@ -4,4 +4,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: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:0;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:0;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:0;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:0;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:0;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:0;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":7:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":2:{s:4:"name";s:5:"users";s:6:"tokens";a:1:{i:0;r:41;}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:2:{i:1;s:5:"TABLE";i:3;s:13:"IF NOT EXISTS";}s:6:"tokens";a:2:{i:0;r:17;i:1;r:29;}}s:12:"tableOptions";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:1;a:2:{s:4:"name";s:6:"ENGINE";s:5:"value";s:6:"InnoDB";}}s:6:"tokens";a:3:{i:0;r:365;i:1;r:371;i:2;r:377;}}s:6:"fields";a:5:{i:0;O:36:"SqlParser\Fragments\FieldDefFragment":5:{s:4:"name";s:2:"id";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:3:"INT";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:77;}}s:7:"indexes";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:2:{i:1;s:8:"NOT NULL";i:3;s:14:"AUTO_INCREMENT";}s:6:"tokens";a:2:{i:0;r:89;i:1;r:101;}}s:6:"tokens";a:3:{i:0;r:65;i:1;r:77;i:2;r:89;}}i:1;O:36:"SqlParser\Fragments\FieldDefFragment":5:{s:4:"name";s:8:"username";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:7:"VARCHAR";s:4:"size";a:1:{i:0;i:64;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:2:{i:0;r:131;i:1;r:143;}}s:7:"indexes";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:1;s:4:"NULL";}s:6:"tokens";a:1:{i:0;r:161;}}s:6:"tokens";a:3:{i:0;r:119;i:1;r:131;i:2;r:161;}}i:2;O:36:"SqlParser\Fragments\FieldDefFragment":5:{s:4:"name";s:8:"password";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:7:"VARCHAR";s:4:"size";a:1:{i:0;i:256;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:2:{i:0;r:191;i:1;r:203;}}s:7:"indexes";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:2;a:2:{s:4:"name";s:7:"DEFAULT";s:5:"value";s:6:"123456";}}s:6:"tokens";a:2:{i:0;r:221;i:1;r:233;}}s:6:"tokens";a:3:{i:0;r:179;i:1;r:191;i:2;r:221;}}i:3;O:36:"SqlParser\Fragments\FieldDefFragment":5:{s:4:"name";s:5:"pk_id";s:4:"type";s:11:"PRIMARY KEY";s:7:"indexes";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:5:"array";a:1:{i:0;s:2:"id";}s:6:"tokens";a:1:{i:0;r:293;}}s:7:"options";N;s:6:"tokens";a:4:{i:0;r:251;i:1;r:263;i:2;r:275;i:3;r:287;}}i:4;O:36:"SqlParser\Fragments\FieldDefFragment":5:{s:4:"name";N;s:4:"type";s:6:"UNIQUE";s:7:"indexes";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:5:"array";a:1:{i:0;s:8:"username";}s:6:"tokens";a:1:{i:0;r:335;}}s:7:"options";N;s:6:"tokens";a:2:{i:0;r:317;i:1;r:329;}}}s:4:"body";N;s:5:"first";N;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:0;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":8:{s:4:"name";O:37:"SqlParser\Fragments\CreateDefFragment":2:{s:4:"name";s:5:"users";s:6:"tokens";a:1:{i:0;r:41;}}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:2:{i:1;s:5:"TABLE";i:3;s:13:"IF NOT EXISTS";}s:6:"tokens";a:2:{i:0;r:17;i:1;r:29;}}s:10:"parameters";N;s:12:"tableOptions";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:1;a:2:{s:4:"name";s:6:"ENGINE";s:5:"value";s:6:"InnoDB";}}s:6:"tokens";a:3:{i:0;r:365;i:1;r:371;i:2;r:377;}}s:6:"fields";a:5:{i:0;O:36:"SqlParser\Fragments\FieldDefFragment":5:{s:4:"name";s:2:"id";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:3:"INT";s:4:"size";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:1:{i:0;r:77;}}s:7:"indexes";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:2:{i:1;s:8:"NOT NULL";i:3;s:14:"AUTO_INCREMENT";}s:6:"tokens";a:2:{i:0;r:89;i:1;r:101;}}s:6:"tokens";a:3:{i:0;r:65;i:1;r:77;i:2;r:89;}}i:1;O:36:"SqlParser\Fragments\FieldDefFragment":5:{s:4:"name";s:8:"username";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:7:"VARCHAR";s:4:"size";a:1:{i:0;i:64;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:2:{i:0;r:131;i:1;r:143;}}s:7:"indexes";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:1;s:4:"NULL";}s:6:"tokens";a:1:{i:0;r:161;}}s:6:"tokens";a:3:{i:0;r:119;i:1;r:131;i:2;r:161;}}i:2;O:36:"SqlParser\Fragments\FieldDefFragment":5:{s:4:"name";s:8:"password";s:4:"type";O:36:"SqlParser\Fragments\DataTypeFragment":4:{s:4:"name";s:7:"VARCHAR";s:4:"size";a:1:{i:0;i:256;}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:6:"tokens";a:2:{i:0;r:191;i:1;r:203;}}s:7:"indexes";a:0:{}s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:1:{i:2;a:2:{s:4:"name";s:7:"DEFAULT";s:5:"value";s:6:"123456";}}s:6:"tokens";a:2:{i:0;r:221;i:1;r:233;}}s:6:"tokens";a:3:{i:0;r:179;i:1;r:191;i:2;r:221;}}i:3;O:36:"SqlParser\Fragments\FieldDefFragment":5:{s:4:"name";s:5:"pk_id";s:4:"type";s:11:"PRIMARY KEY";s:7:"indexes";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:5:"array";a:1:{i:0;s:2:"id";}s:6:"tokens";a:1:{i:0;r:293;}}s:7:"options";N;s:6:"tokens";a:4:{i:0;r:251;i:1;r:263;i:2;r:275;i:3;r:287;}}i:4;O:36:"SqlParser\Fragments\FieldDefFragment":5:{s:4:"name";N;s:4:"type";s:6:"UNIQUE";s:7:"indexes";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:5:"array";a:1:{i:0;s:8:"username";}s:6:"tokens";a:1:{i:0;r:335;}}s:7:"options";N;s:6:"tokens";a:2:{i:0;r:317;i:1;r:329;}}}s:4:"body";N;s:5:"first";N;s:4:"last";i:62;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseSelect.out b/tests/data/parseSelect.out
index ccae1fb..0dc9bd6 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:5:"ORDER";s:5:"value";s:5:"ORDER";s:4:"type";i:1;s:5:"flags";i:0;s:8:"position";i:179;}i:64;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:184;}i:65;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"BY";s:5:"value";s:2:"BY";s:4:"type";i:1;s:5:"flags";i:0;s:8:"position";i:185;}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:187;}i:67;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: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:200;}i:69;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:0;s:8:"position";i:201;}i:70;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:71;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:72;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: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:213;}i:74;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:0;s:8:"position";i:214;}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:219;}i:76;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: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:221;}i:78;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"OFFSET";s:5:"value";s:6:"OFFSET";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:222;}i:79;O:15:"SqlParser\Token":5:{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:80;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:81;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:82;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:83;s:3:"idx";i:83;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\SelectStatement":11:{s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{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:6:"tokens";a:4:{i:0;r:17;i:1;r:29;i:2;r:41;i:3;r:53;}}s:4:"expr";a:4:{i:0;O:33:"SqlParser\Fragments\FieldFragment":6:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:6:"1 + 2 ";s:5:"alias";s:6:"result";s:6:"tokens";a:6:{i:0;r:65;i:1;r:71;i:2;r:77;i:3;r:83;i:4;r:89;i:5;r:95;}}i:1;O:33:"SqlParser\Fragments\FieldFragment":6:{s:8:"database";N;s:5:"table";N;s:6:"column";s:3:"idx";s:4:"expr";s:4:"@idx";s:5:"alias";N;s:6:"tokens";a:1:{i:0;r:131;}}i:2;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:1:{i:0;r:149;}}i:3;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:5:{i:0;r:167;i:1;r:173;i:2;r:179;i:3;r:185;i:4;r:191;}}}s:4:"from";a:2:{i:0;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:3:{i:0;r:239;i:1;r:245;i:2;r:251;}}i:1;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:1:{i:0;r:269;}}}s:9:"partition";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:5:"array";a:2:{i:0;s:2:"p1";i:1;s:2:"p2";}s:6:"tokens";a:2:{i:0;r:299;i:1;r:317;}}s:5:"where";a:1:{i:0;O:32:"SqlParser\Fragments\WhereKeyword":3:{s:10:"isOperator";b:0;s:9:"condition";s:4:"id>0";s:6:"tokens";a:3:{i:0;r:347;i:1;r:359;i:2;r:371;}}}s:5:"group";N;s:6:"having";N;s:5:"order";a:2:{i:0;O:32:"SqlParser\Fragments\OrderKeyword":3:{s:6:"column";s:8:"username";s:4:"type";s:4:"DESC";s:6:"tokens";a:2:{i:0;r:407;i:1;r:419;}}i:1;O:32:"SqlParser\Fragments\OrderKeyword":3:{s:6:"column";s:2:"id";s:4:"type";s:3:"ASC";s:6:"tokens";a:1:{i:0;r:437;}}}s:5:"limit";O:32:"SqlParser\Fragments\LimitKeyword":3:{s:6:"offset";i:2;s:9:"row_count";i:3;s:6:"tokens";a:2:{i:0;r:461;i:1;r:485;}}s:5:"first";N;s:4:"last";i:80;}}}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:74;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:0;s:8:"position";i:214;}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:219;}i:76;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: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:221;}i:78;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"OFFSET";s:5:"value";s:6:"OFFSET";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:222;}i:79;O:15:"SqlParser\Token":5:{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:80;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:81;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:82;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:83;s:3:"idx";i:83;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\SelectStatement":11:{s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{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:6:"tokens";a:4:{i:0;r:17;i:1;r:29;i:2;r:41;i:3;r:53;}}s:4:"expr";a:4:{i:0;O:33:"SqlParser\Fragments\FieldFragment":6:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:6:"1 + 2 ";s:5:"alias";s:6:"result";s:6:"tokens";a:6:{i:0;r:65;i:1;r:71;i:2;r:77;i:3;r:83;i:4;r:89;i:5;r:95;}}i:1;O:33:"SqlParser\Fragments\FieldFragment":6:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:4:"@idx";s:5:"alias";N;s:6:"tokens";a:1:{i:0;r:131;}}i:2;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:1:{i:0;r:149;}}i:3;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:5:{i:0;r:167;i:1;r:173;i:2;r:179;i:3;r:185;i:4;r:191;}}}s:4:"from";a:2:{i:0;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:3:{i:0;r:239;i:1;r:245;i:2;r:251;}}i:1;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:1:{i:0;r:269;}}}s:9:"partition";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:5:"array";a:2:{i:0;s:2:"p1";i:1;s:2:"p2";}s:6:"tokens";a:2:{i:0;r:299;i:1;r:317;}}s:5:"where";a:1:{i:0;O:32:"SqlParser\Fragments\WhereKeyword":3:{s:10:"isOperator";b:0;s:9:"condition";s:4:"id>0";s:6:"tokens";a:3:{i:0;r:347;i:1;r:359;i:2;r:371;}}}s:5:"group";N;s:6:"having";N;s:5:"order";a:2:{i:0;O:32:"SqlParser\Fragments\OrderKeyword":3:{s:6:"column";s:8:"username";s:4:"type";s:4:"DESC";s:6:"tokens";a:2:{i:0;r:407;i:1;r:419;}}i:1;O:32:"SqlParser\Fragments\OrderKeyword":3:{s:6:"column";s:2:"id";s:4:"type";s:3:"ASC";s:6:"tokens";a:1:{i:0;r:437;}}}s:5:"limit";O:32:"SqlParser\Fragments\LimitKeyword":3:{s:6:"offset";i:2;s:9:"row_count";i:3;s:6:"tokens";a:2:{i:0;r:461;i:1;r:485;}}s:5:"first";N;s:4:"last";i:80;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseSelect2.in b/tests/data/parseSelect2.in
new file mode 100644
index 0000000..338e33c
--- /dev/null
+++ b/tests/data/parseSelect2.in
@@ -0,0 +1 @@
+SELECT (SELECT 'foo') bar, (SELECT 'baz') AS qux, a as b FROM tabl; \ No newline at end of file
diff --git a/tests/data/parseSelect2.out b/tests/data/parseSelect2.out
new file mode 100644
index 0000000..72737b0
--- /dev/null
+++ b/tests/data/parseSelect2.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:33:{i:0;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:0;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:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:7;}i:3;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:0;s:8:"position";i:8;}i:4;O:15:"SqlParser\Token":5:{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:5;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"'foo'";s:5:"value";s:3:"foo";s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:15;}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:20;}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:3:"bar";s:5:"value";s:3:"bar";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:2;s:5:"flags";i:16;s:8:"position";i:25;}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:26;}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:27;}i:12;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:0;s:8:"position";i:28;}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:34;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"'baz'";s:5:"value";s:3:"baz";s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:35;}i:15;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: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:41;}i:17;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:0;s:8:"position";i:42;}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:44;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"qux";s:5:"value";s:3:"qux";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:45;}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:48;}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:49;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"a";s:5:"value";s:1:"a";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:50;}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:51;}i:24;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:0;s:8:"position";i:52;}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:54;}i:26;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"b";s:5:"value";s:1:"b";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:55;}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:56;}i:28;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:0;s:8:"position";i:57;}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:61;}i:30;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"tabl";s:5:"value";s:4:"tabl";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:62;}i:31;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:66;}i:32;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:33;s:3:"idx";i:33;}s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\SelectStatement":11:{s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{s:7:"options";a:0:{}s:6:"tokens";a:0:{}}s:4:"expr";a:3:{i:0;O:33:"SqlParser\Fragments\FieldFragment":6:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:18:"(SELECT 'foo') bar";s:5:"alias";s:3:"bar";s:6:"tokens";a:7:{i:0;r:17;i:1;r:23;i:2;r:29;i:3;r:35;i:4;r:41;i:5;r:47;i:6;r:53;}}i:1;O:33:"SqlParser\Fragments\FieldFragment":6:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:15:"(SELECT 'baz') ";s:5:"alias";s:3:"qux";s:6:"tokens";a:6:{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:2;O:33:"SqlParser\Fragments\FieldFragment":6:{s:8:"database";N;s:5:"table";N;s:6:"column";s:1:"a";s:4:"expr";s:1:"a";s:5:"alias";s:1:"b";s:6:"tokens";a:1:{i:0;r:137;}}}s:4:"from";a:1:{i:0;O:33:"SqlParser\Fragments\FieldFragment":6:{s:8:"database";N;s:5:"table";s:4:"tabl";s:6:"column";N;s:4:"expr";s:4:"tabl";s:5:"alias";N;s:6:"tokens";a:1:{i:0;r:185;}}}s:9:"partition";N;s:5:"where";N;s:5:"group";N;s:6:"having";N;s:5:"order";N;s:5:"limit";N;s:5:"first";N;s:4:"last";i:30;}}}s:6:"errors";a:0:{}} \ No newline at end of file
diff --git a/tests/data/parseSelectErr1.out b/tests/data/parseSelectErr1.out
index 48d8faa..8d08b36 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:164;}i:58;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"ORDER";s:5:"value";s:5:"ORDER";s:4:"type";i:1;s:5:"flags";i:0;s:8:"position";i:165;}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:170;}i:60;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"BY";s:5:"value";s:2:"BY";s:4:"type";i:1;s:5:"flags";i:0;s:8:"position";i:171;}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:173;}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:178;}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:186;}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:0;s:8:"position";i:187;}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:191;}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:192;}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:197;}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:199;}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:0;s:8:"position";i:200;}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:205;}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:206;}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:207;}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:208;}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:209;}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:210;}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":11:{s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{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:6:"tokens";a:4:{i:0;r:17;i:1;r:29;i:2;r:41;i:3;r:53;}}s:4:"expr";a:4:{i:0;O:33:"SqlParser\Fragments\FieldFragment":6:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:6:"1 + 2 ";s:5:"alias";s:6:"result";s:6:"tokens";a:6:{i:0;r:65;i:1;r:71;i:2;r:77;i:3;r:83;i:4;r:89;i:5;r:95;}}i:1;O:33:"SqlParser\Fragments\FieldFragment":6:{s:8:"database";N;s:5:"table";N;s:6:"column";s:3:"idx";s:4:"expr";s:4:"@idx";s:5:"alias";N;s:6:"tokens";a:1:{i:0;r:131;}}i:2;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:1:{i:0;r:149;}}i:3;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:5:{i:0;r:167;i:1;r:173;i:2;r:179;i:3;r:185;i:4;r:191;}}}s:4:"from";a:1:{i:0;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:3:{i:0;r:227;i:1;r:233;i:2;r:239;}}}s:9:"partition";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:5:"array";a:2:{i:0;s:2:"p1";i:1;s:2:"p2";}s:6:"tokens";a:2:{i:0;r:269;i:1;r:287;}}s:5:"where";a:1:{i:0;O:32:"SqlParser\Fragments\WhereKeyword":3:{s:10:"isOperator";b:0;s:9:"condition";s:4:"id>0";s:6:"tokens";a:3:{i:0;r:317;i:1;r:329;i:2;r:341;}}}s:5:"group";N;s:6:"having";N;s:5:"order";a:2:{i:0;O:32:"SqlParser\Fragments\OrderKeyword":3:{s:6:"column";s:8:"username";s:4:"type";s:4:"DESC";s:6:"tokens";a:2:{i:0;r:377;i:1;r:389;}}i:1;O:32:"SqlParser\Fragments\OrderKeyword":3:{s:6:"column";s:2:"id";s:4:"type";s:3:"ASC";s:6:"tokens";a:1:{i:0;r:407;}}}s:5:"limit";O:32:"SqlParser\Fragments\LimitKeyword":3:{s:6:"offset";i:2;s:9:"row_count";i:3;s:6:"tokens";a:2:{i:0;r:431;i:1;r:449;}}s:5:"first";N;s:4:"last";i:74;}}}s:6:"errors";a:1:{i:0;a:3:{i:0;s:19:"Alias was expected.";i:1;r:215;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:199;}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:0;s:8:"position";i:200;}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:205;}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:206;}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:207;}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:208;}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:209;}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:210;}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":11:{s:7:"options";O:35:"SqlParser\Fragments\OptionsFragment":2:{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:6:"tokens";a:4:{i:0;r:17;i:1;r:29;i:2;r:41;i:3;r:53;}}s:4:"expr";a:4:{i:0;O:33:"SqlParser\Fragments\FieldFragment":6:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:6:"1 + 2 ";s:5:"alias";s:6:"result";s:6:"tokens";a:6:{i:0;r:65;i:1;r:71;i:2;r:77;i:3;r:83;i:4;r:89;i:5;r:95;}}i:1;O:33:"SqlParser\Fragments\FieldFragment":6:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:4:"@idx";s:5:"alias";N;s:6:"tokens";a:1:{i:0;r:131;}}i:2;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:1:{i:0;r:149;}}i:3;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:5:{i:0;r:167;i:1;r:173;i:2;r:179;i:3;r:185;i:4;r:191;}}}s:4:"from";a:1:{i:0;O:33:"SqlParser\Fragments\FieldFragment":6:{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:6:"tokens";a:3:{i:0;r:227;i:1;r:233;i:2;r:239;}}}s:9:"partition";O:33:"SqlParser\Fragments\ArrayFragment":2:{s:5:"array";a:2:{i:0;s:2:"p1";i:1;s:2:"p2";}s:6:"tokens";a:2:{i:0;r:269;i:1;r:287;}}s:5:"where";a:1:{i:0;O:32:"SqlParser\Fragments\WhereKeyword":3:{s:10:"isOperator";b:0;s:9:"condition";s:4:"id>0";s:6:"tokens";a:3:{i:0;r:317;i:1;r:329;i:2;r:341;}}}s:5:"group";N;s:6:"having";N;s:5:"order";a:2:{i:0;O:32:"SqlParser\Fragments\OrderKeyword":3:{s:6:"column";s:8:"username";s:4:"type";s:4:"DESC";s:6:"tokens";a:2:{i:0;r:377;i:1;r:389;}}i:1;O:32:"SqlParser\Fragments\OrderKeyword":3:{s:6:"column";s:2:"id";s:4:"type";s:3:"ASC";s:6:"tokens";a:1:{i:0;r:407;}}}s:5:"limit";O:32:"SqlParser\Fragments\LimitKeyword":3:{s:6:"offset";i:2;s:9:"row_count";i:3;s:6:"tokens";a:2:{i:0;r:431;i:1;r:449;}}s:5:"first";N;s:4:"last";i:74;}}}s:6:"errors";a:1:{i:0;a:3:{i:0;s:19:"Alias was expected.";i:1;r:215;i:2;i:0;}}} \ No newline at end of file
diff --git a/tests/parser/SelectStatementTest.php b/tests/parser/SelectStatementTest.php
index 3ef76b2..21df10f 100644
--- a/tests/parser/SelectStatementTest.php
+++ b/tests/parser/SelectStatementTest.php
@@ -10,6 +10,11 @@ class SelectStatementTest extends TestCase
$this->assertEquals(10, $stmt->options->has('MAX_STATEMENT_TIME'));
}
+ public function testSelect2()
+ {
+ $this->runParserTest('parseSelect2');
+ }
+
public function testSelectErr1()
{
$this->runParserTest('parseSelectErr1');
diff --git a/tests/utils/MiscTest.php b/tests/utils/MiscTest.php
new file mode 100644
index 0000000..a1f5194
--- /dev/null
+++ b/tests/utils/MiscTest.php
@@ -0,0 +1,86 @@
+<?php
+
+use SqlParser\Parser;
+use SqlParser\Utils\Misc;
+
+class MiscTest extends TestCase
+{
+
+ /**
+ * @dataProvider getAliasesProvider
+ */
+ public function testGetAliases($query, $db, array $expected)
+ {
+ $parser = new Parser($query);
+ $this->assertEquals($expected, Misc::getAliases($parser->statements[0], $db));
+ }
+
+ public function getAliasesProvider()
+ {
+ return array(
+ array(
+ 'select i.name as `n`,abcdef gh from qwerty i',
+ 'mydb',
+ array(
+ 'mydb' => array(
+ 'alias' => null,
+ 'tables' => array(
+ 'qwerty' => array(
+ 'alias' => 'i',
+ 'columns' => array(
+ 'name' => 'n',
+ 'abcdef' => 'gh'
+ )
+ )
+ )
+ )
+ )
+ ),
+ array(
+ 'select film_id id,title from film',
+ 'sakila',
+ array(
+ 'sakila' => array(
+ 'alias' => null,
+ 'tables' => array(
+ 'film' => array(
+ 'alias' => null,
+ 'columns' => array(
+ 'film_id' => 'id'
+ )
+ )
+ )
+ )
+ )
+ ),
+ array(
+ 'select `sakila`.`A`.`actor_id` as aid,`F`.`film_id` `fid`,'
+ . 'last_update updated from `sakila`.actor A join `film_actor` as '
+ . '`F` on F.actor_id = A.`actor_id`',
+ 'sakila',
+ array(
+ 'sakila' => array(
+ 'alias' => null,
+ 'tables' => array(
+ 'film_actor' => array(
+ 'alias' => 'F',
+ 'columns' => array(
+ 'film_id' => 'fid',
+ 'last_update' => 'updated'
+ )
+ ),
+ 'actor' => array(
+ 'alias'=> 'A',
+ 'columns' => array(
+ 'actor_id' => 'aid',
+ 'last_update' => 'updated'
+ )
+ )
+ )
+ )
+ )
+ ),
+ );
+ }
+
+}