Skip to content

Commit a96b522

Browse files
craig[bot]yuzefovich
craig[bot]
andcommitted
Merge #147386
147386: sql/parser: remove no longer used keywords r=yuzefovich a=yuzefovich **plpgsql/parser: rename bazel target name for the package** For some reason, Go library bazel target for the PLpgSQL parser package was named `plpgparser`. This creates a problem with an attempt to add a test that lives in `parser` (as opposed to `parser_test`), so rename the target to `parser` which follows the convention elsewhere. (I eventually decided against adding a test but thought it'd be nice to clean things up.) **sql/parser: remove no longer used keywords** This commit removes a handful of unreserved keywords that are no longer used. Additionally, it refactors existing `reserved_keywords.awk` into a shell script that is run via a unit test to assert that no longer used keywords get removed promptly. (I tried applying the same script to PLpgSQL and JSONPath parsers, and it found nothing for the latter and produced many false positives for the former, so I decided to not include the corresponding test.) Epic: None Release note: None Co-authored-by: Yahor Yuzefovich <[email protected]>
2 parents 24e1ef3 + f50a1b4 commit a96b522

File tree

16 files changed

+107
-56
lines changed

16 files changed

+107
-56
lines changed

docs/generated/sql/bnf/stmt_block.bnf

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,6 @@ unreserved_keyword ::=
11101110
| 'BIDIRECTIONAL'
11111111
| 'BINARY'
11121112
| 'BUCKET_COUNT'
1113-
| 'BUNDLE'
11141113
| 'BY'
11151114
| 'BYPASSRLS'
11161115
| 'CACHE'
@@ -1300,7 +1299,6 @@ unreserved_keyword ::=
13001299
| 'MINUTE'
13011300
| 'MINVALUE'
13021301
| 'MODIFYCLUSTERSETTING'
1303-
| 'MODIFYSQLCLUSTERSETTING'
13041302
| 'MULTILINESTRING'
13051303
| 'MULTILINESTRINGM'
13061304
| 'MULTILINESTRINGZ'
@@ -1431,7 +1429,6 @@ unreserved_keyword ::=
14311429
| 'RESTRICTIVE'
14321430
| 'RESUME'
14331431
| 'RETENTION'
1434-
| 'RETRY'
14351432
| 'RETURN'
14361433
| 'RETURNS'
14371434
| 'REVISION_HISTORY'
@@ -1559,9 +1556,7 @@ unreserved_keyword ::=
15591556
| 'VIEW'
15601557
| 'VIEWACTIVITY'
15611558
| 'VIEWACTIVITYREDACTED'
1562-
| 'VIEWCLUSTERMETADATA'
15631559
| 'VIEWCLUSTERSETTING'
1564-
| 'VIEWDEBUG'
15651560
| 'VIRTUAL_CLUSTER_NAME'
15661561
| 'VIRTUAL_CLUSTER'
15671562
| 'VISIBLE'
@@ -3960,7 +3955,6 @@ bare_label_keywords ::=
39603955
| 'BOTH'
39613956
| 'BOX2D'
39623957
| 'BUCKET_COUNT'
3963-
| 'BUNDLE'
39643958
| 'BY'
39653959
| 'BYPASSRLS'
39663960
| 'CACHE'
@@ -4211,7 +4205,6 @@ bare_label_keywords ::=
42114205
| 'MINVALUE'
42124206
| 'MODE'
42134207
| 'MODIFYCLUSTERSETTING'
4214-
| 'MODIFYSQLCLUSTERSETTING'
42154208
| 'MOVE'
42164209
| 'MULTILINESTRING'
42174210
| 'MULTILINESTRINGM'
@@ -4356,7 +4349,6 @@ bare_label_keywords ::=
43564349
| 'RESTRICTIVE'
43574350
| 'RESUME'
43584351
| 'RETENTION'
4359-
| 'RETRY'
43604352
| 'RETURN'
43614353
| 'RETURNS'
43624354
| 'REVISION_HISTORY'
@@ -4511,9 +4503,7 @@ bare_label_keywords ::=
45114503
| 'VIEW'
45124504
| 'VIEWACTIVITY'
45134505
| 'VIEWACTIVITYREDACTED'
4514-
| 'VIEWCLUSTERMETADATA'
45154506
| 'VIEWCLUSTERSETTING'
4516-
| 'VIEWDEBUG'
45174507
| 'VIRTUAL'
45184508
| 'VIRTUAL_CLUSTER_NAME'
45194509
| 'VIRTUAL_CLUSTER'

pkg/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2176,8 +2176,8 @@ GO_TARGETS = [
21762176
"//pkg/sql/physicalplan:physicalplan",
21772177
"//pkg/sql/physicalplan:physicalplan_test",
21782178
"//pkg/sql/plpgsql/parser/lexbase:lexbase",
2179+
"//pkg/sql/plpgsql/parser:parser",
21792180
"//pkg/sql/plpgsql/parser:parser_test",
2180-
"//pkg/sql/plpgsql/parser:plpgparser",
21812181
"//pkg/sql/prep:prep",
21822182
"//pkg/sql/prep:prep_test",
21832183
"//pkg/sql/privilege:privilege",

pkg/sql/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@ go_library(
468468
"//pkg/sql/pgwire/pgwirecancel",
469469
"//pkg/sql/physicalplan",
470470
"//pkg/sql/physicalplan/replicaoracle",
471-
"//pkg/sql/plpgsql/parser:plpgparser",
471+
"//pkg/sql/plpgsql/parser",
472472
"//pkg/sql/prep",
473473
"//pkg/sql/privilege",
474474
"//pkg/sql/protoreflect",

pkg/sql/catalog/redact/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ go_library(
99
"//pkg/sql/catalog/catpb",
1010
"//pkg/sql/catalog/descpb",
1111
"//pkg/sql/parser",
12-
"//pkg/sql/plpgsql/parser:plpgparser",
12+
"//pkg/sql/plpgsql/parser",
1313
"//pkg/sql/schemachanger/scpb",
1414
"//pkg/sql/sem/tree",
1515
"@com_github_cockroachdb_errors//:errors",

pkg/sql/catalog/rewrite/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ go_library(
1919
"//pkg/sql/parser",
2020
"//pkg/sql/pgwire/pgcode",
2121
"//pkg/sql/pgwire/pgerror",
22-
"//pkg/sql/plpgsql/parser:plpgparser",
22+
"//pkg/sql/plpgsql/parser",
2323
"//pkg/sql/schemachanger/scpb",
2424
"//pkg/sql/schemachanger/screl",
2525
"//pkg/sql/sem/catid",

pkg/sql/catalog/tabledesc/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ go_library(
4545
"//pkg/sql/pgwire/pgcode",
4646
"//pkg/sql/pgwire/pgerror",
4747
"//pkg/sql/pgwire/pgnotice",
48-
"//pkg/sql/plpgsql/parser:plpgparser",
48+
"//pkg/sql/plpgsql/parser",
4949
"//pkg/sql/privilege",
5050
"//pkg/sql/rowenc",
5151
"//pkg/sql/schemachanger/scpb",

pkg/sql/opt/optbuilder/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ go_library(
8181
"//pkg/sql/parser/statements",
8282
"//pkg/sql/pgwire/pgcode",
8383
"//pkg/sql/pgwire/pgerror",
84-
"//pkg/sql/plpgsql/parser:plpgparser",
84+
"//pkg/sql/plpgsql/parser",
8585
"//pkg/sql/privilege",
8686
"//pkg/sql/sem/asof",
8787
"//pkg/sql/sem/builtins/builtinsregistry",

pkg/sql/parser/BUILD.bazel

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,16 @@ go_test(
5555
"parse_internal_test.go",
5656
"parse_test.go",
5757
"scanner_test.go",
58+
"unused_keywords_test.go",
5859
":gen-helpmap-test", # keep
5960
],
60-
data = glob(["testdata/**"]),
61+
data = glob(["testdata/**"]) + [
62+
"sql.y",
63+
"unused_keywords.sh",
64+
],
6165
embed = [":parser"],
6266
deps = [
67+
"//pkg/build/bazel",
6368
"//pkg/sql/lexbase",
6469
"//pkg/sql/pgwire/pgerror",
6570
"//pkg/sql/randgen",

pkg/sql/parser/sql.y

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -975,7 +975,7 @@ func (u *sqlSymUnion) doBlockOption() tree.DoBlockOption {
975975

976976
%token <str> BACKUP BACKUPS BACKWARD BATCH BEFORE BEGIN BETWEEN BIDIRECTIONAL BIGINT BIGSERIAL BINARY BIT
977977
%token <str> BUCKET_COUNT
978-
%token <str> BOOLEAN BOTH BOX2D BUNDLE BY BYPASSRLS
978+
%token <str> BOOLEAN BOTH BOX2D BY BYPASSRLS
979979

980980
%token <str> CACHE CALL CALLED CANCEL CANCELQUERY CAPABILITIES CAPABILITY CASCADE CASE CAST CBRT CHANGEFEED CHAR
981981
%token <str> CHARACTER CHARACTERISTICS CHECK CHECK_FILES CLOSE
@@ -1027,7 +1027,7 @@ func (u *sqlSymUnion) doBlockOption() tree.DoBlockOption {
10271027
%token <str> LINESTRING LINESTRINGM LINESTRINGZ LINESTRINGZM
10281028
%token <str> LIST LOCAL LOCALITY LOCALTIME LOCALTIMESTAMP LOCKED LOGGED LOGICAL LOGICALLY LOGIN LOOKUP LOW LSHIFT
10291029

1030-
%token <str> MATCH MATERIALIZED MERGE MINVALUE MAXVALUE METHOD MINUTE MODIFYCLUSTERSETTING MODIFYSQLCLUSTERSETTING MODE MONTH MOVE
1030+
%token <str> MATCH MATERIALIZED MERGE MINVALUE MAXVALUE METHOD MINUTE MODIFYCLUSTERSETTING MODE MONTH MOVE
10311031
%token <str> MULTILINESTRING MULTILINESTRINGM MULTILINESTRINGZ MULTILINESTRINGZM
10321032
%token <str> MULTIPOINT MULTIPOINTM MULTIPOINTZ MULTIPOINTZM
10331033
%token <str> MULTIPOLYGON MULTIPOLYGONM MULTIPOLYGONZ MULTIPOLYGONZM
@@ -1052,7 +1052,7 @@ func (u *sqlSymUnion) doBlockOption() tree.DoBlockOption {
10521052
%token <str> RANGE RANGES READ REAL REASON REASSIGN RECURSIVE RECURRING REDACT REF REFERENCES REFERENCING REFRESH
10531053
%token <str> REGCLASS REGION REGIONAL REGIONS REGNAMESPACE REGPROC REGPROCEDURE REGROLE REGTYPE REINDEX
10541054
%token <str> RELATIVE RELOCATE REMOVE_PATH REMOVE_REGIONS RENAME REPEATABLE REPLACE REPLICATED REPLICATION
1055-
%token <str> RELEASE RESET RESTART RESTORE RESTRICT RESTRICTED RESTRICTIVE RESUME RETENTION RETURNING RETURN RETURNS RETRY REVISION_HISTORY
1055+
%token <str> RELEASE RESET RESTART RESTORE RESTRICT RESTRICTED RESTRICTIVE RESUME RETENTION RETURNING RETURN RETURNS REVISION_HISTORY
10561056
%token <str> REVOKE RIGHT ROLE ROLES ROLLBACK ROLLUP ROUTINES ROW ROWS RSHIFT RULE RUNNING
10571057

10581058
%token <str> SAVEPOINT SCANS SCATTER SCHEDULE SCHEDULES SCROLL SCHEMA SCHEMA_ONLY SCHEMAS SCRUB
@@ -1073,8 +1073,8 @@ func (u *sqlSymUnion) doBlockOption() tree.DoBlockOption {
10731073
%token <str> UNBOUNDED UNCOMMITTED UNIDIRECTIONAL UNION UNIQUE UNKNOWN UNLISTEN UNLOGGED UNSAFE_RESTORE_INCOMPATIBLE_VERSION UNSPLIT
10741074
%token <str> UPDATE UPDATES_CLUSTER_MONITORING_METRICS UPSERT UNSET UNTIL USE USER USERS USING UUID
10751075

1076-
%token <str> VALID VALIDATE VALUE VALUES VARBIT VARCHAR VARIADIC VECTOR VERIFY_BACKUP_TABLE_DATA VIEW VARIABLES VARYING VIEWACTIVITY VIEWACTIVITYREDACTED VIEWDEBUG
1077-
%token <str> VIEWCLUSTERMETADATA VIEWCLUSTERSETTING VIRTUAL VISIBLE INVISIBLE VISIBILITY VOLATILE VOTERS
1076+
%token <str> VALID VALIDATE VALUE VALUES VARBIT VARCHAR VARIADIC VECTOR VERIFY_BACKUP_TABLE_DATA VIEW VARIABLES VARYING VIEWACTIVITY VIEWACTIVITYREDACTED
1077+
%token <str> VIEWCLUSTERSETTING VIRTUAL VISIBLE INVISIBLE VISIBILITY VOLATILE VOTERS
10781078
%token <str> VIRTUAL_CLUSTER_NAME VIRTUAL_CLUSTER
10791079

10801080
%token <str> WHEN WHERE WINDOW WITH WITHIN WITHOUT WORK WRITE
@@ -18137,7 +18137,6 @@ unreserved_keyword:
1813718137
| BIDIRECTIONAL
1813818138
| BINARY
1813918139
| BUCKET_COUNT
18140-
| BUNDLE
1814118140
| BY
1814218141
| BYPASSRLS
1814318142
| CACHE
@@ -18327,7 +18326,6 @@ unreserved_keyword:
1832718326
| MINUTE
1832818327
| MINVALUE
1832918328
| MODIFYCLUSTERSETTING
18330-
| MODIFYSQLCLUSTERSETTING
1833118329
| MULTILINESTRING
1833218330
| MULTILINESTRINGM
1833318331
| MULTILINESTRINGZ
@@ -18458,7 +18456,6 @@ unreserved_keyword:
1845818456
| RESTRICTIVE
1845918457
| RESUME
1846018458
| RETENTION
18461-
| RETRY
1846218459
| RETURN
1846318460
| RETURNS
1846418461
| REVISION_HISTORY
@@ -18586,9 +18583,7 @@ unreserved_keyword:
1858618583
| VIEW
1858718584
| VIEWACTIVITY
1858818585
| VIEWACTIVITYREDACTED
18589-
| VIEWCLUSTERMETADATA
1859018586
| VIEWCLUSTERSETTING
18591-
| VIEWDEBUG
1859218587
| VIRTUAL_CLUSTER_NAME
1859318588
| VIRTUAL_CLUSTER
1859418589
| VISIBLE
@@ -18648,7 +18643,6 @@ bare_label_keywords:
1864818643
| BOTH
1864918644
| BOX2D
1865018645
| BUCKET_COUNT
18651-
| BUNDLE
1865218646
| BY
1865318647
| BYPASSRLS
1865418648
| CACHE
@@ -18899,7 +18893,6 @@ bare_label_keywords:
1889918893
| MINVALUE
1890018894
| MODE
1890118895
| MODIFYCLUSTERSETTING
18902-
| MODIFYSQLCLUSTERSETTING
1890318896
| MOVE
1890418897
| MULTILINESTRING
1890518898
| MULTILINESTRINGM
@@ -19044,7 +19037,6 @@ bare_label_keywords:
1904419037
| RESTRICTIVE
1904519038
| RESUME
1904619039
| RETENTION
19047-
| RETRY
1904819040
| RETURN
1904919041
| RETURNS
1905019042
| REVISION_HISTORY
@@ -19199,9 +19191,7 @@ bare_label_keywords:
1919919191
| VIEW
1920019192
| VIEWACTIVITY
1920119193
| VIEWACTIVITYREDACTED
19202-
| VIEWCLUSTERMETADATA
1920319194
| VIEWCLUSTERSETTING
19204-
| VIEWDEBUG
1920519195
| VIRTUAL
1920619196
| VIRTUAL_CLUSTER_NAME
1920719197
| VIRTUAL_CLUSTER

pkg/sql/parser/unreserved_keywords.awk

Lines changed: 0 additions & 19 deletions
This file was deleted.

pkg/sql/parser/unused_keywords.sh

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/usr/bin/env bash
2+
3+
# Copyright 2025 The Cockroach Authors.
4+
#
5+
# Use of this software is governed by the CockroachDB Software License
6+
# included in the /LICENSE file.
7+
8+
# Usage: unused_keywords.sh pkg/*.y
9+
10+
set -euo pipefail
11+
12+
GRAMMAR_FILE="$1"
13+
14+
if [ -z "$1" ]; then
15+
echo "Usage: $0 <input_grammar_file>"
16+
exit 1
17+
fi
18+
19+
# Find the line in the grammar file where different keyword groups begin - we
20+
# don't want to count occurrences from that point.
21+
line=$(grep -n -m 1 "^unreserved_keyword:$" "$GRAMMAR_FILE" | cut -d: -f1)
22+
23+
# Find all non-reserved keywords.
24+
awk -f <(cat <<'EOF'
25+
/^(cockroachdb_extra_)?reserved_keyword:/ {
26+
keyword = 0
27+
next
28+
}
29+
/^.*_keyword:/ {
30+
keyword = 1
31+
next
32+
}
33+
/^$/ {
34+
keyword = 0
35+
}
36+
{
37+
if (keyword && $NF != "") {
38+
print $NF
39+
}
40+
}
41+
EOF
42+
) < "$GRAMMAR_FILE" | while read -r kw; do
43+
# Count number of times the non-reserved keyword appears before the keyword
44+
# groups - if it's present only once, then it's not actually used and can be
45+
# removed from the grammar.
46+
#
47+
# Note that this could produce false positives in case these keywords are used
48+
# somewhere outside the grammar (for example, in the lexer).
49+
count=$(head -n "$line" "$GRAMMAR_FILE" | grep -c "$kw")
50+
if [ "$count" -le 1 ]; then
51+
echo "$kw"
52+
fi
53+
done
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Copyright 2025 The Cockroach Authors.
2+
//
3+
// Use of this software is governed by the CockroachDB Software License
4+
// included in the /LICENSE file.
5+
6+
package parser_test
7+
8+
import (
9+
"os/exec"
10+
"testing"
11+
12+
"github.com/cockroachdb/cockroach/pkg/build/bazel"
13+
)
14+
15+
func TestUnusedKeywords(t *testing.T) {
16+
grammarPath := "./sql.y"
17+
if bazel.BuiltWithBazel() {
18+
var err error
19+
grammarPath, err = bazel.Runfile("sql.y")
20+
if err != nil {
21+
t.Fatal(err)
22+
}
23+
}
24+
cmd := exec.Command("./unused_keywords.sh", grammarPath)
25+
output, err := cmd.CombinedOutput()
26+
if err != nil {
27+
t.Fatal(err)
28+
}
29+
if len(output) != 0 {
30+
t.Fatalf("found some unused keywords:\n%s", output)
31+
}
32+
}

pkg/sql/plpgsql/parser/BUILD.bazel

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ genrule(
2525
)
2626

2727
go_library(
28-
name = "plpgparser",
28+
name = "parser",
2929
srcs = [
3030
"lexer.go",
3131
"parse.go",
@@ -62,7 +62,7 @@ go_test(
6262
srcs = ["parser_test.go"],
6363
data = glob(["testdata/**"]),
6464
deps = [
65-
":plpgparser",
65+
":parser",
6666
"//pkg/sql/sem/plpgsqltree/utils",
6767
"//pkg/testutils/datapathutils",
6868
"//pkg/testutils/sqlutils",

pkg/sql/schemachanger/scbuild/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ go_library(
3535
"//pkg/sql/parser",
3636
"//pkg/sql/pgwire/pgcode",
3737
"//pkg/sql/pgwire/pgerror",
38-
"//pkg/sql/plpgsql/parser:plpgparser",
38+
"//pkg/sql/plpgsql/parser",
3939
"//pkg/sql/privilege",
4040
"//pkg/sql/schemachanger/scbuild/internal/scbuildstmt",
4141
"//pkg/sql/schemachanger/scdecomp",

pkg/sql/sem/plpgsqltree/utils/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ go_library(
66
importpath = "github.com/cockroachdb/cockroach/pkg/sql/sem/plpgsqltree/utils",
77
visibility = ["//visibility:public"],
88
deps = [
9-
"//pkg/sql/plpgsql/parser:plpgparser",
9+
"//pkg/sql/plpgsql/parser",
1010
"//pkg/sql/sem/plpgsqltree",
1111
"//pkg/sql/sqltelemetry",
1212
],

pkg/testutils/sqlutils/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ go_library(
2323
"//pkg/sql/parser",
2424
"//pkg/sql/parser/statements",
2525
"//pkg/sql/pgwire/pgerror",
26-
"//pkg/sql/plpgsql/parser:plpgparser",
26+
"//pkg/sql/plpgsql/parser",
2727
"//pkg/sql/protoreflect",
2828
"//pkg/sql/sem/catconstants",
2929
"//pkg/sql/sem/tree",

0 commit comments

Comments
 (0)