Skip to content

Commit 72aca73

Browse files
committed
sem/builtins: break dependency on sql/parser
This is achieved by injecting a couple of functions when initializing the sql package. Release note: None
1 parent f08d331 commit 72aca73

File tree

11 files changed

+43
-22
lines changed

11 files changed

+43
-22
lines changed

pkg/sql/exec_util.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,10 @@ func init() {
151151
// DoParserInjection performs all the necessary sql/parser injections within the
152152
// sql directory.
153153
func DoParserInjection() {
154+
parserutils.Parse = parser.Parse
155+
parserutils.ParseExpr = parser.ParseExpr
154156
parserutils.ParseOne = parser.ParseOne
157+
parserutils.ParseQualifiedTableName = parser.ParseQualifiedTableName
155158
}
156159

157160
// ClusterOrganization is the organization name.

pkg/sql/opt/workloadindexrec/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ go_library(
99
importpath = "github.com/cockroachdb/cockroach/pkg/sql/opt/workloadindexrec",
1010
visibility = ["//visibility:public"],
1111
deps = [
12-
"//pkg/sql/parser",
12+
"//pkg/sql/parserutils",
1313
"//pkg/sql/sem/eval",
1414
"//pkg/sql/sem/idxtype",
1515
"//pkg/sql/sem/tree",

pkg/sql/opt/workloadindexrec/workload_indexrecs.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"context"
1010
"regexp"
1111

12-
"github.com/cockroachdb/cockroach/pkg/sql/parser"
12+
"github.com/cockroachdb/cockroach/pkg/sql/parserutils"
1313
"github.com/cockroachdb/cockroach/pkg/sql/sem/eval"
1414
"github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype"
1515
"github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
@@ -72,7 +72,6 @@ func collectIndexRecs(
7272
return nil, nil, err
7373
}
7474

75-
var p parser.Parser
7675
var cis []createIndex
7776
var dis []dropIndex
7877
var ok bool
@@ -118,7 +117,7 @@ func collectIndexRecs(
118117
continue
119118
}
120119

121-
stmts, err := p.Parse(indexStrArr[2])
120+
stmts, err := parserutils.Parse(indexStrArr[2])
122121
if err != nil {
123122
err = errors.CombineErrors(errors.Newf("%s is not a valid index operation!", indexStrArr[2]), indexRecs.Close())
124123
indexRecs = nil

pkg/sql/parserutils/utils.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,26 @@ func PopulateErrorDetails(
5757
return errors.WithDetail(retErr, buf.String())
5858
}
5959

60+
// Parse is the same as sql/parser.Parse but is injected to avoid a dependency
61+
// on the parser package.
62+
var Parse = func(sql string) (statements.Statements, error) {
63+
return statements.Statements{}, errors.AssertionFailedf("sql.DoParserInjection hasn't been called")
64+
}
65+
66+
// ParseExpr is the same as sql/parser.ParseExpr but is injected to avoid a
67+
// dependency on the parser package.
68+
var ParseExpr = func(sql string) (tree.Expr, error) {
69+
return nil, errors.AssertionFailedf("sql.DoParserInjection hasn't been called")
70+
}
71+
6072
// ParseOne is the same as sql/parser.ParseOne but is injected to avoid a
6173
// dependency on the parser package.
6274
var ParseOne = func(sql string) (statements.Statement[tree.Statement], error) {
6375
return statements.Statement[tree.Statement]{}, errors.AssertionFailedf("sql.DoParserInjection hasn't been called")
6476
}
77+
78+
// ParseQualifiedTableName is the same as sql/parser.ParseQualifiedTableName but
79+
// is injected to avoid a dependency on the parser package.
80+
var ParseQualifiedTableName = func(sql string) (*tree.TableName, error) {
81+
return nil, errors.AssertionFailedf("sql.DoParserInjection hasn't been called")
82+
}

pkg/sql/rowenc/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ go_library(
2525
"//pkg/sql/catalog/descpb",
2626
"//pkg/sql/catalog/fetchpb",
2727
"//pkg/sql/inverted",
28-
"//pkg/sql/parser",
28+
"//pkg/sql/parserutils",
2929
"//pkg/sql/rowenc/keyside",
3030
"//pkg/sql/rowenc/rowencpb",
3131
"//pkg/sql/rowenc/valueside",

pkg/sql/rowenc/roundtrip_format.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ package rowenc
88
import (
99
"context"
1010

11-
"github.com/cockroachdb/cockroach/pkg/sql/parser"
11+
"github.com/cockroachdb/cockroach/pkg/sql/parserutils"
1212
"github.com/cockroachdb/cockroach/pkg/sql/sem/eval"
1313
"github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
1414
"github.com/cockroachdb/cockroach/pkg/sql/types"
@@ -37,7 +37,7 @@ func ParseDatumStringAs(
3737
func parseAsTyp(
3838
ctx context.Context, evalCtx *eval.Context, semaCtx *tree.SemaContext, typ *types.T, s string,
3939
) (tree.Datum, error) {
40-
expr, err := parser.ParseExpr(s)
40+
expr, err := parserutils.ParseExpr(s)
4141
if err != nil {
4242
return nil, err
4343
}

pkg/sql/sem/builtins/BUILD.bazel

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ go_library(
7171
"//pkg/sql/memsize",
7272
"//pkg/sql/oidext",
7373
"//pkg/sql/opt/workloadindexrec",
74-
"//pkg/sql/parser",
74+
"//pkg/sql/parserutils",
7575
"//pkg/sql/pgwire/pgcode",
7676
"//pkg/sql/pgwire/pgerror",
7777
"//pkg/sql/pgwire/pgnotice",
@@ -242,5 +242,6 @@ disallowed_imports_test(
242242
"//pkg/sql/catalog/schemadesc",
243243
"//pkg/sql/catalog/dbdesc",
244244
"//pkg/sql/catalog/typedesc",
245+
"//pkg/sql/parser",
245246
],
246247
)

pkg/sql/sem/builtins/builtins.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ import (
4848
"github.com/cockroachdb/cockroach/pkg/sql/colexecerror"
4949
"github.com/cockroachdb/cockroach/pkg/sql/lex"
5050
"github.com/cockroachdb/cockroach/pkg/sql/lexbase"
51-
"github.com/cockroachdb/cockroach/pkg/sql/parser"
51+
"github.com/cockroachdb/cockroach/pkg/sql/parserutils"
5252
"github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgcode"
5353
"github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror"
5454
"github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgnotice"
@@ -7820,7 +7820,7 @@ enabled.`,
78207820
},
78217821
stringOverload1(
78227822
func(_ context.Context, _ *eval.Context, s string) (tree.Datum, error) {
7823-
stmt, err := parser.ParseOne(s)
7823+
stmt, err := parserutils.ParseOne(s)
78247824
if err != nil {
78257825
// Return the same statement if it does not parse.
78267826
// This can happen for invalid zone config state, in which case
@@ -8659,7 +8659,7 @@ specified store on the node it's run from. One of 'mvccGC', 'merge', 'split',
86598659
return tree.NewDString(""), nil
86608660
}
86618661

8662-
parsed, err := parser.ParseOne(sql)
8662+
parsed, err := parserutils.ParseOne(sql)
86638663
if err != nil {
86648664
// If parsing is unsuccessful, we shouldn't return an error, however
86658665
// we can't return the original stmt since this function is used to
@@ -8693,7 +8693,7 @@ specified store on the node it's run from. One of 'mvccGC', 'merge', 'split',
86938693
sqlNoConstants := ""
86948694

86958695
if len(sql) != 0 {
8696-
parsed, err := parser.ParseOne(sql)
8696+
parsed, err := parserutils.ParseOne(sql)
86978697
// Leave result as empty string on parsing error.
86988698
if err == nil {
86998699
sqlNoConstants = tree.AsStringWithFlags(parsed.AST, tree.FmtHideConstants)
@@ -8788,7 +8788,7 @@ specified store on the node it's run from. One of 'mvccGC', 'merge', 'split',
87888788
},
87898789
stringOverload1(
87908790
func(_ context.Context, _ *eval.Context, sql string) (tree.Datum, error) {
8791-
parsed, err := parser.ParseOne(sql)
8791+
parsed, err := parserutils.ParseOne(sql)
87928792
if err != nil {
87938793
// If parsing was unsuccessful, mark the entire string as redactable.
87948794
return tree.NewDString(string(redact.Sprintf("%s", sql))), nil //nolint:returnerrcheck
@@ -8821,7 +8821,7 @@ specified store on the node it's run from. One of 'mvccGC', 'merge', 'split',
88218821
sql := string(tree.MustBeDString(sqlDatum))
88228822
sqlRedactable := ""
88238823

8824-
parsed, err := parser.ParseOne(sql)
8824+
parsed, err := parserutils.ParseOne(sql)
88258825
if err != nil {
88268826
// If parsing was unsuccessful, mark the entire string as redactable.
88278827
sqlRedactable = string(redact.Sprintf("%s", sql))
@@ -12416,7 +12416,7 @@ func prettyStatementCustomConfig(
1241612416
}
1241712417

1241812418
func prettyStatement(p tree.PrettyCfg, stmt string) (string, error) {
12419-
stmts, err := parser.Parse(stmt)
12419+
stmts, err := parserutils.Parse(stmt)
1242012420
if err != nil {
1242112421
return "", err
1242212422
}
@@ -12748,7 +12748,7 @@ func makeBackupASTFromStmt(
1274812748
backupStmt tree.Datum,
1274912749
) (*tree.Backup, jobspb.BackupEncryptionOptions, error) {
1275012750
stmt := string(tree.MustBeDString(backupStmt))
12751-
ast, err := parser.ParseOne(stmt)
12751+
ast, err := parserutils.ParseOne(stmt)
1275212752
if err != nil {
1275312753
return nil, jobspb.BackupEncryptionOptions{}, err
1275412754
}

pkg/sql/sem/builtins/generator_builtins.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
"github.com/cockroachdb/cockroach/pkg/settings"
2525
"github.com/cockroachdb/cockroach/pkg/sql/lexbase"
2626
"github.com/cockroachdb/cockroach/pkg/sql/opt/workloadindexrec"
27-
"github.com/cockroachdb/cockroach/pkg/sql/parser"
27+
"github.com/cockroachdb/cockroach/pkg/sql/parserutils"
2828
"github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgcode"
2929
"github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror"
3030
"github.com/cockroachdb/cockroach/pkg/sql/privilege"
@@ -4060,7 +4060,7 @@ func makeInternallyExecutedQueryGeneratorOverload(
40604060
// internal executor will parse the query too, but we'd get an
40614061
// assertion failure error if we gave it more than one statement -
40624062
// we catch those cases here.
4063-
stmts, err := parser.Parse(query)
4063+
stmts, err := parserutils.Parse(query)
40644064
if err != nil {
40654065
return nil, err
40664066
}

pkg/sql/sem/builtins/geo_builtins.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
"github.com/cockroachdb/cockroach/pkg/geo/twkb"
2424
"github.com/cockroachdb/cockroach/pkg/kv"
2525
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb"
26-
"github.com/cockroachdb/cockroach/pkg/sql/parser"
26+
"github.com/cockroachdb/cockroach/pkg/sql/parserutils"
2727
"github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgcode"
2828
"github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror"
2929
"github.com/cockroachdb/cockroach/pkg/sql/sem/builtins/builtinconstants"
@@ -7988,7 +7988,7 @@ func applyGeoindexConfigStorageParams(
79887988
ctx context.Context, evalCtx *eval.Context, cfg geopb.Config, params string,
79897989
) (geopb.Config, error) {
79907990
indexDesc := &descpb.IndexDescriptor{GeoConfig: cfg}
7991-
stmt, err := parser.ParseOne(
7991+
stmt, err := parserutils.ParseOne(
79927992
fmt.Sprintf("CREATE INDEX t_idx ON t USING GIST(geom) WITH (%s)", params),
79937993
)
79947994
if err != nil {

0 commit comments

Comments
 (0)