@@ -182,6 +182,10 @@ class TAsyncValidateYqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResul
182
182
, SqlVersion(sqlVersion) {}
183
183
184
184
void FillResult (TResult& validateResult) const override {
185
+ if (!validateResult.Success ()) {
186
+ return ;
187
+ }
188
+
185
189
YQL_ENSURE (SessionCtx->Query ().PrepareOnly );
186
190
validateResult.PreparedQuery .reset (SessionCtx->Query ().PreparingQuery .release ());
187
191
validateResult.SqlVersion = SqlVersion;
@@ -211,6 +215,10 @@ class TAsyncExplainYqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResult
211
215
, UseDqExplain(useDqExplain) {}
212
216
213
217
void FillResult (TResult& queryResult) const override {
218
+ if (!queryResult.Success ()) {
219
+ return ;
220
+ }
221
+
214
222
if (UseDqExplain) {
215
223
TVector<const TString> plans;
216
224
for (auto id : SessionCtx->Query ().ExecutionOrder ) {
@@ -253,6 +261,10 @@ class TAsyncExecuteYqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResult
253
261
, SqlVersion(sqlVersion) {}
254
262
255
263
void FillResult (TResult& queryResult) const override {
264
+ if (!queryResult.Success ()) {
265
+ return ;
266
+ }
267
+
256
268
for (auto & resultStr : ResultProviderConfig.CommittedResults ) {
257
269
queryResult.Results .emplace_back (
258
270
google::protobuf::Arena::CreateMessage<NKikimrMiniKQL::TResult>(queryResult.ProtobufArenaPtr .get ()));
@@ -300,6 +312,10 @@ class TAsyncExecuteKqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResult
300
312
, ExecuteCtx(executeCtx) {}
301
313
302
314
void FillResult (TResult& queryResult) const override {
315
+ if (!queryResult.Success ()) {
316
+ return ;
317
+ }
318
+
303
319
YQL_ENSURE (ExecuteCtx.QueryResults .size () == 1 );
304
320
queryResult = std::move (ExecuteCtx.QueryResults [0 ]);
305
321
queryResult.QueryPlan = queryResult.PreparingQuery ->GetPhysicalQuery ().GetQueryPlan ();
@@ -320,14 +336,24 @@ class TAsyncPrepareYqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResult
320
336
using TResult = IKqpHost::TQueryResult;
321
337
322
338
TAsyncPrepareYqlResult (TExprNode* queryRoot, TExprContext& exprCtx, IGraphTransformer& transformer,
323
- TIntrusivePtr<TKikimrQueryContext> queryCtx, const TKqpQueryRef& query, TMaybe<TSqlVersion> sqlVersion)
339
+ TIntrusivePtr<TKikimrQueryContext> queryCtx, const TKqpQueryRef& query, TMaybe<TSqlVersion> sqlVersion,
340
+ TIntrusivePtr<TKqlTransformContext> transformCtx = nullptr )
324
341
: TKqpAsyncResultBase(queryRoot, exprCtx, transformer)
325
342
, QueryCtx(queryCtx)
326
343
, ExprCtx(exprCtx)
344
+ , TransformCtx(transformCtx)
327
345
, QueryText(query.Text)
328
346
, SqlVersion(sqlVersion) {}
329
347
330
348
void FillResult (TResult& prepareResult) const override {
349
+ if (!prepareResult.Success () && TransformCtx) {
350
+ if (auto exprRoot = TransformCtx->ExplainTransformerInput ? TransformCtx->ExplainTransformerInput : GetExprRoot ()) {
351
+ prepareResult.PreparingQuery = std::move (QueryCtx->PreparingQuery );
352
+ prepareResult.PreparingQuery ->MutablePhysicalQuery ()->SetQueryAst (KqpExprToPrettyString (*GetExprRoot (), ExprCtx));
353
+ }
354
+ return ;
355
+ }
356
+
331
357
YQL_ENSURE (QueryCtx->PrepareOnly );
332
358
YQL_ENSURE (QueryCtx->PreparingQuery );
333
359
@@ -343,18 +369,10 @@ class TAsyncPrepareYqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResult
343
369
prepareResult.QueryAst = prepareResult.PreparingQuery ->GetPhysicalQuery ().GetQueryAst ();
344
370
}
345
371
346
- void FillPartialResult (TResult& prepareResult) const override {
347
- YQL_ENSURE (QueryCtx->PrepareOnly );
348
-
349
- if (auto exprRoot = GetExprRoot ()) {
350
- prepareResult.PreparingQuery = std::move (QueryCtx->PreparingQuery );
351
- prepareResult.PreparingQuery ->MutablePhysicalQuery ()->SetQueryAst (KqpExprToPrettyString (*GetExprRoot (), ExprCtx));
352
- }
353
- }
354
-
355
372
private:
356
373
TIntrusivePtr<TKikimrQueryContext> QueryCtx;
357
374
NYql::TExprContext& ExprCtx;
375
+ TIntrusivePtr<TKqlTransformContext> TransformCtx;
358
376
TString QueryText;
359
377
TMaybe<TSqlVersion> SqlVersion;
360
378
};
@@ -944,6 +962,7 @@ class TKqpHost : public IKqpHost {
944
962
, IsInternalCall(isInternalCall)
945
963
, FederatedQuerySetup(federatedQuerySetup)
946
964
, SessionCtx(new TKikimrSessionContext(funcRegistry, config, TAppData::TimeProvider, TAppData::RandomProvider, userToken))
965
+ , Config(config)
947
966
, TypesCtx(MakeIntrusive<TTypeAnnotationContext>())
948
967
, PlanBuilder(CreatePlanBuilder(*TypesCtx))
949
968
, FakeWorld(ExprCtx->NewWorld (TPosition()))
@@ -1338,7 +1357,7 @@ class TKqpHost : public IKqpHost {
1338
1357
}
1339
1358
1340
1359
return MakeIntrusive<TAsyncPrepareYqlResult>(queryExpr.Get (), ctx, *YqlTransformer, SessionCtx->QueryPtr (),
1341
- query.Text , sqlVersion);
1360
+ query.Text , sqlVersion, TransformCtx );
1342
1361
}
1343
1362
1344
1363
IAsyncQueryResultPtr PrepareScanQueryInternal (const TKqpQueryRef& query, bool isSql, TExprContext& ctx,
@@ -1513,7 +1532,8 @@ class TKqpHost : public IKqpHost {
1513
1532
}
1514
1533
1515
1534
void Init (EKikimrQueryType queryType) {
1516
- KqpRunner = CreateKqpRunner (Gateway, Cluster, TypesCtx, SessionCtx, *FuncRegistry);
1535
+ TransformCtx = MakeIntrusive<TKqlTransformContext>(Config, SessionCtx->QueryPtr (), SessionCtx->TablesPtr ());
1536
+ KqpRunner = CreateKqpRunner (Gateway, Cluster, TypesCtx, SessionCtx, TransformCtx, *FuncRegistry);
1517
1537
1518
1538
ExprCtx->NodesAllocationLimit = SessionCtx->Config ()._KqpExprNodesAllocationLimit .Get ().GetRef ();
1519
1539
ExprCtx->StringsAllocationLimit = SessionCtx->Config ()._KqpExprStringsAllocationLimit .Get ().GetRef ();
@@ -1646,6 +1666,7 @@ class TKqpHost : public IKqpHost {
1646
1666
std::optional<TKqpFederatedQuerySetup> FederatedQuerySetup;
1647
1667
1648
1668
TIntrusivePtr<TKikimrSessionContext> SessionCtx;
1669
+ TKikimrConfiguration::TPtr Config;
1649
1670
1650
1671
TIntrusivePtr<NKikimr::NMiniKQL::IFunctionRegistry> FuncRegistryHolder;
1651
1672
const NKikimr::NMiniKQL::IFunctionRegistry* FuncRegistry;
@@ -1659,6 +1680,7 @@ class TKqpHost : public IKqpHost {
1659
1680
TExprNode::TPtr FakeWorld;
1660
1681
1661
1682
TIntrusivePtr<TExecuteContext> ExecuteCtx;
1683
+ TIntrusivePtr<TKqlTransformContext> TransformCtx;
1662
1684
TIntrusivePtr<IKqpRunner> KqpRunner;
1663
1685
NExternalSource::IExternalSourceFactory::TPtr ExternalSourceFactory{NExternalSource::CreateExternalSourceFactory ({})};
1664
1686
0 commit comments