File tree Expand file tree Collapse file tree 5 files changed +17
-19
lines changed
Expand file tree Collapse file tree 5 files changed +17
-19
lines changed Original file line number Diff line number Diff line change 22
33## [ Unreleased]
44
5+ * Fixed invalid lexing of queries with : in strings.
6+
57## [ 4.1.4] - 2017-05-05
68
79* Fixed wrong extract of string tokens with escaped characters.
Original file line number Diff line number Diff line change @@ -439,30 +439,20 @@ public function parseLabel()
439439 * @var int
440440 */
441441 $ iEnd = $ this ->last ;
442-
443- /**
444- * Whether last parsed character is a whitespace.
445- *
446- * @var bool
447- */
448- $ lastSpace = false ;
449-
450442 for ($ j = 1 ; $ j < Context::LABEL_MAX_LENGTH && $ this ->last < $ this ->len ; ++$ j , ++$ this ->last ) {
451- // Composed keywords shouldn't have more than one whitespace between
452- // keywords.
453- if (Context::isWhitespace ($ this ->str [$ this ->last ])) {
454- if ($ lastSpace ) {
455- --$ j ; // The size of the keyword didn't increase.
456- continue ;
457- }
458- $ lastSpace = true ;
459- } elseif ($ this ->str [$ this ->last ] === ': ' ) {
443+ if ($ this ->str [$ this ->last ] === ': ' && $ j > 1 ) {
444+ // End of label
460445 $ token .= $ this ->str [$ this ->last ];
461446 $ ret = new Token ($ token , Token::TYPE_LABEL );
462447 $ iEnd = $ this ->last ;
463448 break ;
464- } else {
465- $ lastSpace = false ;
449+ } elseif (Context::isWhitespace ($ this ->str [$ this ->last ]) && $ j > 1 ) {
450+ // Whitespace between label and :
451+ // The size of the keyword didn't increase.
452+ --$ j ;
453+ } elseif (Context::isSeparator ($ this ->str [$ this ->last ])) {
454+ // Any other separator
455+ break ;
466456 }
467457 $ token .= $ this ->str [$ this ->last ];
468458 }
Original file line number Diff line number Diff line change @@ -83,6 +83,7 @@ public function testLexProvider()
8383 array ('lexer/lexWhitespace ' ),
8484 array ('lexer/lexLabel1 ' ),
8585 array ('lexer/lexLabel2 ' ),
86+ array ('lexer/lexNoLabel ' ),
8687 );
8788 }
8889}
Original file line number Diff line number Diff line change 1+ SELECT wins FROM players WHERE auth = '[U1:123456789]' LIMIT 1
Original file line number Diff line number Diff line change 1+ a:4:{s:5:"query";s:63:"SELECT wins FROM players WHERE auth = '[U1:123456789]' LIMIT 1
2+ ";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:63:"SELECT wins FROM players WHERE auth = '[U1:123456789]' LIMIT 1
3+ ";s:3:"len";i:63;s:4:"last";i:63;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:21:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:7:"keyword";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:4:"wins";s:5:"value";s:4:"wins";s:7:"keyword";N;s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:7;}i:3;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:11;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:4:"FROM";s:5:"value";s:4:"FROM";s:7:"keyword";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:12;}i:5;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:16;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"players";s:5:"value";s:7:"players";s:7:"keyword";N;s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:17;}i:7;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:24;}i:8;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:5:"WHERE";s:5:"value";s:5:"WHERE";s:7:"keyword";s:5:"WHERE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:25;}i:9;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:30;}i:10;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:4:"auth";s:5:"value";s:4:"auth";s:7:"keyword";N;s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:31;}i:11;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:35;}i:12;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:7:"keyword";N;s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:36;}i:13;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:37;}i:14;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:16:"'[U1:123456789]'";s:5:"value";s:14:"[U1:123456789]";s:7:"keyword";N;s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:38;}i:15;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:54;}i:16;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:5:"LIMIT";s:5:"value";s:5:"LIMIT";s:7:"keyword";s:5:"LIMIT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:55;}i:17;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:60;}i:18;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:"1";s:5:"value";i:1;s:7:"keyword";N;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:61;}i:19;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:"
4+ ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:62;}i:20;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";N;s:5:"value";N;s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:21;s:3:"idx";i:0;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"parser";N;s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:0:{}}}
You can’t perform that action at this time.
0 commit comments