@@ -94,8 +94,8 @@ final class Tokenizer
94
94
'ENCLOSED ' ,
95
95
'END ' ,
96
96
'ENGINE ' ,
97
- 'ENGINE_TYPE ' ,
98
97
'ENGINES ' ,
98
+ 'ENGINE_TYPE ' ,
99
99
'ESCAPE ' ,
100
100
'ESCAPED ' ,
101
101
'EVENTS ' ,
@@ -111,9 +111,9 @@ final class Tokenizer
111
111
'FIRST ' ,
112
112
'FIXED ' ,
113
113
'FLUSH ' ,
114
+ 'FOLLOWING ' ,
114
115
'FOR ' ,
115
116
'FORCE ' ,
116
- 'FOLLOWING ' ,
117
117
'FOREIGN ' ,
118
118
'FULL ' ,
119
119
'FULLTEXT ' ,
@@ -187,12 +187,12 @@ final class Tokenizer
187
187
'NULL ' ,
188
188
'OFFSET ' ,
189
189
'ON ' ,
190
+ 'ON DELETE ' ,
191
+ 'ON UPDATE ' ,
190
192
'OPEN ' ,
191
193
'OPTIMIZE ' ,
192
194
'OPTION ' ,
193
195
'OPTIONALLY ' ,
194
- 'ON UPDATE ' ,
195
- 'ON DELETE ' ,
196
196
'OUTFILE ' ,
197
197
'OVER ' ,
198
198
'PACK_KEYS ' ,
@@ -209,11 +209,11 @@ final class Tokenizer
209
209
'PROCESSLIST ' ,
210
210
'PURGE ' ,
211
211
'QUICK ' ,
212
- 'RANGE ' ,
213
212
'RAID0 ' ,
214
213
'RAID_CHUNKS ' ,
215
214
'RAID_CHUNKSIZE ' ,
216
215
'RAID_TYPE ' ,
216
+ 'RANGE ' ,
217
217
'READ ' ,
218
218
'READ_ONLY ' ,
219
219
'READ_WRITE ' ,
@@ -254,20 +254,20 @@ final class Tokenizer
254
254
'SQL_BIG_SELECTS ' ,
255
255
'SQL_BIG_TABLES ' ,
256
256
'SQL_BUFFER_RESULT ' ,
257
+ 'SQL_CACHE ' ,
257
258
'SQL_CALC_FOUND_ROWS ' ,
258
259
'SQL_LOG_BIN ' ,
259
260
'SQL_LOG_OFF ' ,
260
261
'SQL_LOG_UPDATE ' ,
261
262
'SQL_LOW_PRIORITY_UPDATES ' ,
262
263
'SQL_MAX_JOIN_SIZE ' ,
264
+ 'SQL_NO_CACHE ' ,
263
265
'SQL_QUOTE_SHOW_CREATE ' ,
264
266
'SQL_SAFE_UPDATES ' ,
265
267
'SQL_SELECT_LIMIT ' ,
266
268
'SQL_SLAVE_SKIP_COUNTER ' ,
267
269
'SQL_SMALL_RESULT ' ,
268
270
'SQL_WARNINGS ' ,
269
- 'SQL_CACHE ' ,
270
- 'SQL_NO_CACHE ' ,
271
271
'START ' ,
272
272
'STARTING ' ,
273
273
'STATUS ' ,
@@ -314,47 +314,47 @@ final class Tokenizer
314
314
* @var list<string>
315
315
*/
316
316
private array $ reservedToplevel = [
317
- 'WITH ' ,
318
- 'SELECT ' ,
319
- 'FROM ' ,
320
- 'WHERE ' ,
321
- 'SET ' ,
322
- 'ORDER BY ' ,
323
- 'GROUP BY ' ,
324
- 'LIMIT ' ,
325
- 'DROP ' ,
326
- 'VALUES ' ,
327
- 'UPDATE ' ,
328
- 'HAVING ' ,
329
317
'ADD ' ,
330
- 'CHANGE ' ,
331
- 'MODIFY ' ,
332
318
'ALTER TABLE ' ,
319
+ 'CHANGE ' ,
333
320
'DELETE FROM ' ,
334
- 'UNION ALL ' ,
335
- 'UNION ' ,
321
+ 'DROP ' ,
336
322
'EXCEPT ' ,
323
+ 'FROM ' ,
324
+ 'GROUP BY ' ,
325
+ 'GROUPS ' ,
326
+ 'HAVING ' ,
337
327
'INTERSECT ' ,
328
+ 'LIMIT ' ,
329
+ 'MODIFY ' ,
330
+ 'ORDER BY ' ,
338
331
'PARTITION BY ' ,
339
- 'ROWS ' ,
340
332
'RANGE ' ,
341
- 'GROUPS ' ,
333
+ 'ROWS ' ,
334
+ 'SELECT ' ,
335
+ 'SET ' ,
336
+ 'UNION ' ,
337
+ 'UNION ALL ' ,
338
+ 'UPDATE ' ,
339
+ 'VALUES ' ,
340
+ 'WHERE ' ,
342
341
'WINDOW ' ,
342
+ 'WITH ' ,
343
343
];
344
344
345
345
/** @var list<string> */
346
346
private array $ reservedNewline = [
347
- 'LEFT OUTER JOIN ' ,
348
- 'RIGHT OUTER JOIN ' ,
349
- 'LEFT JOIN ' ,
350
- 'RIGHT JOIN ' ,
351
- 'OUTER JOIN ' ,
347
+ 'AND ' ,
348
+ 'EXCLUDE ' ,
352
349
'INNER JOIN ' ,
353
350
'JOIN ' ,
354
- 'XOR ' ,
351
+ 'LEFT JOIN ' ,
352
+ 'LEFT OUTER JOIN ' ,
355
353
'OR ' ,
356
- 'AND ' ,
357
- 'EXCLUDE ' ,
354
+ 'OUTER JOIN ' ,
355
+ 'RIGHT JOIN ' ,
356
+ 'RIGHT OUTER JOIN ' ,
357
+ 'XOR ' ,
358
358
];
359
359
360
360
/** @var list<string> */
@@ -575,9 +575,9 @@ final class Tokenizer
575
575
'ORD ' ,
576
576
'OVERLAPS ' ,
577
577
'PASSWORD ' ,
578
- 'PERCENT_RANK ' ,
579
578
'PERCENTILE_CONT ' ,
580
579
'PERCENTILE_DISC ' ,
580
+ 'PERCENT_RANK ' ,
581
581
'PERIOD_ADD ' ,
582
582
'PERIOD_DIFF ' ,
583
583
'PI ' ,
@@ -625,13 +625,13 @@ final class Tokenizer
625
625
'SRID ' ,
626
626
'STARTPOINT ' ,
627
627
'STD ' ,
628
- 'STDEV ' ,
629
- 'STDEVP ' ,
630
628
'STDDEV ' ,
631
629
'STDDEV_POP ' ,
632
630
'STDDEV_SAMP ' ,
633
- 'STRING_AGG ' ,
631
+ 'STDEV ' ,
632
+ 'STDEVP ' ,
634
633
'STRCMP ' ,
634
+ 'STRING_AGG ' ,
635
635
'STR_TO_DATE ' ,
636
636
'SUBDATE ' ,
637
637
'SUBSTR ' ,
@@ -726,10 +726,17 @@ final class Tokenizer
726
726
public function __construct ()
727
727
{
728
728
// Sort reserved word list from longest word to shortest, 3x faster than usort
729
- $ reservedMap = array_combine ($ this ->reserved , array_map (strlen (...), $ this ->reserved ));
730
- assert ($ reservedMap !== false );
731
- arsort ($ reservedMap );
732
- $ this ->reserved = array_keys ($ reservedMap );
729
+ $ sortByLengthFx = static function ($ values ) {
730
+ $ valuesMap = array_combine ($ values , array_map (strlen (...), $ values ));
731
+ assert ($ valuesMap !== false );
732
+ arsort ($ valuesMap );
733
+
734
+ return array_keys ($ valuesMap );
735
+ };
736
+ $ this ->reserved = $ sortByLengthFx ($ this ->reserved );
737
+ $ this ->reservedToplevel = $ sortByLengthFx ($ this ->reservedToplevel );
738
+ $ this ->reservedNewline = $ sortByLengthFx ($ this ->reservedNewline );
739
+ $ this ->functions = $ sortByLengthFx ($ this ->functions );
733
740
734
741
// Set up regular expressions
735
742
$ this ->regexBoundaries = '( ' . implode (
0 commit comments