Skip to content

Commit 19668cf

Browse files
authored
Merge branch 'master' into php-cs-fixer
2 parents 165e678 + 082a1fa commit 19668cf

16 files changed

+95
-39
lines changed

src/Components/SetOperation.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ public static function parse(Parser $parser, TokensList $list, array $options =
102102
)
103103
);
104104
if ($tmp == null) {
105+
$parser->error(__('Missing expression.'), $token);
105106
break;
106107
}
107108
$expr->column = trim($expr->column);

src/Statement.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -470,11 +470,11 @@ public function validateClauseOrder($parser, $list)
470470

471471
// Handle ordering of Multiple Joins in a query
472472
if ($clauseStartIdx != -1) {
473-
if ($joinStart == 0 && stripos($clauseType, 'JOIN')) {
473+
if ($joinStart == 0 && stripos($clauseType, 'JOIN') !== false) {
474474
$joinStart = 1;
475-
} elseif ($joinStart == 1 && !stripos($clauseType, 'JOIN')) {
475+
} elseif ($joinStart == 1 && stripos($clauseType, 'JOIN') === false) {
476476
$joinStart = 2;
477-
} elseif ($joinStart == 2 && stripos($clauseType, 'JOIN')) {
477+
} elseif ($joinStart == 2 && stripos($clauseType, 'JOIN') !== false) {
478478
$error = 1;
479479
}
480480
}

src/UtfString.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,7 @@ public function __construct($str)
7474
$this->str = $str;
7575
$this->byteIdx = 0;
7676
$this->charIdx = 0;
77-
// TODO: `strlen($str)` might return a wrong length when function
78-
// overloading is enabled.
79-
// https://php.net/manual/ro/mbstring.overload.php
80-
$this->byteLen = strlen($str);
77+
$this->byteLen = mb_strlen($str, '8bit');
8178
$this->charLen = mb_strlen($str, 'UTF-8');
8279
}
8380

src/Utils/Formatter.php

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@ private function getMergedOptions(array $options)
6868
$options
6969
);
7070

71-
$options['formats'] = self::mergeFormats($this->getDefaultFormats(), @$options['formats'] ?: array());
71+
if (isset($options['formats'])) {
72+
$options['formats'] = self::mergeFormats($this->getDefaultFormats(), $options['formats']);
73+
} else {
74+
$options['formats'] = $this->getDefaultFormats();
75+
}
7276

7377
if (is_null($options['line_ending'])) {
7478
$options['line_ending'] = $options['type'] === 'html' ? '<br/>' : "\n";
@@ -205,44 +209,39 @@ protected function getDefaultFormats()
205209
private static function mergeFormats(array $formats, array $newFormats)
206210
{
207211
$added = array();
212+
$integers = array('flags', 'type');
213+
$strings = array('html', 'cli', 'function');
208214

215+
/* Sanitize the array so that we do not have to care later */
216+
foreach ($newFormats as $j => $new) {
217+
foreach ($integers as $name) {
218+
if (! isset($new[$name])) {
219+
$newFormats[$j][$name] = 0;
220+
}
221+
}
222+
foreach ($strings as $name) {
223+
if (! isset($new[$name])) {
224+
$newFormats[$j][$name] = '';
225+
}
226+
}
227+
}
228+
229+
/* Process changes to existing formats */
209230
foreach ($formats as $i => $original) {
210231
foreach ($newFormats as $j => $new) {
211-
if (isset($new['type'])
212-
&& $new['type'] === $original['type']
213-
&& (
214-
(
215-
isset($new['flags'])
216-
&& $original['flags'] === $new['flags']
217-
)
218-
|| (
219-
!isset($new['flags'])
220-
&& $original['flags'] == 0
221-
)
222-
)
232+
if ($new['type'] === $original['type']
233+
&& $original['flags'] === $new['flags']
223234
) {
224-
$formats[$i] = array(
225-
'type' => $original['type'],
226-
'flags' => isset($new['flags']) ? $new['flags'] : 0,
227-
'html' => isset($new['html']) ? $new['html'] : '',
228-
'cli' => isset($new['cli']) ? $new['cli'] : '',
229-
'function' => isset($new['function']) ? $new['function'] : '',
230-
);
231-
235+
$formats[$i] = $new;
232236
$added[] = $j;
233237
}
234238
}
235239
}
236240

241+
/* Add not already handled formats */
237242
foreach ($newFormats as $j => $new) {
238-
if (!in_array($j, $added) && isset($new['type'])) {
239-
$formats[] = array(
240-
'type' => $new['type'],
241-
'flags' => isset($new['flags']) ? $new['flags'] : 0,
242-
'html' => isset($new['html']) ? $new['html'] : '',
243-
'cli' => isset($new['cli']) ? $new['cli'] : '',
244-
'function' => isset($new['function']) ? $new['function'] : '',
245-
);
243+
if (! in_array($j, $added)) {
244+
$formats[] = $new;
246245
}
247246
}
248247

tests/Components/Array2dTest.php

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,24 +44,54 @@ public function testParseErr3()
4444
{
4545
$parser = new Parser();
4646
Array2d::parse($parser, $this->getTokensList(')'));
47-
Array2d::parse($parser, $this->getTokensList('TABLE'));
48-
// TODO: Assert errors.
47+
$this->assertEquals(
48+
1,
49+
count($parser->errors)
50+
);
51+
$this->assertEquals(
52+
'An opening bracket followed by a set of values was expected.',
53+
$parser->errors[0]->getMessage()
54+
);
4955
}
5056

5157
public function testParseErr4()
5258
{
5359
$parser = new Parser();
54-
Array2d::parse($parser, $this->getTokensList('(1, 2),'));
60+
Array2d::parse($parser, $this->getTokensList('TABLE'));
61+
$this->assertEquals(
62+
1,
63+
count($parser->errors)
64+
);
5565
$this->assertEquals(
5666
'An opening bracket followed by a set of values was expected.',
5767
$parser->errors[0]->getMessage()
5868
);
5969
}
6070

6171
public function testParseErr5()
72+
{
73+
$parser = new Parser();
74+
Array2d::parse($parser, $this->getTokensList('(1, 2),'));
75+
$this->assertEquals(
76+
'An opening bracket followed by a set of values was expected.',
77+
1,
78+
count($parser->errors)
79+
);
80+
$this->assertEquals(
81+
'An opening bracket followed by a set of values was expected.',
82+
$parser->errors[0]->getMessage()
83+
);
84+
}
85+
86+
public function testParseErr6()
6287
{
6388
$parser = new Parser();
6489
Array2d::parse($parser, $this->getTokensList('(1, 2),(3)'));
90+
$this->assertEquals(
91+
'2 values were expected, but found 1.',
92+
1,
93+
count($parser->errors)
94+
);
6595
$this->assertEquals(
6696
'2 values were expected, but found 1.',
6797
$parser->errors[0]->getMessage()

tests/Parser/CreateStatementTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public function testCreateProvider()
3232
array('parser/parseCreateTableErr2'),
3333
array('parser/parseCreateTableErr3'),
3434
array('parser/parseCreateTableErr4'),
35+
array('parser/parseCreateTableErr5'),
3536
array('parser/parseCreateTableSelect'),
3637
array('parser/parseCreateTableAsSelect'),
3738
array('parser/parseCreateTableLike'),

tests/Parser/DeleteStatementTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public function testDeleteProvider()
4040
array('parser/parseDeleteErr9'),
4141
array('parser/parseDeleteErr10'),
4242
array('parser/parseDeleteErr11'),
43+
array('parser/parseDeleteErr12'),
4344
);
4445
}
4546
}

tests/Parser/UpdateStatementTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public function testUpdateProvider()
1919
return array(
2020
array('parser/parseUpdate'),
2121
array('parser/parseUpdate2'),
22+
array('parser/parseUpdate3'),
2223
);
2324
}
2425
}

tests/Utils/CLITest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ public function highlightParams()
3737
"\x1b[35mSELECT\n \x1b[92m1\x1b[0m\n",
3838
0,
3939
),
40+
array(
41+
array('q' => 'SELECT /* comment */ 1 /* other */', 'f' => 'text'),
42+
"SELECT\n /* comment */ 1 /* other */\n",
43+
0,
44+
),
4045
array(
4146
array('q' => 'SELECT 1', 'f' => 'foo'),
4247
"ERROR: Invalid value for format!\n",

tests/Utils/FormatterTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ public function mergeFormats()
5858
array(
5959
'type' => 0,
6060
'flags' => 0,
61+
'html' => '',
62+
'cli' => '',
63+
'function' => '',
6164
),
6265
),
6366
array( // overriding
@@ -68,6 +71,9 @@ public function mergeFormats()
6871
array(
6972
'type' => 0,
7073
'flags' => 0,
74+
'html' => '',
75+
'cli' => '',
76+
'function' => '',
7177
),
7278
),
7379
),
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CREATE TABLE new_table (666 VARCHAR(50) DEFAULT NULL);
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
a:4:{s:5:"query";s:55:"CREATE TABLE new_table (666 VARCHAR(50) DEFAULT NULL);
2+
";s:5:"lexer";O:15:"SqlParser\Lexer":8:{s:6:"strict";b:0;s:3:"str";s:55:"CREATE TABLE new_table (666 VARCHAR(50) DEFAULT NULL);
3+
";s:3:"len";i:55;s:4:"last";i:55;s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:21:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"CREATE";s:5:"value";s:6:"CREATE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"TABLE";s:5:"value";s:5:"TABLE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:12;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:9:"new_table";s:5:"value";s:9:"new_table";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:13;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:22;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:23;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"666";s:5:"value";i:666;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:24;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:27;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"VARCHAR";s:5:"value";s:7:"VARCHAR";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:28;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:35;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"50";s:5:"value";i:50;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:36;}i:12;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:38;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:39;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:7:"DEFAULT";s:5:"value";s:7:"DEFAULT";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:40;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:47;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"NULL";s:5:"value";s:4:"NULL";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:48;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:52;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:53;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
4+
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:54;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:21;s:3:"idx";i:21;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"errors";a:0:{}}s:6:"parser";O:16:"SqlParser\Parser":5:{s:4:"list";r:8;s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\CreateStatement":17:{s:4:"name";O:31:"SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";s:9:"new_table";s:6:"column";N;s:4:"expr";s:9:"new_table";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}s:13:"entityOptions";O:33:"SqlParser\Components\OptionsArray":1:{s:7:"options";a:0:{}}s:6:"fields";a:0:{}s:6:"select";N;s:4:"like";N;s:11:"partitionBy";N;s:13:"partitionsNum";N;s:14:"subpartitionBy";N;s:16:"subpartitionsNum";N;s:10:"partitions";N;s:5:"table";N;s:6:"return";N;s:10:"parameters";N;s:4:"body";a:0:{}s:7:"options";O:33:"SqlParser\Components\OptionsArray":1:{s:7:"options";a:1:{i:6;s:5:"TABLE";}}s:5:"first";i:0;s:4:"last";i:10;}}s:8:"brackets";i:0;}s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:4:{i:0;a:3:{i:0;s:27:"A symbol name was expected!";i:1;r:52;i:2;i:0;}i:1;a:3:{i:0;s:44:"At least one column definition was expected.";i:1;r:52;i:2;i:0;}i:2;a:3:{i:0;s:34:"Unexpected beginning of statement.";i:1;r:76;i:2;i:0;}i:3;a:3:{i:0;s:28:"Unrecognized statement type.";i:1;r:94;i:2;i:0;}}}}

tests/data/parser/parseDeleteErr12.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
DELETE QUICK FROM table1, table2 USING t1 as t,t2 as tt as ttt WHEE a =1;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
a:4:{s:5:"query";s:74:"DELETE QUICK FROM table1, table2 USING t1 as t,t2 as tt as ttt WHEE a =1;
2+
";s:5:"lexer";O:15:"SqlParser\Lexer":8:{s:6:"strict";b:0;s:3:"str";s:74:"DELETE QUICK FROM table1, table2 USING t1 as t,t2 as tt as ttt WHEE a =1;
3+
";s:3:"len";i:74;s:4:"last";i:74;s:4:"list";O:20:"SqlParser\TokensList":3:{s:6:"tokens";a:38:{i:0;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"DELETE";s:5:"value";s:6:"DELETE";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"QUICK";s:5:"value";s:5:"QUICK";s:4:"type";i:1;s:5:"flags";i:1;s:8:"position";i:7;}i:3;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:12;}i:4;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"FROM";s:5:"value";s:4:"FROM";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:13;}i:5;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:17;}i:6;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"table1";s:5:"value";s:6:"table1";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:18;}i:7;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:24;}i:8;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:25;}i:9;O:15:"SqlParser\Token":5:{s:5:"token";s:6:"table2";s:5:"value";s:6:"table2";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:26;}i:10;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:32;}i:11;O:15:"SqlParser\Token":5:{s:5:"token";s:5:"USING";s:5:"value";s:5:"USING";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:33;}i:12;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:38;}i:13;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"t1";s:5:"value";s:2:"t1";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:39;}i:14;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:41;}i:15;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"as";s:5:"value";s:2:"AS";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:42;}i:16;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:44;}i:17;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"t";s:5:"value";s:1:"t";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:45;}i:18;O:15:"SqlParser\Token":5:{s:5:"token";s:1:",";s:5:"value";s:1:",";s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:46;}i:19;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"t2";s:5:"value";s:2:"t2";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:47;}i:20;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:49;}i:21;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"as";s:5:"value";s:2:"AS";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:50;}i:22;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:52;}i:23;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"tt";s:5:"value";s:2:"tt";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:53;}i:24;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:55;}i:25;O:15:"SqlParser\Token":5:{s:5:"token";s:2:"as";s:5:"value";s:2:"AS";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:56;}i:26;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:58;}i:27;O:15:"SqlParser\Token":5:{s:5:"token";s:3:"ttt";s:5:"value";s:3:"ttt";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:59;}i:28;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:62;}i:29;O:15:"SqlParser\Token":5:{s:5:"token";s:4:"WHEE";s:5:"value";s:4:"WHEE";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:63;}i:30;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:67;}i:31;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"a";s:5:"value";s:1:"a";s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:68;}i:32;O:15:"SqlParser\Token":5:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:69;}i:33;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"=";s:5:"value";s:1:"=";s:4:"type";i:2;s:5:"flags";i:2;s:8:"position";i:70;}i:34;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"1";s:5:"value";i:1;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:71;}i:35;O:15:"SqlParser\Token":5:{s:5:"token";s:1:";";s:5:"value";s:1:";";s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:72;}i:36;O:15:"SqlParser\Token":5:{s:5:"token";s:1:"
4+
";s:5:"value";s:1:" ";s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:73;}i:37;O:15:"SqlParser\Token":5:{s:5:"token";N;s:5:"value";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:38;s:3:"idx";i:38;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"errors";a:0:{}}s:6:"parser";O:16:"SqlParser\Parser":5:{s:4:"list";r:8;s:6:"strict";b:0;s:6:"errors";a:0:{}s:10:"statements";a:1:{i:0;O:36:"SqlParser\Statements\DeleteStatement":10:{s:4:"from";a:2:{i:0;O:31:"SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";s:6:"table1";s:6:"column";N;s:4:"expr";s:6:"table1";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}i:1;O:31:"SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";s:6:"table2";s:6:"column";N;s:4:"expr";s:6:"table2";s:5:"alias";N;s:8:"function";N;s:8:"subquery";N;}}s:5:"using";a:2:{i:0;O:31:"SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:2:"t1";s:4:"expr";s:2:"t1";s:5:"alias";s:1:"t";s:8:"function";N;s:8:"subquery";N;}i:1;O:31:"SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";N;s:6:"column";s:2:"t2";s:4:"expr";s:2:"t2";s:5:"alias";s:2:"tt";s:8:"function";N;s:8:"subquery";N;}}s:7:"columns";N;s:9:"partition";N;s:5:"where";N;s:5:"order";N;s:5:"limit";N;s:7:"options";O:33:"SqlParser\Components\OptionsArray":1:{s:7:"options";a:1:{i:2;s:5:"QUICK";}}s:5:"first";i:0;s:4:"last";i:26;}}s:8:"brackets";i:0;}s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:7:{i:0;a:3:{i:0;s:30:"An alias was previously found.";i:1;r:172;i:2;i:0;}i:1;a:3:{i:0;s:22:"An alias was expected.";i:1;r:166;i:2;i:0;}i:2;a:3:{i:0;s:17:"Unexpected token.";i:1;r:172;i:2;i:0;}i:3;a:3:{i:0;s:34:"Unexpected beginning of statement.";i:1;r:172;i:2;i:0;}i:4;a:3:{i:0;s:34:"Unexpected beginning of statement.";i:1;r:184;i:2;i:0;}i:5;a:3:{i:0;s:34:"Unexpected beginning of statement.";i:1;r:196;i:2;i:0;}i:6;a:3:{i:0;s:34:"Unexpected beginning of statement.";i:1;r:214;i:2;i:0;}}}}

tests/data/parser/parseUpdate3.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
UPDATE foo SET bar = WHERE baz = 0

0 commit comments

Comments
 (0)