summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDan Ungureanu <udan1107@gmail.com>2015-08-11 21:17:06 +0300
committerDan Ungureanu <udan1107@gmail.com>2015-08-11 21:17:06 +0300
commitc496216ded89fe56faddb621298db07be5e038d1 (patch)
tree1ee0a4967a29fa4c575c2cbe9e4bc558f3317d28 /tests
parent95d7fa76579e2d0bf3c9b449f1a4ca28ee822f30 (diff)
downloadsql-parser-c496216ded89fe56faddb621298db07be5e038d1.zip
sql-parser-c496216ded89fe56faddb621298db07be5e038d1.tar.gz
sql-parser-c496216ded89fe56faddb621298db07be5e038d1.tar.bz2
Added tests for BufferedQuery and Parser.
Diffstat (limited to 'tests')
-rw-r--r--tests/Parser/ParserTest.php15
-rw-r--r--tests/Utils/BufferedQueryTest.php257
-rw-r--r--tests/data/parser/parseDelimiter.in5
-rw-r--r--tests/data/parser/parseDelimiter.out13
4 files changed, 288 insertions, 2 deletions
diff --git a/tests/Parser/ParserTest.php b/tests/Parser/ParserTest.php
index 758f442..7a4784f 100644
--- a/tests/Parser/ParserTest.php
+++ b/tests/Parser/ParserTest.php
@@ -12,9 +12,20 @@ use SqlParser\Tests\TestCase;
class ParserTest extends TestCase
{
- public function testParse()
+ /**
+ * @dataProvider testParseProvider
+ */
+ public function testParse($test)
+ {
+ $this->runParserTest($test);
+ }
+
+ public function testParseProvider()
{
- $this->runParserTest('parser/parse');
+ return array(
+ array('parser/parse'),
+ array('parser/parseDelimiter'),
+ );
}
public function testUnrecognizedStatement()
diff --git a/tests/Utils/BufferedQueryTest.php b/tests/Utils/BufferedQueryTest.php
new file mode 100644
index 0000000..fe2b0c8
--- /dev/null
+++ b/tests/Utils/BufferedQueryTest.php
@@ -0,0 +1,257 @@
+<?php
+
+namespace SqlParser\Tests\Utils;
+
+use SqlParser\Utils\BufferedQuery;
+
+use SqlParser\Tests\TestCase;
+
+class BufferedQueryTest extends TestCase
+{
+
+ /**
+ * @dataProvider testExtractProvider
+ */
+ public function testExtract(
+ $query, $chunkSize, array $options = array(), array $expected
+ ) {
+ $chunks = str_split($query, $chunkSize);
+ $count = count($chunks);
+
+ /**
+ * The array of extracted statements.
+ * @var array $statements
+ */
+ $statements = array();
+
+ /**
+ * The `BufferedQuery` instance used for extraction.
+ * @var BufferedQuery $bq
+ */
+ $bq = new BufferedQuery('', $options);
+
+ // Feeding chunks and extracting queries.
+ $i = 0;
+ while ($i < $count) {
+ if (($stmt = $bq->extract())) {
+ $statements[] = $stmt;
+ } else {
+ $bq->query .= $chunks[$i++];
+ }
+ }
+
+ // Feeding ended, extracting remaining queries.
+ while (($stmt = $bq->extract(true))) {
+ $statements[] = $stmt;
+ }
+
+ $this->assertEquals($expected, $statements);
+ }
+
+ public function testExtractProvider()
+ {
+ $query =
+ '/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;' . "\n" .
+ '/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;' . "\n" .
+ '/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;' . "\n" .
+ '/*!40101 SET NAMES utf8mb4 */;' . "\n" .
+ '' . "\n" .
+ 'SET SQL_MODE = \'NO_AUTO_VALUE_ON_ZERO\';' . "\n" .
+ 'SET time_zone = "+00:00";' . "\n" .
+ '' . "\n" .
+ '/* a comment */ DELIMITER $$' . "\n" .
+ '' . "\n" .
+ '# Bash-like comment sytanx.' . "\n" .
+ 'CREATE DEFINER=`root`@`localhost` PROCEDURE `film_in_stock` (IN `p_film_id` INT, IN `p_store_id` INT, OUT `p_film_count` INT) READS SQL DATA' . "\n" .
+ 'BEGIN' . "\n" .
+ ' SELECT inventory_id' . "\n" .
+ ' FROM inventory' . "\n" .
+ ' WHERE film_id = p_film_id' . "\n" .
+ ' AND store_id = p_store_id' . "\n" .
+ ' AND inventory_in_stock(inventory_id);' . "\n" .
+ '' . "\n" .
+ ' SELECT FOUND_ROWS() INTO p_film_count;' . "\n" .
+ 'END$$' . "\n" .
+ '' . "\n" .
+ 'DELIMITER ;' . "\n" .
+ '' . "\n" .
+ '-- --------------------------------------------------------' . "\n" .
+ '' . "\n" .
+ '--' . "\n" .
+ '-- Table structure for `actor`' . "\n" .
+ '--' . "\n" .
+ '' . "\n" .
+ '/* C-like comment syntax. */' . "\n" .
+ 'CREATE TABLE IF NOT EXISTS `actor` (' . "\n" .
+ '`actor_id` SMALLINT(5) UNSIGNED NOT NULL,' . "\n" .
+ '`first_name` VARCHAR(45) NOT NULL,' . "\n" .
+ '`last_name` VARCHAR(45) NOT NULL,' . "\n" .
+ '`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' . "\n" .
+ ') ENGINE=InnoDB DEFAULT CHARSET=utf8;' . "\n" .
+ '' . "\n" .
+ '/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;' . "\n" .
+ '/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;' . "\n" .
+ '/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */';
+
+ return array(
+
+ array(
+ 'DELIMITER A_VERY_LONG_DEL' . "\n" .
+ 'SELECT 1 A_VERY_LONG_DEL' . "\n" .
+ 'DELIMITER ;',
+ 3,
+ array(
+ 'parse_delimiter' => true,
+ 'add_delimiter' => true,
+ ),
+ array(
+ 'DELIMITER A_VERY_LONG_DEL',
+ 'SELECT 1 A_VERY_LONG_DEL',
+ 'DELIMITER ;'
+ )
+ ),
+
+ array(
+ $query,
+ 32,
+ array(
+ 'parse_delimiter' => false,
+ 'add_delimiter' => false,
+ ),
+ array(
+ '/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */',
+
+ '/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */',
+
+ '/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */',
+
+ '/*!40101 SET NAMES utf8mb4 */',
+
+ 'SET SQL_MODE = \'NO_AUTO_VALUE_ON_ZERO\'',
+
+ 'SET time_zone = "+00:00"',
+
+ 'CREATE DEFINER=`root`@`localhost` PROCEDURE `film_in_stock` (IN `p_film_id` INT, IN `p_store_id` INT, OUT `p_film_count` INT) READS SQL DATA' . "\n" .
+ 'BEGIN' . "\n" .
+ ' SELECT inventory_id' . "\n" .
+ ' FROM inventory' . "\n" .
+ ' WHERE film_id = p_film_id' . "\n" .
+ ' AND store_id = p_store_id' . "\n" .
+ ' AND inventory_in_stock(inventory_id);' . "\n" .
+ '' . "\n" .
+ ' SELECT FOUND_ROWS() INTO p_film_count;' . "\n" .
+ 'END',
+
+ 'CREATE TABLE IF NOT EXISTS `actor` (' . "\n" .
+ '`actor_id` SMALLINT(5) UNSIGNED NOT NULL,' . "\n" .
+ '`first_name` VARCHAR(45) NOT NULL,' . "\n" .
+ '`last_name` VARCHAR(45) NOT NULL,' . "\n" .
+ '`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' . "\n" .
+ ') ENGINE=InnoDB DEFAULT CHARSET=utf8',
+
+ '/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */',
+
+ '/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */',
+
+ '/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */'
+ )
+ ),
+
+ array(
+ $query,
+ 32,
+ array(
+ 'parse_delimiter' => true,
+ 'add_delimiter' => false,
+ ),
+ array(
+ '/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */',
+
+ '/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */',
+
+ '/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */',
+
+ '/*!40101 SET NAMES utf8mb4 */',
+
+ 'SET SQL_MODE = \'NO_AUTO_VALUE_ON_ZERO\'',
+
+ 'SET time_zone = "+00:00"',
+
+ 'DELIMITER $$',
+
+ 'CREATE DEFINER=`root`@`localhost` PROCEDURE `film_in_stock` (IN `p_film_id` INT, IN `p_store_id` INT, OUT `p_film_count` INT) READS SQL DATA' . "\n" .
+ 'BEGIN' . "\n" .
+ ' SELECT inventory_id' . "\n" .
+ ' FROM inventory' . "\n" .
+ ' WHERE film_id = p_film_id' . "\n" .
+ ' AND store_id = p_store_id' . "\n" .
+ ' AND inventory_in_stock(inventory_id);' . "\n" .
+ '' . "\n" .
+ ' SELECT FOUND_ROWS() INTO p_film_count;' . "\n" .
+ 'END',
+
+ 'DELIMITER ;',
+
+ 'CREATE TABLE IF NOT EXISTS `actor` (' . "\n" .
+ '`actor_id` SMALLINT(5) UNSIGNED NOT NULL,' . "\n" .
+ '`first_name` VARCHAR(45) NOT NULL,' . "\n" .
+ '`last_name` VARCHAR(45) NOT NULL,' . "\n" .
+ '`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' . "\n" .
+ ') ENGINE=InnoDB DEFAULT CHARSET=utf8',
+
+ '/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */',
+
+ '/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */',
+
+ '/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */',
+ )
+ ),
+
+ array(
+ $query,
+ 64,
+ array(
+ 'parse_delimiter' => false,
+ 'add_delimiter' => true,
+ ),
+ array(
+ '/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;',
+
+ '/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;',
+
+ '/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;',
+
+ '/*!40101 SET NAMES utf8mb4 */;',
+
+ 'SET SQL_MODE = \'NO_AUTO_VALUE_ON_ZERO\';',
+
+ 'SET time_zone = "+00:00";',
+
+ 'CREATE DEFINER=`root`@`localhost` PROCEDURE `film_in_stock` (IN `p_film_id` INT, IN `p_store_id` INT, OUT `p_film_count` INT) READS SQL DATA' . "\n" .
+ 'BEGIN' . "\n" .
+ ' SELECT inventory_id' . "\n" .
+ ' FROM inventory' . "\n" .
+ ' WHERE film_id = p_film_id' . "\n" .
+ ' AND store_id = p_store_id' . "\n" .
+ ' AND inventory_in_stock(inventory_id);' . "\n" .
+ '' . "\n" .
+ ' SELECT FOUND_ROWS() INTO p_film_count;' . "\n" .
+ 'END$$',
+
+ 'CREATE TABLE IF NOT EXISTS `actor` (' . "\n" .
+ '`actor_id` SMALLINT(5) UNSIGNED NOT NULL,' . "\n" .
+ '`first_name` VARCHAR(45) NOT NULL,' . "\n" .
+ '`last_name` VARCHAR(45) NOT NULL,' . "\n" .
+ '`last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' . "\n" .
+ ') ENGINE=InnoDB DEFAULT CHARSET=utf8;',
+
+ '/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;',
+
+ '/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;',
+
+ '/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */'
+ )
+ )
+ );
+ }
+}
diff --git a/tests/data/parser/parseDelimiter.in b/tests/data/parser/parseDelimiter.in
new file mode 100644
index 0000000..2522c05
--- /dev/null
+++ b/tests/data/parser/parseDelimiter.in
@@ -0,0 +1,5 @@
+SELECT * FROM foo;
+DELIMITER $$
+SELECT * FROM bar$$
+DELIMITER ;
+SELECT * FROM baz; \ No newline at end of file
diff --git a/tests/data/parser/parseDelimiter.out b/tests/data/parser/parseDelimiter.out
new file mode 100644
index 0000000..e41241a
--- /dev/null
+++ b/tests/data/parser/parseDelimiter.out
@@ -0,0 +1,13 @@
+a:4:{s:5:"query";s:82:"SELECT * FROM foo;
+DELIMITER $$
+SELECT * FROM bar$$
+DELIMITER ;
+SELECT * FROM baz;";s:5:"lexer";O:15:"SqlParser\Lexer":8:{s:6:"strict";b:0;s:3:"str";s:82:"SELECT * FROM foo;
+DELIMITER $$
+SELECT * FROM bar$$
+DELIMITER ;
+SELECT * FROM baz;";s:3:"len";i:82;s:4:"last";i:82;s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:35:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"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:1:"*";s:5:"value";s:1:"*";s:4:"type";i:2;s:5:"flags";i:1;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:8;}i:4;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:9;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:13;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"foo";s:5:"value";s:3:"foo";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:14;}i:7;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:17;}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:18;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"DELIMITER";s:5:"value";s:9:"DELIMITER";s:4:"type";i:0;s:5:"flags";i:0;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:28;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"$$";s:5:"value";s:2:"$$";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:29;}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:31;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:32;}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:1:"*";s:5:"value";s:1:"*";s:4:"type";i:2;s:5:"flags";i:1;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:40;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"FROM";s:5:"value";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:41;}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:45;}i:19;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:46;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"$$";s:5:"value";s:2:"$$";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:49;}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:51;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"DELIMITER";s:5:"value";s:9:"DELIMITER";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:52;}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:61;}i:24;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:62;}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:63;}i:26;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:64;}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:70;}i:28;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"*";s:5:"value";s:1:"*";s:4:"type";i:2;s:5:"flags";i:1;s:8:"position";i:71;}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:72;}i:30;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:73;}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:77;}i:32;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"baz";s:5:"value";s:3:"baz";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:78;}i:33;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:81;}i:34;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:35;s:3:"idx";i:35;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"errors";a:0:{}}s:6:"parser";O:16:"SqlParser\Parser":4:{s:4:"list";r:8;s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:3:{i:0;O:36:"SqlParser\Statements\SelectStatement":15:{s:4:"expr";a:1:{i:0;O:31:"SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:1:"*";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:4:"from";a:1:{i:0;O:31:"SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";s:3:"foo";s:6:"column";N;s:4:"expr";s:3:"foo";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}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:9:"procedure";N;s:4:"into";N;s:4:"join";N;s:5:"union";a:0:{}s:7:"options";O:33:"SqlParser\Components\OptionsArray":1:{s:7:"options";a:0:{}}s:5:"first";i:0;s:4:"last";i:6;}i:1;O:36:"SqlParser\Statements\SelectStatement":15:{s:4:"expr";a:1:{i:0;O:31:"SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:1:"*";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:4:"from";a:1:{i:0;O:31:"SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";s:3:"bar";s:6:"column";N;s:4:"expr";s:3:"bar";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}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:9:"procedure";N;s:4:"into";N;s:4:"join";N;s:5:"union";a:0:{}s:7:"options";O:33:"SqlParser\Components\OptionsArray":1:{s:7:"options";a:0:{}}s:5:"first";i:13;s:4:"last";i:19;}i:2;O:36:"SqlParser\Statements\SelectStatement":15:{s:4:"expr";a:1:{i:0;O:31:"SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:1:"*";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:4:"from";a:1:{i:0;O:31:"SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";s:3:"baz";s:6:"column";N;s:4:"expr";s:3:"baz";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}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:9:"procedure";N;s:4:"into";N;s:4:"join";N;s:5:"union";a:0:{}s:7:"options";O:33:"SqlParser\Components\OptionsArray":1:{s:7:"options";a:0:{}}s:5:"first";i:26;s:4:"last";i:32;}}}s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:0:{}}} \ No newline at end of file