Skip to content

Commit 1e0e14b

Browse files
authored
Merge pull request #159325 from cockroachdb/blathers/backport-release-26.1-159321
release-26.1: builtins: call Parse instead of ParseOne in crdb_internal.inject_hint
2 parents e92a6a8 + 29d2b74 commit 1e0e14b

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

pkg/sql/logictest/testdata/logic_test/statement_hint_builtins

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -943,3 +943,11 @@ statement hints count: 1
943943
missing stats
944944
table: xy@xy_pkey
945945
spans: FULL SCAN
946+
947+
# Test error handling for crdb_internal.inject_hint.
948+
949+
statement error pq: could not parse statement fingerprint as a single SQL statement
950+
SELECT crdb_internal.inject_hint('', '')
951+
952+
statement error pq: could not parse hint donor statement as a single SQL statement
953+
SELECT crdb_internal.inject_hint('SELECT 1', 'SELECT 2; SELECT 3')

pkg/sql/sem/builtins/builtins.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9678,18 +9678,32 @@ WHERE object_id = table_descriptor_id
96789678
fingerprintFlags := tree.FmtFlags(tree.QueryFormattingForFingerprintsMask.Get(
96799679
&evalCtx.Settings.SV,
96809680
))
9681-
targetStmt, err := parserutils.ParseOne(stmtFingerprint)
9681+
stmts, err := parserutils.Parse(stmtFingerprint)
96829682
if err != nil {
96839683
return nil, pgerror.Wrap(
96849684
err, pgcode.InvalidParameterValue, "could not parse statement fingerprint",
96859685
)
96869686
}
9687-
donorStmt, err := parserutils.ParseOne(donorSQL)
9687+
if len(stmts) != 1 {
9688+
return nil, pgerror.New(
9689+
pgcode.InvalidParameterValue,
9690+
"could not parse statement fingerprint as a single SQL statement",
9691+
)
9692+
}
9693+
targetStmt := stmts[0]
9694+
stmts, err = parserutils.Parse(donorSQL)
96889695
if err != nil {
96899696
return nil, pgerror.Wrap(
96909697
err, pgcode.InvalidParameterValue, "could not parse hint donor statement",
96919698
)
96929699
}
9700+
if len(stmts) != 1 {
9701+
return nil, pgerror.New(
9702+
pgcode.InvalidParameterValue,
9703+
"could not parse hint donor statement as a single SQL statement",
9704+
)
9705+
}
9706+
donorStmt := stmts[0]
96939707
donor, err := tree.NewHintInjectionDonor(donorStmt.AST, fingerprintFlags)
96949708
if err != nil {
96959709
return nil, errors.NewAssertionErrorWithWrappedErrf(err, "error while creating donor")

0 commit comments

Comments
 (0)