Skip to content

Commit 9f752ed

Browse files
committed
sql,builtins: add nil-check for functions that use evalCtx.Regions
The optimizer tests do not initialize the `evalCtx.Regions` field. This could previously cause NPE when the optimizer attempted constant folding for a function that uses the field. This commit hardens all such builtin functions against NPE. Epic: None Release note: None
1 parent 9d5a1fa commit 9f752ed

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

pkg/sql/sem/builtins/builtins.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7571,6 +7571,10 @@ the locality flag on node startup. Returns an error if no region is set.`,
75717571
},
75727572
stringOverload1(
75737573
func(ctx context.Context, evalCtx *eval.Context, s string) (tree.Datum, error) {
7574+
// Check for nil evalCtx.Regions, which can happen in tests.
7575+
if evalCtx.Regions == nil {
7576+
return nil, nilRegionsError
7577+
}
75747578
regionConfig, err := evalCtx.Regions.CurrentDatabaseRegionConfig(ctx)
75757579
if err != nil {
75767580
return nil, err
@@ -7604,6 +7608,10 @@ the locality flag on node startup. Returns an error if no region is set.`,
76047608
Types: tree.ParamTypes{},
76057609
ReturnType: tree.FixedReturnType(types.String),
76067610
Fn: func(ctx context.Context, evalCtx *eval.Context, arg tree.Datums) (tree.Datum, error) {
7611+
// Check for nil evalCtx.Regions, which can happen in tests.
7612+
if evalCtx.Regions == nil {
7613+
return nil, nilRegionsError
7614+
}
76077615
regionConfig, err := evalCtx.Regions.CurrentDatabaseRegionConfig(ctx)
76087616
if err != nil {
76097617
return nil, err
@@ -7643,6 +7651,10 @@ the locality flag on node startup. Returns an error if no region is set.`,
76437651
Types: tree.ParamTypes{},
76447652
ReturnType: tree.FixedReturnType(types.Bool),
76457653
Fn: func(ctx context.Context, evalCtx *eval.Context, args tree.Datums) (tree.Datum, error) {
7654+
// Check for nil evalCtx.Regions, which can happen in tests.
7655+
if evalCtx.Regions == nil {
7656+
return nil, nilRegionsError
7657+
}
76467658
if err := evalCtx.Regions.ValidateAllMultiRegionZoneConfigsInCurrentDatabase(
76477659
ctx,
76487660
); err != nil {
@@ -7668,6 +7680,10 @@ the locality flag on node startup. Returns an error if no region is set.`,
76687680
Fn: func(ctx context.Context, evalCtx *eval.Context, args tree.Datums) (tree.Datum, error) {
76697681
id := int64(*args[0].(*tree.DInt))
76707682

7683+
// Check for nil evalCtx.Regions, which can happen in tests.
7684+
if evalCtx.Regions == nil {
7685+
return nil, nilRegionsError
7686+
}
76717687
if err := evalCtx.Regions.ResetMultiRegionZoneConfigsForTable(
76727688
ctx,
76737689
id,
@@ -7694,6 +7710,10 @@ table.`,
76947710
Fn: func(ctx context.Context, evalCtx *eval.Context, args tree.Datums) (tree.Datum, error) {
76957711
id := int64(*args[0].(*tree.DInt))
76967712

7713+
// Check for nil evalCtx.Regions, which can happen in tests.
7714+
if evalCtx.Regions == nil {
7715+
return nil, nilRegionsError
7716+
}
76977717
if err := evalCtx.Regions.ResetMultiRegionZoneConfigsForDatabase(
76987718
ctx,
76997719
id,
@@ -12426,3 +12446,5 @@ func exprSliceToStrSlice(exprs []tree.Expr) []string {
1242612446
return tree.AsStringWithFlags(expr, tree.FmtBareStrings)
1242712447
})
1242812448
}
12449+
12450+
var nilRegionsError = errors.AssertionFailedf("evalCtx.Regions is nil")

0 commit comments

Comments
 (0)