Skip to content

Commit b0aa36d

Browse files
authored
Add ExecuteMode to YQL plugin for YT. Support validate and explain modes (#1219)
1 parent c18ce49 commit b0aa36d

File tree

4 files changed

+34
-10
lines changed

4 files changed

+34
-10
lines changed

ydb/library/yql/yt/bridge/interface.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,10 @@ using TFuncBridgeRun = TBridgeQueryResult*(
9696
const char* impersonationUser,
9797
const char* queryText,
9898
const char* settings,
99+
int settingsLength,
99100
const TBridgeQueryFile* files,
100-
int fileCount);
101+
int fileCount,
102+
int executeMode);
101103
using TFuncBridgeGetProgress = TBridgeQueryResult*(TBridgeYqlPlugin* plugin, const char* queryId);
102104
using TFuncBridgeAbort = TBridgeAbortResult*(TBridgeYqlPlugin* plugin, const char* queryId);
103105
using TFuncBridgeFreeAbortResult = void(TBridgeAbortResult* result);

ydb/library/yql/yt/dynamic/impl.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ extern "C" {
1212

1313
ssize_t BridgeGetAbiVersion()
1414
{
15-
return 1; // EYqlPluginAbiVersion::AbortQuery
15+
return 2; // EYqlPluginAbiVersion
1616
}
1717

1818
TBridgeYqlPlugin* BridgeCreateYqlPlugin(const TBridgeYqlPluginOptions* bridgeOptions)
@@ -74,8 +74,10 @@ TBridgeQueryResult* BridgeRun(
7474
const char* impersonationUser,
7575
const char* queryText,
7676
const char* settings,
77+
int settingsLength,
7778
const TBridgeQueryFile* bridgeFiles,
78-
int bridgeFileCount)
79+
int bridgeFileCount,
80+
int executeMode)
7981
{
8082
static const auto EmptyMap = TYsonString(TString("{}"));
8183

@@ -96,8 +98,9 @@ TBridgeQueryResult* BridgeRun(
9698
NYT::TGuid::FromString(queryId),
9799
TString(impersonationUser),
98100
TString(queryText),
99-
settings ? TYsonString(TString(settings)) : EmptyMap,
100-
files);
101+
settings ? TYsonString(TString(settings, settingsLength)) : EmptyMap,
102+
files,
103+
executeMode);
101104
FillString(bridgeResult->YsonResult, bridgeResult->YsonResultLength, result.YsonResult);
102105
FillString(bridgeResult->Plan, bridgeResult->PlanLength, result.Plan);
103106
FillString(bridgeResult->Statistics, bridgeResult->StatisticsLength, result.Statistics);

ydb/library/yql/yt/native/plugin.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,8 @@ class TYqlPlugin
254254
TString impersonationUser,
255255
TString queryText,
256256
TYsonString settings,
257-
std::vector<TQueryFile> files)
257+
std::vector<TQueryFile> files,
258+
int executeMode)
258259
{
259260
auto program = ProgramFactory_->Create("-memory-", queryText);
260261
{
@@ -314,7 +315,23 @@ class TYqlPlugin
314315
}
315316

316317
NYql::TProgram::TStatus status = NYql::TProgram::TStatus::Error;
317-
status = program->RunWithConfig(impersonationUser, pipelineConfigurator);
318+
319+
// NYT::NYqlClient::EExecuteMode (yt/yt/ytlib/yql_client/public.h)
320+
switch (executeMode) {
321+
case 0: // Validate.
322+
status = program->Validate(impersonationUser, nullptr);
323+
break;
324+
case 1: // Optimize.
325+
status = program->OptimizeWithConfig(impersonationUser, pipelineConfigurator);
326+
break;
327+
case 2: // Run.
328+
status = program->RunWithConfig(impersonationUser, pipelineConfigurator);
329+
break;
330+
default: // Unknown.
331+
return TQueryResult{
332+
.YsonError = MessageToYtErrorYson(Format("Unknown execution mode: %v", executeMode)),
333+
};
334+
}
318335

319336
if (status == NYql::TProgram::TStatus::Error) {
320337
return TQueryResult{
@@ -354,10 +371,11 @@ class TYqlPlugin
354371
TString impersonationUser,
355372
TString queryText,
356373
TYsonString settings,
357-
std::vector<TQueryFile> files) noexcept override
374+
std::vector<TQueryFile> files,
375+
int executeMode) noexcept override
358376
{
359377
try {
360-
return GuardedRun(queryId, impersonationUser, queryText, settings, files);
378+
return GuardedRun(queryId, impersonationUser, queryText, settings, files, executeMode);
361379
} catch (const std::exception& ex) {
362380
{
363381
auto guard = WriterGuard(ProgressSpinLock);

ydb/library/yql/yt/plugin.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ struct IYqlPlugin
7575
TString impersonationUser,
7676
TString queryText,
7777
NYson::TYsonString settings,
78-
std::vector<TQueryFile> files) noexcept = 0;
78+
std::vector<TQueryFile> files,
79+
int executeMode) noexcept = 0;
7980
virtual TQueryResult GetProgress(TQueryId queryId) noexcept = 0;
8081

8182
virtual TAbortResult Abort(TQueryId queryId) noexcept = 0;

0 commit comments

Comments
 (0)