summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Čihař <michal@cihar.com>2017-01-23 12:25:57 +0100
committerMichal Čihař <michal@cihar.com>2017-01-23 12:25:57 +0100
commit50ef374ea466ad734fe687ac75e0e7986c46c1b2 (patch)
tree66c5a5f5b4dc080cfad42154a080dfb53cb273dc
parent5489846a6a3d3f7535a55f0c13a742cc07468af4 (diff)
parent65f66eb7b6ca98218184f3ab39f6d0de08d7e8d8 (diff)
downloadsql-parser-50ef374ea466ad734fe687ac75e0e7986c46c1b2.zip
sql-parser-50ef374ea466ad734fe687ac75e0e7986c46c1b2.tar.gz
sql-parser-50ef374ea466ad734fe687ac75e0e7986c46c1b2.tar.bz2
Merge branch 'master' into motranslator
-rw-r--r--.gitattributes2
-rw-r--r--.travis.yml23
-rw-r--r--CHANGELOG.md3
-rw-r--r--src/Lexer.php3
-rw-r--r--src/Statements/ReplaceStatement.php2
-rw-r--r--src/Utils/Formatter.php70
-rw-r--r--tests/Utils/CLITest.php2
-rw-r--r--tests/Utils/FormatterTest.php40
-rw-r--r--tests/data/lexer/lexComment.out10
-rw-r--r--tests/data/lexer/lexNumber.out4
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/>' .
- '&nbsp;&nbsp;&nbsp;&nbsp;<span class="sql-number">1</span> <span class="sql-comment"># Comment' . "\n" .
- '</span>',
+ '&nbsp;&nbsp;&nbsp;&nbsp;<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/>' .
+ '&nbsp;&nbsp;&nbsp;&nbsp;<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/>' .
+ '&nbsp;&nbsp;&nbsp;&nbsp;<span class="sql-number">1</span>',
+ array('type' => 'html', 'remove_comments' => true),
+ ),
+ array(
'SELECT HEX("1")',
'<span class="sql-reserved">SELECT</span>' . '<br/>' .
'&nbsp;&nbsp;&nbsp;&nbsp;<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/>' .
- '&nbsp;&nbsp;&nbsp;&nbsp;<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/>' .
- '&nbsp;&nbsp;&nbsp;&nbsp;<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