Skip to content

Commit ec82dc7

Browse files
committed
[query] Support SCAN_METHOD hint
Fixes #203.
1 parent 7ad3d59 commit ec82dc7

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

backend/query/query_validator.cc

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@ constexpr absl::string_view kHintTableScanGroupByScanOptimization =
104104
constexpr absl::string_view kUseAdditionalParallelism =
105105
"use_additional_parallelism";
106106

107+
constexpr absl::string_view kScanMethod = "scan_method";
108+
constexpr absl::string_view kScanMethodAuto = "auto";
109+
constexpr absl::string_view kScanMethodBatch = "batch";
110+
constexpr absl::string_view kScanMethodRow = "row";
111+
107112
// Lock scanned ranges
108113
constexpr absl::string_view kHintLockScannedRange = "lock_scanned_ranges";
109114
constexpr absl::string_view kHintLockScannedRangeShared = "shared";
@@ -210,7 +215,7 @@ absl::Status QueryValidator::CheckSpannerHintName(
210215
zetasql_base::StringViewCaseEqual>>{
211216
{zetasql::RESOLVED_TABLE_SCAN,
212217
{kHintForceIndex, kHintTableScanGroupByScanOptimization,
213-
kHintIndexStrategy}},
218+
kHintIndexStrategy, kScanMethod}},
214219
{zetasql::RESOLVED_JOIN_SCAN,
215220
{kHintJoinTypeDeprecated, kHintJoinMethod, kHashJoinBuildSide,
216221
kHintJoinForceOrder, kHashJoinExecution}},
@@ -236,6 +241,7 @@ absl::Status QueryValidator::CheckSpannerHintName(
236241
kHintAllowSearchIndexesInTransaction,
237242
kRequireEnhanceQuery,
238243
kEnhanceQueryTimeoutMs,
244+
kScanMethod,
239245
}},
240246
{zetasql::RESOLVED_SUBQUERY_EXPR,
241247
{kHintJoinTypeDeprecated, kHintJoinMethod, kHashJoinBuildSide,
@@ -298,6 +304,7 @@ absl::Status QueryValidator::CheckHintValue(
298304
{kHintAllowSearchIndexesInTransaction, zetasql::types::BoolType()},
299305
{kRequireEnhanceQuery, zetasql::types::BoolType()},
300306
{kEnhanceQueryTimeoutMs, zetasql::types::Int64Type()},
307+
{kScanMethod, zetasql::types::StringType()},
301308
}};
302309

303310
const auto& iter = supported_hint_types->find(name);
@@ -393,6 +400,13 @@ absl::Status QueryValidator::CheckHintValue(
393400
kHintIndexStrategyForceIndexUnion)) {
394401
return error::InvalidHintValue(name, value.DebugString());
395402
}
403+
} else if (absl::EqualsIgnoreCase(name, kScanMethod)) {
404+
const std::string& string_value = value.string_value();
405+
if (!(absl::EqualsIgnoreCase(string_value, kScanMethodAuto) ||
406+
absl::EqualsIgnoreCase(string_value, kScanMethodBatch) ||
407+
absl::EqualsIgnoreCase(string_value, kScanMethodRow))) {
408+
return error::InvalidHintValue(name, value.DebugString());
409+
}
396410
}
397411
return absl::OkStatus();
398412
}

0 commit comments

Comments
 (0)