Skip to content

Commit 40a34ac

Browse files
committed
make sure reserved top level/new line keywords are always reserved
1 parent 49d81d5 commit 40a34ac

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

src/Tokenizer.php

+26
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ final class Tokenizer
2929
private array $reserved = [
3030
'ACCESSIBLE',
3131
'ACTION',
32+
'ADD',
3233
'AFTER',
3334
'AGAINST',
3435
'AGGREGATE',
@@ -37,6 +38,7 @@ final class Tokenizer
3738
'ALTER',
3839
'ANALYSE',
3940
'ANALYZE',
41+
'AND',
4042
'AS',
4143
'ASC',
4244
'AUTO_INCREMENT',
@@ -46,6 +48,7 @@ final class Tokenizer
4648
'BETWEEN',
4749
'BINLOG',
4850
'BOTH',
51+
'BY',
4952
'CASCADE',
5053
'CASE',
5154
'CHANGE',
@@ -87,6 +90,7 @@ final class Tokenizer
8790
'DISTINCTROW',
8891
'DIV',
8992
'DO',
93+
'DROP',
9094
'DUMPFILE',
9195
'DUPLICATE',
9296
'DYNAMIC',
@@ -99,6 +103,8 @@ final class Tokenizer
99103
'ESCAPE',
100104
'ESCAPED',
101105
'EVENTS',
106+
'EXCEPT',
107+
'EXCLUDE',
102108
'EXEC',
103109
'EXECUTE',
104110
'EXISTS',
@@ -115,6 +121,7 @@ final class Tokenizer
115121
'FOR',
116122
'FORCE',
117123
'FOREIGN',
124+
'FROM',
118125
'FULL',
119126
'FULLTEXT',
120127
'FUNCTION',
@@ -123,6 +130,7 @@ final class Tokenizer
123130
'GRANTS',
124131
'GROUP',
125132
'GROUPS',
133+
'HAVING',
126134
'HEAP',
127135
'HIGH_PRIORITY',
128136
'HOSTS',
@@ -137,21 +145,26 @@ final class Tokenizer
137145
'INDEX',
138146
'INDEXES',
139147
'INFILE',
148+
'INNER',
140149
'INSERT',
141150
'INSERT_ID',
142151
'INSERT_METHOD',
152+
'INTERSECT',
143153
'INTERVAL',
144154
'INTO',
145155
'INVOKER',
146156
'IS',
147157
'ISOLATION',
158+
'JOIN',
148159
'KEY',
149160
'KEYS',
150161
'KILL',
151162
'LAST_INSERT_ID',
152163
'LEADING',
164+
'LEFT',
153165
'LEVEL',
154166
'LIKE',
167+
'LIMIT',
155168
'LINEAR',
156169
'LINES',
157170
'LOAD',
@@ -177,6 +190,7 @@ final class Tokenizer
177190
'MINUTE',
178191
'MINUTE_SECOND',
179192
'MODE',
193+
'MODIFY',
180194
'MONTH',
181195
'MRG_MYISAM',
182196
'MYISAM',
@@ -193,6 +207,9 @@ final class Tokenizer
193207
'OPTIMIZE',
194208
'OPTION',
195209
'OPTIONALLY',
210+
'OR',
211+
'ORDER',
212+
'OUTER',
196213
'OUTFILE',
197214
'OVER',
198215
'PACK_KEYS',
@@ -232,16 +249,19 @@ final class Tokenizer
232249
'RETURN',
233250
'RETURNS',
234251
'REVOKE',
252+
'RIGHT',
235253
'RLIKE',
236254
'ROLLBACK',
237255
'ROW',
238256
'ROW_FORMAT',
239257
'ROWS',
240258
'SECOND',
241259
'SECURITY',
260+
'SELECT',
242261
'SEPARATOR',
243262
'SERIALIZABLE',
244263
'SESSION',
264+
'SET',
245265
'SHARE',
246266
'SHOW',
247267
'SHUTDOWN',
@@ -292,18 +312,24 @@ final class Tokenizer
292312
'TYPES',
293313
'UNBOUNDED',
294314
'UNCOMMITTED',
315+
'UNION',
295316
'UNIQUE',
296317
'UNLOCK',
297318
'UNSIGNED',
319+
'UPDATE',
298320
'USAGE',
299321
'USE',
300322
'USING',
323+
'VALUES',
301324
'VARIABLES',
302325
'VIEW',
303326
'WHEN',
327+
'WHERE',
328+
'WINDOW',
304329
'WITH',
305330
'WORK',
306331
'WRITE',
332+
'XOR',
307333
'YEAR_MONTH',
308334
];
309335

tests/TokenizerTest.php

+27
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,36 @@
77
use Doctrine\SqlFormatter\Tokenizer;
88
use PHPUnit\Framework\Attributes\DoesNotPerformAssertions;
99
use PHPUnit\Framework\TestCase;
10+
use ReflectionClass;
11+
12+
use function array_diff;
13+
use function explode;
1014

1115
final class TokenizerTest extends TestCase
1216
{
17+
public function testKeywordsReservedToplevelAndNewlineAreReserved(): void
18+
{
19+
$tokenizerReflClass = new ReflectionClass(Tokenizer::class);
20+
/** @var list<string> $tokenizerReserved */
21+
$tokenizerReserved = $tokenizerReflClass->getProperty('reserved')->getDefaultValue();
22+
/** @var list<string> $tokenizerReservedToplevel */
23+
$tokenizerReservedToplevel = $tokenizerReflClass->getProperty('reservedToplevel')->getDefaultValue();
24+
/** @var list<string> $tokenizerReservedNewline */
25+
$tokenizerReservedNewline = $tokenizerReflClass->getProperty('reservedNewline')->getDefaultValue();
26+
27+
$kws = [];
28+
29+
foreach ([...$tokenizerReservedToplevel, ...$tokenizerReservedNewline] as $v) {
30+
foreach (explode(' ', $v) as $kw) {
31+
$kws[] = $kw;
32+
}
33+
}
34+
35+
$kwsDiff = array_diff($kws, $tokenizerReserved);
36+
37+
self::assertSame([], $kwsDiff);
38+
}
39+
1340
#[DoesNotPerformAssertions]
1441
public function testThereAreNoRegressions(): void
1542
{

0 commit comments

Comments
 (0)