mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 06:37:55 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			1145 lines
		
	
	
		
			65 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			1145 lines
		
	
	
		
			65 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * @link http://www.yiiframework.com/
 | 
						|
 * @copyright Copyright (c) 2008 Yii Software LLC
 | 
						|
 * @license http://www.yiiframework.com/license/
 | 
						|
 */
 | 
						|
 | 
						|
namespace yiiunit\framework\db\sqlite;
 | 
						|
 | 
						|
use yii\db\sqlite\SqlTokenizer;
 | 
						|
use yii\db\SqlToken;
 | 
						|
use yiiunit\TestCase;
 | 
						|
 | 
						|
/**
 | 
						|
 * @group db
 | 
						|
 * @group sqlite
 | 
						|
 */
 | 
						|
class SqlTokenizerTest extends TestCase
 | 
						|
{
 | 
						|
    public function sqlProvider()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            'complex' => [
 | 
						|
                <<<'SQL'
 | 
						|
CREATE TABLE `constraints_test_1` (
 | 
						|
	`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
 | 
						|
	`col_1` integer,
 | 
						|
	`col_2` integer NOT NULL, `chktest` text NOT NULL DEFAULT 'none' CHECK([chktest] <> '''' and not(chktest=='foo')),
 | 
						|
	-- CONSTRAINT `ch` CHECK -- (`col_1` <> 0 and col_2 <> 1))
 | 
						|
CONSTRAINT `ch2` CHECK -- (`col_1` <> 0 and col_2 <> -1))
 | 
						|
(`col_1` <> 41 and not (col_2 == 'тес''т')));
 | 
						|
CREATE TABLE t300(id INTEGER PRIMARY KEY);
 | 
						|
CREATE TABLE t301(
 | 
						|
    id INTEGER PRIMARY KEY,
 | 
						|
    c1 INTEGER NOT NULL,
 | 
						|
    c2 INTEGER NOT NULL,
 | 
						|
    c3 BOOLEAN NOT NULL DEFAULT 0,
 | 
						|
    FOREIGN KEY(c1) REFERENCES t300(id) ON DELETE CASCADE ON UPDATE RESTRICT
 | 
						|
    /* no comma */
 | 
						|
    FOREIGN KEY(c2) REFERENCES t300(id) ON DELETE CASCADE ON UPDATE RESTRICT
 | 
						|
    /* no comma */
 | 
						|
    UNIQUE(c1, c2)
 | 
						|
);
 | 
						|
PRAGMA foreign_key_list(t301);
 | 
						|
SELECT*from/*foo*/`T_constraints_1`WHERE not`C_check`='foo''bar'--bar
 | 
						|
;;;;;;;;;/*
 | 
						|
SQL
 | 
						|
,
 | 
						|
                new SqlToken([
 | 
						|
                    'type' => SqlToken::TYPE_CODE,
 | 
						|
                    'content' => 'CREATE TABLE `constraints_test_1` (
 | 
						|
	`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
 | 
						|
	`col_1` integer,
 | 
						|
	`col_2` integer NOT NULL, `chktest` text NOT NULL DEFAULT \'none\' CHECK([chktest] <> \'\'\'\' and not(chktest==\'foo\')),
 | 
						|
	-- CONSTRAINT `ch` CHECK -- (`col_1` <> 0 and col_2 <> 1))
 | 
						|
CONSTRAINT `ch2` CHECK -- (`col_1` <> 0 and col_2 <> -1))
 | 
						|
(`col_1` <> 41 and not (col_2 == \'тес\'\'т\')));
 | 
						|
CREATE TABLE t300(id INTEGER PRIMARY KEY);
 | 
						|
CREATE TABLE t301(
 | 
						|
    id INTEGER PRIMARY KEY,
 | 
						|
    c1 INTEGER NOT NULL,
 | 
						|
    c2 INTEGER NOT NULL,
 | 
						|
    c3 BOOLEAN NOT NULL DEFAULT 0,
 | 
						|
    FOREIGN KEY(c1) REFERENCES t300(id) ON DELETE CASCADE ON UPDATE RESTRICT
 | 
						|
    /* no comma */
 | 
						|
    FOREIGN KEY(c2) REFERENCES t300(id) ON DELETE CASCADE ON UPDATE RESTRICT
 | 
						|
    /* no comma */
 | 
						|
    UNIQUE(c1, c2)
 | 
						|
);
 | 
						|
PRAGMA foreign_key_list(t301);
 | 
						|
SELECT*from/*foo*/`T_constraints_1`WHERE not`C_check`=\'foo\'\'bar\'--bar
 | 
						|
;;;;;;;;;/*',
 | 
						|
                    'startOffset' => 0,
 | 
						|
                    'endOffset' => 875,
 | 
						|
                    'children' => [
 | 
						|
                        new SqlToken([
 | 
						|
                            'type' => SqlToken::TYPE_STATEMENT,
 | 
						|
                            'content' => null,
 | 
						|
                            'startOffset' => 0,
 | 
						|
                            'endOffset' => 383,
 | 
						|
                            'children' => [
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                    'content' => 'CREATE',
 | 
						|
                                    'startOffset' => 0,
 | 
						|
                                    'endOffset' => 6,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                    'content' => 'TABLE',
 | 
						|
                                    'startOffset' => 7,
 | 
						|
                                    'endOffset' => 12,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_IDENTIFIER,
 | 
						|
                                    'content' => 'constraints_test_1',
 | 
						|
                                    'startOffset' => 13,
 | 
						|
                                    'endOffset' => 33,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => '(',
 | 
						|
                                    'startOffset' => 34,
 | 
						|
                                    'endOffset' => 35,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                    'content' => null,
 | 
						|
                                    'startOffset' => 37,
 | 
						|
                                    'endOffset' => 381,
 | 
						|
                                    'children' => [
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_IDENTIFIER,
 | 
						|
                                            'content' => 'id',
 | 
						|
                                            'startOffset' => 37,
 | 
						|
                                            'endOffset' => 41,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'integer',
 | 
						|
                                            'startOffset' => 42,
 | 
						|
                                            'endOffset' => 49,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'PRIMARY',
 | 
						|
                                            'startOffset' => 50,
 | 
						|
                                            'endOffset' => 57,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'KEY',
 | 
						|
                                            'startOffset' => 58,
 | 
						|
                                            'endOffset' => 61,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'AUTOINCREMENT',
 | 
						|
                                            'startOffset' => 62,
 | 
						|
                                            'endOffset' => 75,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'NOT',
 | 
						|
                                            'startOffset' => 76,
 | 
						|
                                            'endOffset' => 79,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'NULL',
 | 
						|
                                            'startOffset' => 80,
 | 
						|
                                            'endOffset' => 84,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ',',
 | 
						|
                                            'startOffset' => 84,
 | 
						|
                                            'endOffset' => 85,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_IDENTIFIER,
 | 
						|
                                            'content' => 'col_1',
 | 
						|
                                            'startOffset' => 87,
 | 
						|
                                            'endOffset' => 94,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'integer',
 | 
						|
                                            'startOffset' => 95,
 | 
						|
                                            'endOffset' => 102,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ',',
 | 
						|
                                            'startOffset' => 102,
 | 
						|
                                            'endOffset' => 103,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_IDENTIFIER,
 | 
						|
                                            'content' => 'col_2',
 | 
						|
                                            'startOffset' => 105,
 | 
						|
                                            'endOffset' => 112,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'integer',
 | 
						|
                                            'startOffset' => 113,
 | 
						|
                                            'endOffset' => 120,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'NOT',
 | 
						|
                                            'startOffset' => 121,
 | 
						|
                                            'endOffset' => 124,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'NULL',
 | 
						|
                                            'startOffset' => 125,
 | 
						|
                                            'endOffset' => 129,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ',',
 | 
						|
                                            'startOffset' => 129,
 | 
						|
                                            'endOffset' => 130,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_IDENTIFIER,
 | 
						|
                                            'content' => 'chktest',
 | 
						|
                                            'startOffset' => 131,
 | 
						|
                                            'endOffset' => 140,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'text',
 | 
						|
                                            'startOffset' => 141,
 | 
						|
                                            'endOffset' => 145,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'NOT',
 | 
						|
                                            'startOffset' => 146,
 | 
						|
                                            'endOffset' => 149,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'NULL',
 | 
						|
                                            'startOffset' => 150,
 | 
						|
                                            'endOffset' => 154,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'DEFAULT',
 | 
						|
                                            'startOffset' => 155,
 | 
						|
                                            'endOffset' => 162,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_STRING_LITERAL,
 | 
						|
                                            'content' => 'none',
 | 
						|
                                            'startOffset' => 163,
 | 
						|
                                            'endOffset' => 169,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'CHECK',
 | 
						|
                                            'startOffset' => 170,
 | 
						|
                                            'endOffset' => 175,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => '(',
 | 
						|
                                            'startOffset' => 175,
 | 
						|
                                            'endOffset' => 176,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                            'content' => null,
 | 
						|
                                            'startOffset' => 176,
 | 
						|
                                            'endOffset' => 217,
 | 
						|
                                            'children' => [
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_IDENTIFIER,
 | 
						|
                                                    'content' => 'chktest',
 | 
						|
                                                    'startOffset' => 176,
 | 
						|
                                                    'endOffset' => 185,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                                    'content' => '<>',
 | 
						|
                                                    'startOffset' => 186,
 | 
						|
                                                    'endOffset' => 188,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_STRING_LITERAL,
 | 
						|
                                                    'content' => '\'',
 | 
						|
                                                    'startOffset' => 189,
 | 
						|
                                                    'endOffset' => 193,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                                    'content' => 'AND',
 | 
						|
                                                    'startOffset' => 194,
 | 
						|
                                                    'endOffset' => 197,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                                    'content' => 'NOT',
 | 
						|
                                                    'startOffset' => 198,
 | 
						|
                                                    'endOffset' => 201,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                                    'content' => '(',
 | 
						|
                                                    'startOffset' => 201,
 | 
						|
                                                    'endOffset' => 202,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                                    'content' => null,
 | 
						|
                                                    'startOffset' => 202,
 | 
						|
                                                    'endOffset' => 216,
 | 
						|
                                                    'children' => [
 | 
						|
                                                        new SqlToken([
 | 
						|
                                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                                            'content' => 'chktest',
 | 
						|
                                                            'startOffset' => 202,
 | 
						|
                                                            'endOffset' => 209,
 | 
						|
                                                        ]),
 | 
						|
                                                        new SqlToken([
 | 
						|
                                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                                            'content' => '==',
 | 
						|
                                                            'startOffset' => 209,
 | 
						|
                                                            'endOffset' => 211,
 | 
						|
                                                        ]),
 | 
						|
                                                        new SqlToken([
 | 
						|
                                                            'type' => SqlToken::TYPE_STRING_LITERAL,
 | 
						|
                                                            'content' => 'foo',
 | 
						|
                                                            'startOffset' => 211,
 | 
						|
                                                            'endOffset' => 216,
 | 
						|
                                                        ]),
 | 
						|
                                                    ],
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                                    'content' => ')',
 | 
						|
                                                    'startOffset' => 216,
 | 
						|
                                                    'endOffset' => 217,
 | 
						|
                                                ]),
 | 
						|
                                            ],
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ')',
 | 
						|
                                            'startOffset' => 217,
 | 
						|
                                            'endOffset' => 218,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ',',
 | 
						|
                                            'startOffset' => 218,
 | 
						|
                                            'endOffset' => 219,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'CONSTRAINT',
 | 
						|
                                            'startOffset' => 280,
 | 
						|
                                            'endOffset' => 290,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_IDENTIFIER,
 | 
						|
                                            'content' => 'ch2',
 | 
						|
                                            'startOffset' => 291,
 | 
						|
                                            'endOffset' => 296,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'CHECK',
 | 
						|
                                            'startOffset' => 297,
 | 
						|
                                            'endOffset' => 302,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => '(',
 | 
						|
                                            'startOffset' => 338,
 | 
						|
                                            'endOffset' => 339,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                            'content' => null,
 | 
						|
                                            'startOffset' => 339,
 | 
						|
                                            'endOffset' => 380,
 | 
						|
                                            'children' => [
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_IDENTIFIER,
 | 
						|
                                                    'content' => 'col_1',
 | 
						|
                                                    'startOffset' => 339,
 | 
						|
                                                    'endOffset' => 346,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                                    'content' => '<>',
 | 
						|
                                                    'startOffset' => 347,
 | 
						|
                                                    'endOffset' => 349,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                                    'content' => '41',
 | 
						|
                                                    'startOffset' => 350,
 | 
						|
                                                    'endOffset' => 352,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                                    'content' => 'AND',
 | 
						|
                                                    'startOffset' => 353,
 | 
						|
                                                    'endOffset' => 356,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                                    'content' => 'NOT',
 | 
						|
                                                    'startOffset' => 357,
 | 
						|
                                                    'endOffset' => 360,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                                    'content' => '(',
 | 
						|
                                                    'startOffset' => 361,
 | 
						|
                                                    'endOffset' => 362,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                                    'content' => null,
 | 
						|
                                                    'startOffset' => 362,
 | 
						|
                                                    'endOffset' => 379,
 | 
						|
                                                    'children' => [
 | 
						|
                                                        new SqlToken([
 | 
						|
                                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                                            'content' => 'col_2',
 | 
						|
                                                            'startOffset' => 362,
 | 
						|
                                                            'endOffset' => 367,
 | 
						|
                                                        ]),
 | 
						|
                                                        new SqlToken([
 | 
						|
                                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                                            'content' => '==',
 | 
						|
                                                            'startOffset' => 368,
 | 
						|
                                                            'endOffset' => 370,
 | 
						|
                                                        ]),
 | 
						|
                                                        new SqlToken([
 | 
						|
                                                            'type' => SqlToken::TYPE_STRING_LITERAL,
 | 
						|
                                                            'content' => 'тес\'т',
 | 
						|
                                                            'startOffset' => 371,
 | 
						|
                                                            'endOffset' => 379,
 | 
						|
                                                        ]),
 | 
						|
                                                    ],
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                                    'content' => ')',
 | 
						|
                                                    'startOffset' => 379,
 | 
						|
                                                    'endOffset' => 380,
 | 
						|
                                                ]),
 | 
						|
                                            ],
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ')',
 | 
						|
                                            'startOffset' => 380,
 | 
						|
                                            'endOffset' => 381,
 | 
						|
                                        ]),
 | 
						|
                                    ],
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => ')',
 | 
						|
                                    'startOffset' => 381,
 | 
						|
                                    'endOffset' => 382,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => ';',
 | 
						|
                                    'startOffset' => 382,
 | 
						|
                                    'endOffset' => 383,
 | 
						|
                                ]),
 | 
						|
                            ],
 | 
						|
                        ]),
 | 
						|
                        new SqlToken([
 | 
						|
                            'type' => SqlToken::TYPE_STATEMENT,
 | 
						|
                            'content' => null,
 | 
						|
                            'startOffset' => 384,
 | 
						|
                            'endOffset' => 426,
 | 
						|
                            'children' => [
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                    'content' => 'CREATE',
 | 
						|
                                    'startOffset' => 384,
 | 
						|
                                    'endOffset' => 390,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                    'content' => 'TABLE',
 | 
						|
                                    'startOffset' => 391,
 | 
						|
                                    'endOffset' => 396,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                    'content' => 't300',
 | 
						|
                                    'startOffset' => 397,
 | 
						|
                                    'endOffset' => 401,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => '(',
 | 
						|
                                    'startOffset' => 401,
 | 
						|
                                    'endOffset' => 402,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                    'content' => null,
 | 
						|
                                    'startOffset' => 402,
 | 
						|
                                    'endOffset' => 424,
 | 
						|
                                    'children' => [
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'id',
 | 
						|
                                            'startOffset' => 402,
 | 
						|
                                            'endOffset' => 404,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'INTEGER',
 | 
						|
                                            'startOffset' => 405,
 | 
						|
                                            'endOffset' => 412,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'PRIMARY',
 | 
						|
                                            'startOffset' => 413,
 | 
						|
                                            'endOffset' => 420,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'KEY',
 | 
						|
                                            'startOffset' => 421,
 | 
						|
                                            'endOffset' => 424,
 | 
						|
                                        ]),
 | 
						|
                                    ],
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => ')',
 | 
						|
                                    'startOffset' => 424,
 | 
						|
                                    'endOffset' => 425,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => ';',
 | 
						|
                                    'startOffset' => 425,
 | 
						|
                                    'endOffset' => 426,
 | 
						|
                                ]),
 | 
						|
                            ],
 | 
						|
                        ]),
 | 
						|
                        new SqlToken([
 | 
						|
                            'type' => SqlToken::TYPE_STATEMENT,
 | 
						|
                            'content' => null,
 | 
						|
                            'startOffset' => 427,
 | 
						|
                            'endOffset' => 772,
 | 
						|
                            'children' => [
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                    'content' => 'CREATE',
 | 
						|
                                    'startOffset' => 427,
 | 
						|
                                    'endOffset' => 433,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                    'content' => 'TABLE',
 | 
						|
                                    'startOffset' => 434,
 | 
						|
                                    'endOffset' => 439,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                    'content' => 't301',
 | 
						|
                                    'startOffset' => 440,
 | 
						|
                                    'endOffset' => 444,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => '(',
 | 
						|
                                    'startOffset' => 444,
 | 
						|
                                    'endOffset' => 445,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                    'content' => null,
 | 
						|
                                    'startOffset' => 450,
 | 
						|
                                    'endOffset' => 769,
 | 
						|
                                    'children' => [
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'id',
 | 
						|
                                            'startOffset' => 450,
 | 
						|
                                            'endOffset' => 452,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'INTEGER',
 | 
						|
                                            'startOffset' => 453,
 | 
						|
                                            'endOffset' => 460,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'PRIMARY',
 | 
						|
                                            'startOffset' => 461,
 | 
						|
                                            'endOffset' => 468,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'KEY',
 | 
						|
                                            'startOffset' => 469,
 | 
						|
                                            'endOffset' => 472,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ',',
 | 
						|
                                            'startOffset' => 472,
 | 
						|
                                            'endOffset' => 473,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'c1',
 | 
						|
                                            'startOffset' => 478,
 | 
						|
                                            'endOffset' => 480,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'INTEGER',
 | 
						|
                                            'startOffset' => 481,
 | 
						|
                                            'endOffset' => 488,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'NOT',
 | 
						|
                                            'startOffset' => 489,
 | 
						|
                                            'endOffset' => 492,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'NULL',
 | 
						|
                                            'startOffset' => 493,
 | 
						|
                                            'endOffset' => 497,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ',',
 | 
						|
                                            'startOffset' => 497,
 | 
						|
                                            'endOffset' => 498,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'c2',
 | 
						|
                                            'startOffset' => 503,
 | 
						|
                                            'endOffset' => 505,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'INTEGER',
 | 
						|
                                            'startOffset' => 506,
 | 
						|
                                            'endOffset' => 513,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'NOT',
 | 
						|
                                            'startOffset' => 514,
 | 
						|
                                            'endOffset' => 517,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'NULL',
 | 
						|
                                            'startOffset' => 518,
 | 
						|
                                            'endOffset' => 522,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ',',
 | 
						|
                                            'startOffset' => 522,
 | 
						|
                                            'endOffset' => 523,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'c3',
 | 
						|
                                            'startOffset' => 528,
 | 
						|
                                            'endOffset' => 530,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 'BOOLEAN',
 | 
						|
                                            'startOffset' => 531,
 | 
						|
                                            'endOffset' => 538,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'NOT',
 | 
						|
                                            'startOffset' => 539,
 | 
						|
                                            'endOffset' => 542,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'NULL',
 | 
						|
                                            'startOffset' => 543,
 | 
						|
                                            'endOffset' => 547,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'DEFAULT',
 | 
						|
                                            'startOffset' => 548,
 | 
						|
                                            'endOffset' => 555,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => '0',
 | 
						|
                                            'startOffset' => 556,
 | 
						|
                                            'endOffset' => 557,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ',',
 | 
						|
                                            'startOffset' => 557,
 | 
						|
                                            'endOffset' => 558,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'FOREIGN',
 | 
						|
                                            'startOffset' => 563,
 | 
						|
                                            'endOffset' => 570,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'KEY',
 | 
						|
                                            'startOffset' => 571,
 | 
						|
                                            'endOffset' => 574,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => '(',
 | 
						|
                                            'startOffset' => 574,
 | 
						|
                                            'endOffset' => 575,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                            'content' => null,
 | 
						|
                                            'startOffset' => 575,
 | 
						|
                                            'endOffset' => 577,
 | 
						|
                                            'children' => [
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                                    'content' => 'c1',
 | 
						|
                                                    'startOffset' => 575,
 | 
						|
                                                    'endOffset' => 577,
 | 
						|
                                                ]),
 | 
						|
                                            ],
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ')',
 | 
						|
                                            'startOffset' => 577,
 | 
						|
                                            'endOffset' => 578,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'REFERENCES',
 | 
						|
                                            'startOffset' => 579,
 | 
						|
                                            'endOffset' => 589,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 't300',
 | 
						|
                                            'startOffset' => 590,
 | 
						|
                                            'endOffset' => 594,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => '(',
 | 
						|
                                            'startOffset' => 594,
 | 
						|
                                            'endOffset' => 595,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                            'content' => null,
 | 
						|
                                            'startOffset' => 595,
 | 
						|
                                            'endOffset' => 597,
 | 
						|
                                            'children' => [
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                                    'content' => 'id',
 | 
						|
                                                    'startOffset' => 595,
 | 
						|
                                                    'endOffset' => 597,
 | 
						|
                                                ]),
 | 
						|
                                            ],
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ')',
 | 
						|
                                            'startOffset' => 597,
 | 
						|
                                            'endOffset' => 598,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'ON',
 | 
						|
                                            'startOffset' => 599,
 | 
						|
                                            'endOffset' => 601,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'DELETE',
 | 
						|
                                            'startOffset' => 602,
 | 
						|
                                            'endOffset' => 608,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'CASCADE',
 | 
						|
                                            'startOffset' => 609,
 | 
						|
                                            'endOffset' => 616,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'ON',
 | 
						|
                                            'startOffset' => 617,
 | 
						|
                                            'endOffset' => 619,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'UPDATE',
 | 
						|
                                            'startOffset' => 620,
 | 
						|
                                            'endOffset' => 626,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'RESTRICT',
 | 
						|
                                            'startOffset' => 627,
 | 
						|
                                            'endOffset' => 635,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'FOREIGN',
 | 
						|
                                            'startOffset' => 659,
 | 
						|
                                            'endOffset' => 666,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'KEY',
 | 
						|
                                            'startOffset' => 667,
 | 
						|
                                            'endOffset' => 670,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => '(',
 | 
						|
                                            'startOffset' => 670,
 | 
						|
                                            'endOffset' => 671,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                            'content' => null,
 | 
						|
                                            'startOffset' => 671,
 | 
						|
                                            'endOffset' => 673,
 | 
						|
                                            'children' => [
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                                    'content' => 'c2',
 | 
						|
                                                    'startOffset' => 671,
 | 
						|
                                                    'endOffset' => 673,
 | 
						|
                                                ]),
 | 
						|
                                            ],
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ')',
 | 
						|
                                            'startOffset' => 673,
 | 
						|
                                            'endOffset' => 674,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'REFERENCES',
 | 
						|
                                            'startOffset' => 675,
 | 
						|
                                            'endOffset' => 685,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 't300',
 | 
						|
                                            'startOffset' => 686,
 | 
						|
                                            'endOffset' => 690,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => '(',
 | 
						|
                                            'startOffset' => 690,
 | 
						|
                                            'endOffset' => 691,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                            'content' => null,
 | 
						|
                                            'startOffset' => 691,
 | 
						|
                                            'endOffset' => 693,
 | 
						|
                                            'children' => [
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                                    'content' => 'id',
 | 
						|
                                                    'startOffset' => 691,
 | 
						|
                                                    'endOffset' => 693,
 | 
						|
                                                ]),
 | 
						|
                                            ],
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ')',
 | 
						|
                                            'startOffset' => 693,
 | 
						|
                                            'endOffset' => 694,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'ON',
 | 
						|
                                            'startOffset' => 695,
 | 
						|
                                            'endOffset' => 697,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'DELETE',
 | 
						|
                                            'startOffset' => 698,
 | 
						|
                                            'endOffset' => 704,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'CASCADE',
 | 
						|
                                            'startOffset' => 705,
 | 
						|
                                            'endOffset' => 712,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'ON',
 | 
						|
                                            'startOffset' => 713,
 | 
						|
                                            'endOffset' => 715,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'UPDATE',
 | 
						|
                                            'startOffset' => 716,
 | 
						|
                                            'endOffset' => 722,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'RESTRICT',
 | 
						|
                                            'startOffset' => 723,
 | 
						|
                                            'endOffset' => 731,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                            'content' => 'UNIQUE',
 | 
						|
                                            'startOffset' => 755,
 | 
						|
                                            'endOffset' => 761,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => '(',
 | 
						|
                                            'startOffset' => 761,
 | 
						|
                                            'endOffset' => 762,
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                            'content' => null,
 | 
						|
                                            'startOffset' => 762,
 | 
						|
                                            'endOffset' => 768,
 | 
						|
                                            'children' => [
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                                    'content' => 'c1',
 | 
						|
                                                    'startOffset' => 762,
 | 
						|
                                                    'endOffset' => 764,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                                    'content' => ',',
 | 
						|
                                                    'startOffset' => 764,
 | 
						|
                                                    'endOffset' => 765,
 | 
						|
                                                ]),
 | 
						|
                                                new SqlToken([
 | 
						|
                                                    'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                                    'content' => 'c2',
 | 
						|
                                                    'startOffset' => 766,
 | 
						|
                                                    'endOffset' => 768,
 | 
						|
                                                ]),
 | 
						|
                                            ],
 | 
						|
                                        ]),
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                            'content' => ')',
 | 
						|
                                            'startOffset' => 768,
 | 
						|
                                            'endOffset' => 769,
 | 
						|
                                        ]),
 | 
						|
                                    ],
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => ')',
 | 
						|
                                    'startOffset' => 770,
 | 
						|
                                    'endOffset' => 771,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => ';',
 | 
						|
                                    'startOffset' => 771,
 | 
						|
                                    'endOffset' => 772,
 | 
						|
                                ]),
 | 
						|
                            ],
 | 
						|
                        ]),
 | 
						|
                        new SqlToken([
 | 
						|
                            'type' => SqlToken::TYPE_STATEMENT,
 | 
						|
                            'content' => null,
 | 
						|
                            'startOffset' => 773,
 | 
						|
                            'endOffset' => 803,
 | 
						|
                            'children' => [
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                    'content' => 'PRAGMA',
 | 
						|
                                    'startOffset' => 773,
 | 
						|
                                    'endOffset' => 779,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                    'content' => 'foreign_key_list',
 | 
						|
                                    'startOffset' => 780,
 | 
						|
                                    'endOffset' => 796,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => '(',
 | 
						|
                                    'startOffset' => 796,
 | 
						|
                                    'endOffset' => 797,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_PARENTHESIS,
 | 
						|
                                    'content' => null,
 | 
						|
                                    'startOffset' => 797,
 | 
						|
                                    'endOffset' => 801,
 | 
						|
                                    'children' => [
 | 
						|
                                        new SqlToken([
 | 
						|
                                            'type' => SqlToken::TYPE_TOKEN,
 | 
						|
                                            'content' => 't301',
 | 
						|
                                            'startOffset' => 797,
 | 
						|
                                            'endOffset' => 801,
 | 
						|
                                        ]),
 | 
						|
                                    ],
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => ')',
 | 
						|
                                    'startOffset' => 801,
 | 
						|
                                    'endOffset' => 802,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => ';',
 | 
						|
                                    'startOffset' => 802,
 | 
						|
                                    'endOffset' => 803,
 | 
						|
                                ]),
 | 
						|
                            ],
 | 
						|
                        ]),
 | 
						|
                        new SqlToken([
 | 
						|
                            'type' => SqlToken::TYPE_STATEMENT,
 | 
						|
                            'content' => null,
 | 
						|
                            'startOffset' => 804,
 | 
						|
                            'endOffset' => 875,
 | 
						|
                            'children' => [
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                    'content' => 'SELECT',
 | 
						|
                                    'startOffset' => 804,
 | 
						|
                                    'endOffset' => 810,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => '*',
 | 
						|
                                    'startOffset' => 810,
 | 
						|
                                    'endOffset' => 811,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                    'content' => 'FROM',
 | 
						|
                                    'startOffset' => 811,
 | 
						|
                                    'endOffset' => 815,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_IDENTIFIER,
 | 
						|
                                    'content' => 'T_constraints_1',
 | 
						|
                                    'startOffset' => 822,
 | 
						|
                                    'endOffset' => 839,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                    'content' => 'WHERE',
 | 
						|
                                    'startOffset' => 839,
 | 
						|
                                    'endOffset' => 844,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_KEYWORD,
 | 
						|
                                    'content' => 'NOT',
 | 
						|
                                    'startOffset' => 845,
 | 
						|
                                    'endOffset' => 848,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_IDENTIFIER,
 | 
						|
                                    'content' => 'C_check',
 | 
						|
                                    'startOffset' => 848,
 | 
						|
                                    'endOffset' => 857,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => '=',
 | 
						|
                                    'startOffset' => 857,
 | 
						|
                                    'endOffset' => 858,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_STRING_LITERAL,
 | 
						|
                                    'content' => 'foo\'bar',
 | 
						|
                                    'startOffset' => 858,
 | 
						|
                                    'endOffset' => 868,
 | 
						|
                                ]),
 | 
						|
                                new SqlToken([
 | 
						|
                                    'type' => SqlToken::TYPE_OPERATOR,
 | 
						|
                                    'content' => ';',
 | 
						|
                                    'startOffset' => 874,
 | 
						|
                                    'endOffset' => 875,
 | 
						|
                                ]),
 | 
						|
                            ],
 | 
						|
                        ]),
 | 
						|
                    ],
 | 
						|
                ]),
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider sqlProvider
 | 
						|
     * @param string $sql
 | 
						|
     */
 | 
						|
    public function testTokenizer($sql, SqlToken $expectedToken)
 | 
						|
    {
 | 
						|
        $actualToken = (new SqlTokenizer($sql))->tokenize();
 | 
						|
        $this->assertEquals($expectedToken, $actualToken);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Use this to export SqlToken for tests.
 | 
						|
     * @param SqlToken $token
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    private function exportToken(SqlToken $token)
 | 
						|
    {
 | 
						|
        $result = get_object_vars($token);
 | 
						|
        unset($result['parent']);
 | 
						|
        $result['children'] = array_map(function (SqlToken $token) {
 | 
						|
            return $this->exportToken($token);
 | 
						|
        }, $token->children);
 | 
						|
        return $result;
 | 
						|
    }
 | 
						|
}
 |