Skip to content

Commit 4ac7a28

Browse files
committed
Make sure keywords are single upper words
No multi-word reserved keyword exist in any SQL spec.
1 parent 2f84308 commit 4ac7a28

5 files changed

+50
-24
lines changed

src/Tokenizer.php

+1-5
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ final class Tokenizer
5050
'CASE',
5151
'CHANGE',
5252
'CHANGED',
53-
'CHARACTER SET',
5453
'CHARSET',
5554
'CHECK',
5655
'CHECKSUM',
@@ -68,7 +67,7 @@ final class Tokenizer
6867
'CONVERT',
6968
'CREATE',
7069
'CROSS',
71-
'CURRENT ROW',
70+
'CURRENT',
7271
'CURRENT_TIMESTAMP',
7372
'DATABASE',
7473
'DATABASES',
@@ -182,12 +181,9 @@ final class Tokenizer
182181
'MYISAM',
183182
'NAMES',
184183
'NATURAL',
185-
'NO OTHERS',
186184
'NOT',
187185
'NULL',
188186
'OFFSET',
189-
'ON DELETE',
190-
'ON UPDATE',
191187
'ON',
192188
'OPEN',
193189
'OPTIMIZE',

tests/TokenizerTest.php

+30
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,39 @@
77
use Doctrine\SqlFormatter\Tokenizer;
88
use PHPUnit\Framework\Attributes\DoesNotPerformAssertions;
99
use PHPUnit\Framework\TestCase;
10+
use ReflectionClass;
11+
12+
use function array_filter;
13+
use function preg_match;
14+
use function strtoupper;
1015

1116
final class TokenizerTest extends TestCase
1217
{
18+
/**
19+
* @param 'reserved'|'reservedToplevel'|'reservedNewline' $propertyName
20+
*
21+
* @return list<string>
22+
*/
23+
private function getTokenizerList(string $propertyName): array
24+
{
25+
$tokenizerReflClass = new ReflectionClass(Tokenizer::class);
26+
/** @var list<string> $res */
27+
$res = $tokenizerReflClass->getProperty($propertyName)->getDefaultValue();
28+
29+
return $res;
30+
}
31+
32+
public function testKeywordsReservedAreUpperCasedAndWithoutWhitespace(): void
33+
{
34+
$tokenizerReserved = $this->getTokenizerList('reserved');
35+
36+
$kwsDiff = array_filter($tokenizerReserved, static function ($v) {
37+
return $v !== strtoupper($v) || preg_match('~\s~', $v) !== 0;
38+
});
39+
40+
self::assertSame([], $kwsDiff);
41+
}
42+
1343
#[DoesNotPerformAssertions]
1444
public function testThereAreNoRegressions(): void
1545
{

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="font-weight:bold;">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="font-weight:bold;">CURRENT</span> <span style="font-weight:bold;">ROW</span>
927+
<span style="font-weight:bold;">EXCLUDE</span> <span style="font-weight:bold;">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="font-weight:bold;">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="font-weight:bold;">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="font-weight:bold;">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>

0 commit comments

Comments
 (0)