Skip to content

Commit 78c8eee

Browse files
committed
make sure keywords are single upper words
1 parent 40a34ac commit 78c8eee

5 files changed

+35
-24
lines changed

src/Tokenizer.php

-5
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ final class Tokenizer
5353
'CASE',
5454
'CHANGE',
5555
'CHANGED',
56-
'CHARACTER SET',
5756
'CHARSET',
5857
'CHECK',
5958
'CHECKSUM',
@@ -71,7 +70,6 @@ final class Tokenizer
7170
'CONVERT',
7271
'CREATE',
7372
'CROSS',
74-
'CURRENT ROW',
7573
'CURRENT_TIMESTAMP',
7674
'DATABASE',
7775
'DATABASES',
@@ -196,12 +194,9 @@ final class Tokenizer
196194
'MYISAM',
197195
'NAMES',
198196
'NATURAL',
199-
'NO OTHERS',
200197
'NOT',
201198
'NULL',
202199
'OFFSET',
203-
'ON DELETE',
204-
'ON UPDATE',
205200
'ON',
206201
'OPEN',
207202
'OPTIMIZE',

tests/TokenizerTest.php

+16
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,26 @@
1010
use ReflectionClass;
1111

1212
use function array_diff;
13+
use function array_filter;
1314
use function explode;
15+
use function preg_match;
16+
use function strtoupper;
1417

1518
final class TokenizerTest extends TestCase
1619
{
20+
public function testKeywordsReservedAreUpperCasedAndWithoutWhitespace(): void
21+
{
22+
$tokenizerReflClass = new ReflectionClass(Tokenizer::class);
23+
/** @var list<string> $tokenizerReserved */
24+
$tokenizerReserved = $tokenizerReflClass->getProperty('reserved')->getDefaultValue();
25+
26+
$kwsDiff = array_filter($tokenizerReserved, static function ($v) {
27+
return $v !== strtoupper($v) || preg_match('~\s~', $v) !== 0;
28+
});
29+
30+
self::assertSame([], $kwsDiff);
31+
}
32+
1733
public function testKeywordsReservedToplevelAndNewlineAreReserved(): void
1834
{
1935
$tokenizerReflClass = new ReflectionClass(Tokenizer::class);

tests/clihighlight.txt

+7-7
Original file line numberDiff line numberDiff line change
@@ -915,31 +915,31 @@
915915
c
916916
GROUPS
917917
BETWEEN UNBOUNDED PRECEDING
918-
AND CURRENT ROW
919-
EXCLUDE NO OTHERS
918+
AND CURRENT ROW
919+
EXCLUDE NO OTHERS
920920
) AS no_others,
921921
GROUP_CONCAT(b, '.') OVER (
922922
ORDER BY
923923
c
924924
GROUPS
925925
BETWEEN UNBOUNDED PRECEDING
926-
AND CURRENT ROW
927-
EXCLUDE CURRENT ROW
926+
AND CURRENT ROW
927+
EXCLUDE CURRENT ROW
928928
) AS current_row,
929929
GROUP_CONCAT(b, '.') OVER (
930930
ORDER BY
931931
c
932932
GROUPS
933933
BETWEEN UNBOUNDED PRECEDING
934-
AND CURRENT ROW
934+
AND CURRENT ROW
935935
EXCLUDE GROUP
936936
) AS grp,
937937
GROUP_CONCAT(b, '.') OVER (
938938
ORDER BY
939939
c
940940
GROUPS
941941
BETWEEN UNBOUNDED PRECEDING
942-
AND CURRENT ROW
942+
AND CURRENT ROW
943943
EXCLUDE TIES
944944
) AS tie,
945945
GROUP_CONCAT(b, '.') FILTER (
@@ -990,7 +990,7 @@
990990
ORDER BY
991991
RevenueYear
992992
ROWS
993-
BETWEEN CURRENT ROW
993+
BETWEEN CURRENT ROW
994994
AND UNBOUNDED FOLLOWING
995995
) AS MinRevenueBeyond
996996
FROM

tests/format-highlight.html

+7-7
Original file line numberDiff line numberDiff line change
@@ -915,31 +915,31 @@
915915
<span style="color: #333;">c</span>
916916
<span style="font-weight:bold;">GROUPS</span>
917917
<span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">PRECEDING</span>
918-
<span style="font-weight:bold;">AND</span> <span style="font-weight:bold;">CURRENT ROW</span>
919-
<span style="font-weight:bold;">EXCLUDE</span> <span style="font-weight:bold;">NO OTHERS</span>
918+
<span style="font-weight:bold;">AND</span> <span style="color: #333;">CURRENT</span> <span style="font-weight:bold;">ROW</span>
919+
<span style="font-weight:bold;">EXCLUDE</span> <span style="color: #333;">NO</span> <span style="color: #333;">OTHERS</span>
920920
) <span style="font-weight:bold;">AS</span> <span style="color: #333;">no_others</span><span >,</span>
921921
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">OVER</span> (
922922
<span style="font-weight:bold;">ORDER BY</span>
923923
<span style="color: #333;">c</span>
924924
<span style="font-weight:bold;">GROUPS</span>
925925
<span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">PRECEDING</span>
926-
<span style="font-weight:bold;">AND</span> <span style="font-weight:bold;">CURRENT ROW</span>
927-
<span style="font-weight:bold;">EXCLUDE</span> <span style="font-weight:bold;">CURRENT ROW</span>
926+
<span style="font-weight:bold;">AND</span> <span style="color: #333;">CURRENT</span> <span style="font-weight:bold;">ROW</span>
927+
<span style="font-weight:bold;">EXCLUDE</span> <span style="color: #333;">CURRENT</span> <span style="font-weight:bold;">ROW</span>
928928
) <span style="font-weight:bold;">AS</span> <span style="color: #333;">current_row</span><span >,</span>
929929
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">OVER</span> (
930930
<span style="font-weight:bold;">ORDER BY</span>
931931
<span style="color: #333;">c</span>
932932
<span style="font-weight:bold;">GROUPS</span>
933933
<span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">PRECEDING</span>
934-
<span style="font-weight:bold;">AND</span> <span style="font-weight:bold;">CURRENT ROW</span>
934+
<span style="font-weight:bold;">AND</span> <span style="color: #333;">CURRENT</span> <span style="font-weight:bold;">ROW</span>
935935
<span style="font-weight:bold;">EXCLUDE</span> <span style="font-weight:bold;">GROUP</span>
936936
) <span style="font-weight:bold;">AS</span> <span style="color: #333;">grp</span><span >,</span>
937937
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">OVER</span> (
938938
<span style="font-weight:bold;">ORDER BY</span>
939939
<span style="color: #333;">c</span>
940940
<span style="font-weight:bold;">GROUPS</span>
941941
<span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">PRECEDING</span>
942-
<span style="font-weight:bold;">AND</span> <span style="font-weight:bold;">CURRENT ROW</span>
942+
<span style="font-weight:bold;">AND</span> <span style="color: #333;">CURRENT</span> <span style="font-weight:bold;">ROW</span>
943943
<span style="font-weight:bold;">EXCLUDE</span> <span style="font-weight:bold;">TIES</span>
944944
) <span style="font-weight:bold;">AS</span> <span style="color: #333;">tie</span><span >,</span>
945945
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">FILTER</span> (
@@ -990,7 +990,7 @@
990990
<span style="font-weight:bold;">ORDER BY</span>
991991
<span style="color: #333;">RevenueYear</span>
992992
<span style="font-weight:bold;">ROWS</span>
993-
<span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">CURRENT ROW</span>
993+
<span style="font-weight:bold;">BETWEEN</span> <span style="color: #333;">CURRENT</span> <span style="font-weight:bold;">ROW</span>
994994
<span style="font-weight:bold;">AND</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">FOLLOWING</span>
995995
) <span style="font-weight:bold;">AS</span> <span style="color: #333;">MinRevenueBeyond</span>
996996
<span style="font-weight:bold;">FROM</span>

tests/highlight.html

+5-5
Original file line numberDiff line numberDiff line change
@@ -288,18 +288,18 @@
288288
<span style="font-weight:bold;">WHERE</span> <span style="color: #333;">cte1</span><span >.</span><span style="color: #333;">a</span> <span >=</span> <span style="color: #333;">cte2</span><span >.</span><span style="color: #333;">c</span><span >;</span></pre>
289289
---
290290
<pre style="color: black; background-color: white;"><span style="font-weight:bold;">SELECT</span> <span style="color: #333;">a</span><span >,</span>
291-
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">c</span> <span style="font-weight:bold;">GROUPS</span> <span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">PRECEDING</span> <span style="font-weight:bold;">AND</span> <span style="font-weight:bold;">CURRENT ROW</span> <span style="font-weight:bold;">EXCLUDE</span> <span style="font-weight:bold;">NO OTHERS</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">no_others</span><span >,</span>
292-
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">c</span> <span style="font-weight:bold;">GROUPS</span> <span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">PRECEDING</span> <span style="font-weight:bold;">AND</span> <span style="font-weight:bold;">CURRENT ROW</span> <span style="font-weight:bold;">EXCLUDE</span> <span style="font-weight:bold;">CURRENT ROW</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">current_row</span><span >,</span>
293-
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">c</span> <span style="font-weight:bold;">GROUPS</span> <span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">PRECEDING</span> <span style="font-weight:bold;">AND</span> <span style="font-weight:bold;">CURRENT ROW</span> <span style="font-weight:bold;">EXCLUDE</span> <span style="font-weight:bold;">GROUP</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">grp</span><span >,</span>
294-
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">c</span> <span style="font-weight:bold;">GROUPS</span> <span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">PRECEDING</span> <span style="font-weight:bold;">AND</span> <span style="font-weight:bold;">CURRENT ROW</span> <span style="font-weight:bold;">EXCLUDE</span> <span style="font-weight:bold;">TIES</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">tie</span><span >,</span>
291+
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">c</span> <span style="font-weight:bold;">GROUPS</span> <span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">PRECEDING</span> <span style="font-weight:bold;">AND</span> <span style="color: #333;">CURRENT</span> <span style="font-weight:bold;">ROW</span> <span style="font-weight:bold;">EXCLUDE</span> <span style="color: #333;">NO</span> <span style="color: #333;">OTHERS</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">no_others</span><span >,</span>
292+
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">c</span> <span style="font-weight:bold;">GROUPS</span> <span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">PRECEDING</span> <span style="font-weight:bold;">AND</span> <span style="color: #333;">CURRENT</span> <span style="font-weight:bold;">ROW</span> <span style="font-weight:bold;">EXCLUDE</span> <span style="color: #333;">CURRENT</span> <span style="font-weight:bold;">ROW</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">current_row</span><span >,</span>
293+
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">c</span> <span style="font-weight:bold;">GROUPS</span> <span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">PRECEDING</span> <span style="font-weight:bold;">AND</span> <span style="color: #333;">CURRENT</span> <span style="font-weight:bold;">ROW</span> <span style="font-weight:bold;">EXCLUDE</span> <span style="font-weight:bold;">GROUP</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">grp</span><span >,</span>
294+
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">c</span> <span style="font-weight:bold;">GROUPS</span> <span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">PRECEDING</span> <span style="font-weight:bold;">AND</span> <span style="color: #333;">CURRENT</span> <span style="font-weight:bold;">ROW</span> <span style="font-weight:bold;">EXCLUDE</span> <span style="font-weight:bold;">TIES</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">tie</span><span >,</span>
295295
<span style="font-weight:bold;">GROUP_CONCAT</span>(<span style="color: #333;">b</span><span >,</span> <span style="color: blue;">'.'</span>) <span style="font-weight:bold;">FILTER</span> (<span style="font-weight:bold;">WHERE</span> <span style="color: #333;">c</span> <span >!</span><span >=</span> <span style="color: blue;">'two'</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">a</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">filtered</span><span >,</span>
296296
<span style="font-weight:bold;">CONVERT</span>(<span style="color: #333;">VARCHAR</span>(<span style="color: green;">20</span>)<span >,</span> <span style="font-weight:bold;">AVG</span>(<span style="color: #333;">SalesYTD</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">PARTITION BY</span> <span style="color: #333;">TerritoryID</span> <span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">DATEPART</span>(<span style="color: #333;">yy</span><span >,</span> <span style="color: #333;">ModifiedDate</span>))<span >,</span> <span style="color: green;">1</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">MovingAvg</span><span >,</span>
297297
<span style="font-weight:bold;">AVG</span>(<span style="color: #333;">starting_salary</span>) <span style="font-weight:bold;">OVER</span> <span style="color: #333;">w2</span> <span style="color: #333;">AVG</span><span >,</span>
298298
<span style="font-weight:bold;">MIN</span>(<span style="color: #333;">starting_salary</span>) <span style="font-weight:bold;">OVER</span> <span style="color: #333;">w2</span> <span style="color: #333;">MIN_STARTING_SALARY</span><span >,</span>
299299
<span style="font-weight:bold;">MAX</span>(<span style="color: #333;">starting_salary</span>) <span style="font-weight:bold;">OVER</span> (<span style="color: #333;">w1</span> <span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">hire_date</span>)<span >,</span>
300300
<span style="font-weight:bold;">LISTAGG</span>(<span style="color: #333;">arg</span><span >,</span> <span style="color: blue;">','</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">PARTITION BY</span> <span style="color: #333;">part</span> <span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">ord</span> <span style="font-weight:bold;">ROWS</span> <span style="font-weight:bold;">BETWEEN</span> <span style="color: green;">1</span> <span style="font-weight:bold;">PRECEDING</span> <span style="font-weight:bold;">AND</span> <span style="color: green;">1</span> <span style="font-weight:bold;">FOLLOWING</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">LISTAGG_ROWS</span><span >,</span>
301301
<span style="font-weight:bold;">LISTAGG</span>(<span style="color: #333;">arg</span><span >,</span> <span style="color: blue;">','</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">PARTITION BY</span> <span style="color: #333;">part</span> <span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">ord</span> <span style="font-weight:bold;">RANGE</span> <span style="font-weight:bold;">BETWEEN</span> <span style="color: green;">1</span> <span style="font-weight:bold;">PRECEDING</span> <span style="font-weight:bold;">AND</span> <span style="color: green;">1</span> <span style="font-weight:bold;">FOLLOWING</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">LISTAGG_RANGE</span><span >,</span>
302-
<span style="font-weight:bold;">MIN</span>(<span style="color: #333;">Revenue</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">PARTITION BY</span> <span style="color: #333;">DepartmentID</span> <span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">RevenueYear</span> <span style="font-weight:bold;">ROWS</span> <span style="font-weight:bold;">BETWEEN</span> <span style="font-weight:bold;">CURRENT ROW</span> <span style="font-weight:bold;">AND</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">FOLLOWING</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">MinRevenueBeyond</span>
302+
<span style="font-weight:bold;">MIN</span>(<span style="color: #333;">Revenue</span>) <span style="font-weight:bold;">OVER</span> (<span style="font-weight:bold;">PARTITION BY</span> <span style="color: #333;">DepartmentID</span> <span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">RevenueYear</span> <span style="font-weight:bold;">ROWS</span> <span style="font-weight:bold;">BETWEEN</span> <span style="color: #333;">CURRENT</span> <span style="font-weight:bold;">ROW</span> <span style="font-weight:bold;">AND</span> <span style="font-weight:bold;">UNBOUNDED</span> <span style="font-weight:bold;">FOLLOWING</span>) <span style="font-weight:bold;">AS</span> <span style="color: #333;">MinRevenueBeyond</span>
303303
<span style="font-weight:bold;">FROM</span> <span style="color: #333;">t1</span>
304304
<span style="font-weight:bold;">WINDOW</span> <span style="color: #333;">w1</span> <span style="font-weight:bold;">AS</span> (<span style="font-weight:bold;">PARTITION BY</span> <span style="color: #333;">department</span><span >,</span> <span style="color: #333;">division</span>)<span >,</span> <span style="color: #333;">w2</span> <span style="font-weight:bold;">AS</span> (<span style="color: #333;">w1</span> <span style="font-weight:bold;">ORDER BY</span> <span style="color: #333;">hire_date</span>)<span >;</span></pre>
305305
---

0 commit comments

Comments
 (0)