diff options
author | Michal Čihař <michal@cihar.com> | 2017-01-23 12:25:57 +0100 |
---|---|---|
committer | Michal Čihař <michal@cihar.com> | 2017-01-23 12:25:57 +0100 |
commit | 50ef374ea466ad734fe687ac75e0e7986c46c1b2 (patch) | |
tree | 66c5a5f5b4dc080cfad42154a080dfb53cb273dc | |
parent | 5489846a6a3d3f7535a55f0c13a742cc07468af4 (diff) | |
parent | 65f66eb7b6ca98218184f3ab39f6d0de08d7e8d8 (diff) | |
download | sql-parser-50ef374ea466ad734fe687ac75e0e7986c46c1b2.zip sql-parser-50ef374ea466ad734fe687ac75e0e7986c46c1b2.tar.gz sql-parser-50ef374ea466ad734fe687ac75e0e7986c46c1b2.tar.bz2 |
Merge branch 'master' into motranslator
-rw-r--r-- | .gitattributes | 2 | ||||
-rw-r--r-- | .travis.yml | 23 | ||||
-rw-r--r-- | CHANGELOG.md | 3 | ||||
-rw-r--r-- | src/Lexer.php | 3 | ||||
-rw-r--r-- | src/Statements/ReplaceStatement.php | 2 | ||||
-rw-r--r-- | src/Utils/Formatter.php | 70 | ||||
-rw-r--r-- | tests/Utils/CLITest.php | 2 | ||||
-rw-r--r-- | tests/Utils/FormatterTest.php | 40 | ||||
-rw-r--r-- | tests/data/lexer/lexComment.out | 10 | ||||
-rw-r--r-- | tests/data/lexer/lexNumber.out | 4 |
10 files changed, 65 insertions, 94 deletions
diff --git a/.gitattributes b/.gitattributes index 63c9828..027e874 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,8 +1,6 @@ -/tests export-ignore /tools export-ignore .gitattributes export-ignore .gitignore export-ignore .travis.yml export-ignore codeconv.yml export-ignore -phpunit.xml export-ignore .php_cs export-ignore diff --git a/.travis.yml b/.travis.yml index f9d755b..6570e66 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,19 +1,19 @@ language: php php: - - 5.3 - - 5.4 - - 5.5 - - 5.6 - - 7.0 - - 7.1 - - nightly - - hhvm + - "5.3" + - "5.4" + - "5.5" + - "5.6" + - "7.0" + - "7.1" + - "hhvm" + - "nightly" matrix: fast_finish: true allow_failures: - - php: nightly + - php: "nightly" sudo: false @@ -33,5 +33,6 @@ after_success: cache: directories: - $HOME/.composer/cache - - vendor - - ocular.phar + +script: + - ./vendor/bin/phpunit --configuration phpunit.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index a545678..aa72916 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,12 @@ ## [Unreleased] +## [3.4.17] - 2017-01-20 + * Coding style fixes. * Fixed indentation in HTML formatting. * Fixed parsing of unterminated variables. +* Improved comments lexing. ## [3.4.16] - 2017-01-06 diff --git a/src/Lexer.php b/src/Lexer.php index 08dd09a..7a41fad 100644 --- a/src/Lexer.php +++ b/src/Lexer.php @@ -548,7 +548,7 @@ class Lexer extends Core ) { $token .= $this->str[$this->last]; } - $token .= "\n"; // Adding the line ending. + return new Token($token, Token::TYPE_COMMENT, Token::FLAG_COMMENT_BASH); } @@ -617,7 +617,6 @@ class Lexer extends Core ) { $token .= $this->str[$this->last]; } - $token .= "\n"; // Adding the line ending. } return new Token($token, Token::TYPE_COMMENT, Token::FLAG_COMMENT_SQL); diff --git a/src/Statements/ReplaceStatement.php b/src/Statements/ReplaceStatement.php index c707535..2ffa538 100644 --- a/src/Statements/ReplaceStatement.php +++ b/src/Statements/ReplaceStatement.php @@ -117,8 +117,6 @@ class ReplaceStatement extends Statement ); ++$list->idx; - $token = $list->tokens[$list->idx]; - /** * The state of the parser. * diff --git a/src/Utils/Formatter.php b/src/Utils/Formatter.php index 22effca..06cc707 100644 --- a/src/Utils/Formatter.php +++ b/src/Utils/Formatter.php @@ -326,14 +326,6 @@ class Formatter */ $prev = null; - /** - * Comments are being formatted separately to maintain the whitespaces - * before and after them. - * - * @var string - */ - $comment = ''; - // In order to be able to format the queries correctly, the next token // must be taken into consideration. The loop below uses two pointers, // `$prev` and `$curr` which store two consecutive tokens. @@ -349,32 +341,19 @@ class Formatter if ($curr->type === Token::TYPE_WHITESPACE) { // Whitespaces are skipped because the formatter adds its own. continue; - } elseif ($curr->type === Token::TYPE_COMMENT) { - // Whether the comments should be parsed. - if (!empty($this->options['remove_comments'])) { - continue; - } - - if ($list->tokens[$list->idx - 1]->type === Token::TYPE_WHITESPACE) { - // The whitespaces before and after are preserved for - // formatting reasons. - $comment .= $list->tokens[$list->idx - 1]->token; - } - $comment .= $this->toString($curr); - if (($list->tokens[$list->idx + 1]->type === Token::TYPE_WHITESPACE) - && ($list->tokens[$list->idx + 2]->type !== Token::TYPE_COMMENT) - ) { - // Adding the next whitespace only there is no comment that - // follows it immediately which may cause adding a - // whitespace twice. - $comment .= $list->tokens[$list->idx + 1]->token; - } + } - // Everything was handled here, no need to continue. + if ($curr->type === Token::TYPE_COMMENT && $this->options['remove_comments']) { + // Skip Comments if option `remove_comments` is enabled continue; } // Checking if pointers were initialized. + /** + * Previous Token. + * + * @var Token + */ if ($prev !== null) { // Checking if a new clause started. if (static::isClause($prev) !== false) { @@ -453,12 +432,6 @@ class Formatter $shortGroup = false; } - // Delimiter must be placed on the same line with the last - // clause. - if ($curr->type === Token::TYPE_DELIMITER) { - $lineEnded = false; - } - // Adding the token. $ret .= $this->toString($prev); @@ -469,32 +442,29 @@ class Formatter $indent = 0; } - if ($curr->type !== Token::TYPE_COMMENT) { - $ret .= $this->options['line_ending'] - . str_repeat($this->options['indentation'], $indent); - } + $ret .= $this->options['line_ending'] + . str_repeat($this->options['indentation'], $indent); + $lineEnded = false; } else { // If the line ended there is no point in adding whitespaces. // Also, some tokens do not have spaces before or after them. - if (!(($prev->type === Token::TYPE_OPERATOR && ($prev->value === '.' || $prev->value === '(')) - // No space after . ( - || ($curr->type === Token::TYPE_OPERATOR && ($curr->value === '.' || $curr->value === ',' || $curr->value === '(' || $curr->value === ')')) - // No space before . , ( ) - || $curr->type === Token::TYPE_DELIMITER && mb_strlen($curr->value, 'UTF-8') < 2) + if ( // A space after delimiters that are longer than 2 characters. - || $prev->value === 'DELIMITER' + $prev->value === 'DELIMITER' + || !( + ($prev->type === Token::TYPE_OPERATOR && ($prev->value === '.' || $prev->value === '(')) + // No space after . ( + || ($curr->type === Token::TYPE_OPERATOR && ($curr->value === '.' || $curr->value === ',' || $curr->value === '(' || $curr->value === ')')) + // No space before . , ( ) + || $curr->type === Token::TYPE_DELIMITER && mb_strlen($curr->value, 'UTF-8') < 2 + ) ) { $ret .= ' '; } } } - if (!empty($comment)) { - $ret .= $comment; - $comment = ''; - } - // Iteration finished, consider current token as previous. $prev = $curr; } diff --git a/tests/Utils/CLITest.php b/tests/Utils/CLITest.php index a97d98f..41d3965 100644 --- a/tests/Utils/CLITest.php +++ b/tests/Utils/CLITest.php @@ -39,7 +39,7 @@ class CLITest extends TestCase ), array( array('q' => 'SELECT /* comment */ 1 /* other */', 'f' => 'text'), - "SELECT\n /* comment */ 1 /* other */\n", + "SELECT\n /* comment */ 1 /* other */\n", 0, ), array( diff --git a/tests/Utils/FormatterTest.php b/tests/Utils/FormatterTest.php index 15e6336..55246e0 100644 --- a/tests/Utils/FormatterTest.php +++ b/tests/Utils/FormatterTest.php @@ -250,13 +250,36 @@ class FormatTest extends TestCase array('type' => 'html'), ), array( + 'SELECT /* Comment */ 1' . "\n" . + 'FROM tbl # Comment' . "\n" . + 'WHERE 1 -- Comment', + 'SELECT' . "\n" . + ' /* Comment */ 1' . "\n" . + 'FROM' . "\n" . + ' tbl # Comment' . "\n" . + 'WHERE' . "\n" . + ' 1 -- Comment', + array('type' => 'text'), + ), + array( 'SELECT 1 # Comment', '<span class="sql-reserved">SELECT</span>' . '<br/>' . - ' <span class="sql-number">1</span> <span class="sql-comment"># Comment' . "\n" . - '</span>', + ' <span class="sql-number">1</span> <span class="sql-comment"># Comment</span>', + array('type' => 'html'), + ), + array( + 'SELECT 1 -- comment', + '<span class="sql-reserved">SELECT</span>' . '<br/>' . + ' <span class="sql-number">1</span> <span class="sql-comment">-- comment</span>', array('type' => 'html'), ), array( + 'SELECT 1 -- comment', + '<span class="sql-reserved">SELECT</span>' . '<br/>' . + ' <span class="sql-number">1</span>', + array('type' => 'html', 'remove_comments' => true), + ), + array( 'SELECT HEX("1")', '<span class="sql-reserved">SELECT</span>' . '<br/>' . ' <span class="sql-keyword">HEX</span>(<span class="sql-string">"1"</span>)', @@ -318,19 +341,6 @@ class FormatTest extends TestCase array('type' => 'html'), ), array( - 'SELECT 1 -- comment', - '<span class="sql-reserved">SELECT</span>' . '<br/>' . - ' <span class="sql-number">1</span> <span class="sql-comment">-- comment' . "\n" . - '</span>', - array('type' => 'html'), - ), - array( - 'SELECT 1 -- comment', - '<span class="sql-reserved">SELECT</span>' . '<br/>' . - ' <span class="sql-number">1</span>', - array('type' => 'html', 'remove_comments' => true), - ), - array( 'CREATE TABLE IF NOT EXISTS `pma__bookmark` (' . "\n" . ' `id` int(11) NOT NULL auto_increment,' . "\n" . ' `dbase` varchar(255) NOT NULL default "",' . "\n" . diff --git a/tests/data/lexer/lexComment.out b/tests/data/lexer/lexComment.out index edbb277..aeb68ec 100644 --- a/tests/data/lexer/lexComment.out +++ b/tests/data/lexer/lexComment.out @@ -4,11 +4,5 @@ SELECT /*!50000 STRAIGHT_JOIN */ col1 FROM table1, table2 /* select query */ -- comment 2";s:5:"lexer";O:15:"SqlParser\Lexer":8:{s:6:"strict";b:0;s:3:"str";s:110:"# comment SELECT /*!50000 STRAIGHT_JOIN */ col1 FROM table1, table2 /* select query */ -- comment --- comment 2";s:3:"len";i:110;s:4:"last";i:111;s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:23:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"# comment -";s:5:"value";s:10:"# comment -";s:4:"type";i:4;s:5:"flags";i:1;s:8:"position";i:0;}i:1;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:10;}i:2;O:15:"SqlParser\Token":5:{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:3;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"/*!50000";s:5:"value";s:8:"/*!50000";s:4:"type";i:4;s:5:"flags";i:10;s:8:"position";i:17;}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:25;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"STRAIGHT_JOIN";s:5:"value";s:13:"STRAIGHT_JOIN";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:26;}i:6;O:15:"SqlParser\Token":5:{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:7;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"*/";s:5:"value";s:2:"*/";s:4:"type";i:4;s:5:"flags";i:2;s:8:"position";i:40;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:42;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"col1";s:5:"value";s:4:"col1";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:43;}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:47;}i:11;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:48;}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:52;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"table1";s:5:"value";s:6:"table1";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:53;}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:59;}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:60;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"table2";s:5:"value";s:6:"table2";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:61;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:67;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:18:"/* select query */";s:5:"value";s:18:"/* select query */";s:4:"type";i:4;s:5:"flags";i:2;s:8:"position";i:68;}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:86;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:11:"-- comment -";s:5:"value";s:11:"-- comment -";s:4:"type";i:4;s:5:"flags";i:4;s:8:"position";i:87;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"-- comment 2 -";s:5:"value";s:13:"-- comment 2 -";s:4:"type";i:4;s:5:"flags";i:4;s:8:"position";i:98;}i:22;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:23;s:3:"idx";i:0;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"errors";a:0:{}}s:6:"parser";N;s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:0:{}}}
\ No newline at end of file +-- comment 2";s:3:"len";i:110;s:4:"last";i:111;s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:23:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"# comment";s:5:"value";s:9:"# comment";s:4:"type";i:4;s:5:"flags";i:1;s:8:"position";i:0;}i:1;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:10;}i:2;O:15:"SqlParser\Token":5:{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:3;O:15:"SqlParser\Token":5:{s:5:"token";s:8:"/*!50000";s:5:"value";s:8:"/*!50000";s:4:"type";i:4;s:5:"flags";i:10;s:8:"position";i:17;}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:25;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:13:"STRAIGHT_JOIN";s:5:"value";s:13:"STRAIGHT_JOIN";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:26;}i:6;O:15:"SqlParser\Token":5:{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:7;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"*/";s:5:"value";s:2:"*/";s:4:"type";i:4;s:5:"flags";i:2;s:8:"position";i:40;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:42;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"col1";s:5:"value";s:4:"col1";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:43;}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:47;}i:11;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:48;}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:52;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"table1";s:5:"value";s:6:"table1";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:53;}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:59;}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:60;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"table2";s:5:"value";s:6:"table2";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:61;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:67;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:18:"/* select query */";s:5:"value";s:18:"/* select query */";s:4:"type";i:4;s:5:"flags";i:2;s:8:"position";i:68;}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:86;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:10:"-- comment";s:5:"value";s:10:"-- comment";s:4:"type";i:4;s:5:"flags";i:4;s:8:"position";i:87;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:12:"-- comment 2";s:5:"value";s:12:"-- comment 2";s:4:"type";i:4;s:5:"flags";i:4;s:8:"position";i:98;}i:22;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:23;s:3:"idx";i:0;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"errors";a:0:{}}s:6:"parser";N;s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:0:{}}}
\ No newline at end of file diff --git a/tests/data/lexer/lexNumber.out b/tests/data/lexer/lexNumber.out index 4a8fd65..5cb98ee 100644 --- a/tests/data/lexer/lexNumber.out +++ b/tests/data/lexer/lexNumber.out @@ -3,6 +3,4 @@ a:4:{s:5:"query";s:135:"SELECT 12, 34, 5.67, 0x89, -10, --11, +12, .15, 0xFFa, 0 SELECT 12ex10, b'15';";s:5:"lexer";O:15:"SqlParser\Lexer":8:{s:6:"strict";b:0;s:3:"str";s:135:"SELECT 12, 34, 5.67, 0x89, -10, --11, +12, .15, 0xFFa, 0xfFA, 0XFfA, 1e-10, 1e10, .5e10, b'10'; -- invalid number SELECT 12ex10, b'15';";s:3:"len";i:135;s:4:"last";i:135;s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:57:{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: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:2:"12";s:5:"value";i:12;s:4:"type";i:6;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:2;s:5:"flags";i:16;s:8:"position";i:9;}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:10;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"34";s:5:"value";i:34;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:11;}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:13;}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:14;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"5.67";s:5:"value";d:5.6699999999999999;s:4:"type";i:6;s:5:"flags";i:2;s:8:"position";i:15;}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:19;}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:20;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"0x89";s:5:"value";i:137;s:4:"type";i:6;s:5:"flags";i:1;s:8:"position";i:21;}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:25;}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:26;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"-10";s:5:"value";i:-10;s:4:"type";i:6;s:5:"flags";i:8;s:8:"position";i:27;}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:30;}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:31;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"--11";s:5:"value";i:11;s:4:"type";i:6;s:5:"flags";i:8;s:8:"position";i:32;}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:36;}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:37;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"+12";s:5:"value";i:12;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:38;}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:41;}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:42;}i:23;O:15:"SqlParser\Token":5:{s:5:"token";s:3:".15";s:5:"value";d:0.14999999999999999;s:4:"type";i:6;s:5:"flags";i:2;s:8:"position";i:43;}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:46;}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:47;}i:26;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"0xFFa";s:5:"value";i:4090;s:4:"type";i:6;s:5:"flags";i:1;s:8:"position";i:48;}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:53;}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:54;}i:29;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"0xfFA";s:5:"value";i:4090;s:4:"type";i:6;s:5:"flags";i:1;s:8:"position";i:55;}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:16;s:8:"position";i:60;}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:61;}i:32;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"0XFfA";s:5:"value";i:4090;s:4:"type";i:6;s:5:"flags";i:1;s:8:"position";i:62;}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:67;}i:34;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:68;}i:35;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"1e-10";s:5:"value";d:1.0E-10;s:4:"type";i:6;s:5:"flags";i:4;s:8:"position";i:69;}i:36;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:74;}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:75;}i:38;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"1e10";s:5:"value";d:10000000000;s:4:"type";i:6;s:5:"flags";i:4;s:8:"position";i:76;}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:80;}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:81;}i:41;O:15:"SqlParser\Token":5:{s:5:"token";s:5:".5e10";s:5:"value";d:5000000000;s:4:"type";i:6;s:5:"flags";i:6;s:8:"position";i:82;}i:42;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:87;}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:88;}i:44;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"b'10'";s:5:"value";s:5:"b'10'";s:4:"type";i:6;s:5:"flags";i:16;s:8:"position";i:89;}i:45;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:94;}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:95;}i:47;O:15:"SqlParser\Token":5:{s:5:"token";s:18:"-- invalid number -";s:5:"value";s:18:"-- invalid number -";s:4:"type";i:4;s:5:"flags";i:4;s:8:"position";i:96;}i:48;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:114;}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:120;}i:50;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"12ex10";s:5:"value";s:6:"12ex10";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:121;}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:127;}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:128;}i:53;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:129;}i:54;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"'15'";s:5:"value";s:2:"15";s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:130;}i:55;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:134;}i:56;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:57;s:3:"idx";i:0;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"errors";a:0:{}}s:6:"parser";N;s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";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:95;}i:47;O:15:"SqlParser\Token":5:{s:5:"token";s:17:"-- invalid number";s:5:"value";s:17:"-- invalid number";s:4:"type";i:4;s:5:"flags";i:4;s:8:"position";i:96;}i:48;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:114;}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:120;}i:50;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"12ex10";s:5:"value";s:6:"12ex10";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:121;}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:127;}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:128;}i:53;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:129;}i:54;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"'15'";s:5:"value";s:2:"15";s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:130;}i:55;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:134;}i:56;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:57;s:3:"idx";i:0;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"errors";a:0:{}}s:6:"parser";N;s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:0:{}}}
\ No newline at end of file |