Skip to content

Commit 5789df6

Browse files
committed
Add ExecuteMode to YQL plugin for YT. Support validate and explain modes
1 parent 589424c commit 5789df6

File tree

4 files changed

+52
-9
lines changed

4 files changed

+52
-9
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ using TFuncBridgeRun = TBridgeQueryResult*(
9797
const char* queryText,
9898
const char* settings,
9999
const TBridgeQueryFile* files,
100-
int fileCount);
100+
int fileCount,
101+
int executeMode);
101102
using TFuncBridgeGetProgress = TBridgeQueryResult*(TBridgeYqlPlugin* plugin, const char* queryId);
102103
using TFuncBridgeAbort = TBridgeAbortResult*(TBridgeYqlPlugin* plugin, const char* queryId);
103104
using TFuncBridgeFreeAbortResult = void(TBridgeAbortResult* result);

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

Lines changed: 5 additions & 3 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)
@@ -75,7 +75,8 @@ TBridgeQueryResult* BridgeRun(
7575
const char* queryText,
7676
const char* settings,
7777
const TBridgeQueryFile* bridgeFiles,
78-
int bridgeFileCount)
78+
int bridgeFileCount,
79+
int executeMode)
7980
{
8081
static const auto EmptyMap = TYsonString(TString("{}"));
8182

@@ -97,7 +98,8 @@ TBridgeQueryResult* BridgeRun(
9798
TString(impersonationUser),
9899
TString(queryText),
99100
settings ? TYsonString(TString(settings)) : EmptyMap,
100-
files);
101+
files,
102+
executeMode);
101103
FillString(bridgeResult->YsonResult, bridgeResult->YsonResultLength, result.YsonResult);
102104
FillString(bridgeResult->Plan, bridgeResult->PlanLength, result.Plan);
103105
FillString(bridgeResult->Statistics, bridgeResult->StatisticsLength, result.Statistics);

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

Lines changed: 43 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
{
@@ -313,8 +314,45 @@ class TYqlPlugin
313314
ActiveQueriesProgress_[queryId].Compiled = true;
314315
}
315316

317+
NYql::NEmbedded::EExecuteMode executeModeEnum;
318+
319+
// Transforming NYT::NYqlClient::EExecuteMode (yt/yt/ytlib/yql_client/public.h)
320+
// to NYql::EExecuteMode
321+
switch (executeMode) {
322+
case 0:
323+
executeModeEnum = NYql::NEmbedded::EExecuteMode::Validate;
324+
break;
325+
case 1:
326+
executeModeEnum = NYql::NEmbedded::EExecuteMode::Optimize;
327+
break;
328+
case 2:
329+
executeModeEnum = NYql::NEmbedded::EExecuteMode::Run;
330+
break;
331+
case 3:
332+
executeModeEnum = NYql::NEmbedded::EExecuteMode::Lineage;
333+
break;
334+
default:
335+
return TQueryResult{
336+
.YsonError = MessageToYtErrorYson(Format("Unknown execution mode: %v", executeMode)),
337+
};
338+
}
339+
316340
NYql::TProgram::TStatus status = NYql::TProgram::TStatus::Error;
317-
status = program->RunWithConfig(impersonationUser, pipelineConfigurator);
341+
switch (executeModeEnum) {
342+
case NYql::NEmbedded::EExecuteMode::Run:
343+
status = program->RunWithConfig(impersonationUser, pipelineConfigurator);
344+
break;
345+
case NYql::NEmbedded::EExecuteMode::Optimize:
346+
status = program->OptimizeWithConfig(impersonationUser, pipelineConfigurator);
347+
break;
348+
case NYql::NEmbedded::EExecuteMode::Validate:
349+
status = program->Validate(impersonationUser, nullptr);
350+
break;
351+
case NYql::NEmbedded::EExecuteMode::Lineage:
352+
return TQueryResult{
353+
.YsonError = MessageToYtErrorYson("Lineage execution mode is not supported"),
354+
};
355+
}
318356

319357
if (status == NYql::TProgram::TStatus::Error) {
320358
return TQueryResult{
@@ -354,10 +392,11 @@ class TYqlPlugin
354392
TString impersonationUser,
355393
TString queryText,
356394
TYsonString settings,
357-
std::vector<TQueryFile> files) noexcept override
395+
std::vector<TQueryFile> files,
396+
int executeMode) noexcept override
358397
{
359398
try {
360-
return GuardedRun(queryId, impersonationUser, queryText, settings, files);
399+
return GuardedRun(queryId, impersonationUser, queryText, settings, files, executeMode);
361400
} catch (const std::exception& ex) {
362401
{
363402
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)