Yii2 framework backup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1144 lines
65 KiB

<?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;
}
}