@@ -182,6 +182,10 @@ class TAsyncValidateYqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResul
182182 , SqlVersion(sqlVersion) {}
183183
184184 void FillResult (TResult& validateResult) const override {
185+ if (!validateResult.Success ()) {
186+ return ;
187+ }
188+
185189 YQL_ENSURE (SessionCtx->Query ().PrepareOnly );
186190 validateResult.PreparedQuery .reset (SessionCtx->Query ().PreparingQuery .release ());
187191 validateResult.SqlVersion = SqlVersion;
@@ -211,6 +215,10 @@ class TAsyncExplainYqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResult
211215 , UseDqExplain(useDqExplain) {}
212216
213217 void FillResult (TResult& queryResult) const override {
218+ if (!queryResult.Success ()) {
219+ return ;
220+ }
221+
214222 if (UseDqExplain) {
215223 TVector<const TString> plans;
216224 for (auto id : SessionCtx->Query ().ExecutionOrder ) {
@@ -253,6 +261,10 @@ class TAsyncExecuteYqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResult
253261 , SqlVersion(sqlVersion) {}
254262
255263 void FillResult (TResult& queryResult) const override {
264+ if (!queryResult.Success ()) {
265+ return ;
266+ }
267+
256268 for (auto & resultStr : ResultProviderConfig.CommittedResults ) {
257269 queryResult.Results .emplace_back (
258270 google::protobuf::Arena::CreateMessage<NKikimrMiniKQL::TResult>(queryResult.ProtobufArenaPtr .get ()));
@@ -300,6 +312,10 @@ class TAsyncExecuteKqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResult
300312 , ExecuteCtx(executeCtx) {}
301313
302314 void FillResult (TResult& queryResult) const override {
315+ if (!queryResult.Success ()) {
316+ return ;
317+ }
318+
303319 YQL_ENSURE (ExecuteCtx.QueryResults .size () == 1 );
304320 queryResult = std::move (ExecuteCtx.QueryResults [0 ]);
305321 queryResult.QueryPlan = queryResult.PreparingQuery ->GetPhysicalQuery ().GetQueryPlan ();
@@ -320,13 +336,28 @@ class TAsyncPrepareYqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResult
320336 using TResult = IKqpHost::TQueryResult;
321337
322338 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)
324341 : TKqpAsyncResultBase(queryRoot, exprCtx, transformer)
325342 , QueryCtx(queryCtx)
343+ , ExprCtx(exprCtx)
344+ , TransformCtx(transformCtx)
326345 , QueryText(query.Text)
327346 , SqlVersion(sqlVersion) {}
328347
329348 void FillResult (TResult& prepareResult) const override {
349+ if (!prepareResult.Success ()) {
350+ auto exprRoot = GetExprRoot ();
351+ if (TransformCtx && TransformCtx->ExplainTransformerInput ) {
352+ exprRoot = TransformCtx->ExplainTransformerInput ;
353+ }
354+ if (exprRoot) {
355+ prepareResult.PreparingQuery = std::move (QueryCtx->PreparingQuery );
356+ prepareResult.PreparingQuery ->MutablePhysicalQuery ()->SetQueryAst (KqpExprToPrettyString (*exprRoot, ExprCtx));
357+ }
358+ return ;
359+ }
360+
330361 YQL_ENSURE (QueryCtx->PrepareOnly );
331362 YQL_ENSURE (QueryCtx->PreparingQuery );
332363
@@ -344,6 +375,8 @@ class TAsyncPrepareYqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResult
344375
345376private:
346377 TIntrusivePtr<TKikimrQueryContext> QueryCtx;
378+ NYql::TExprContext& ExprCtx;
379+ TIntrusivePtr<TKqlTransformContext> TransformCtx;
347380 TString QueryText;
348381 TMaybe<TSqlVersion> SqlVersion;
349382};
@@ -933,6 +966,7 @@ class TKqpHost : public IKqpHost {
933966 , IsInternalCall(isInternalCall)
934967 , FederatedQuerySetup(federatedQuerySetup)
935968 , SessionCtx(new TKikimrSessionContext(funcRegistry, config, TAppData::TimeProvider, TAppData::RandomProvider, userToken))
969+ , Config(config)
936970 , TypesCtx(MakeIntrusive<TTypeAnnotationContext>())
937971 , PlanBuilder(CreatePlanBuilder(*TypesCtx))
938972 , FakeWorld(ExprCtx->NewWorld (TPosition()))
@@ -1265,7 +1299,7 @@ class TKqpHost : public IKqpHost {
12651299 }
12661300
12671301 return MakeIntrusive<TAsyncPrepareYqlResult>(queryExpr.Get (), ctx, *YqlTransformer, SessionCtx->QueryPtr (),
1268- query.Text , sqlVersion);
1302+ query.Text , sqlVersion, TransformCtx );
12691303 }
12701304
12711305 IAsyncQueryResultPtr PrepareDataQueryAstInternal (const TKqpQueryRef& queryAst, const TPrepareSettings& settings,
@@ -1327,7 +1361,7 @@ class TKqpHost : public IKqpHost {
13271361 }
13281362
13291363 return MakeIntrusive<TAsyncPrepareYqlResult>(queryExpr.Get (), ctx, *YqlTransformer, SessionCtx->QueryPtr (),
1330- query.Text , sqlVersion);
1364+ query.Text , sqlVersion, TransformCtx );
13311365 }
13321366
13331367 IAsyncQueryResultPtr PrepareScanQueryInternal (const TKqpQueryRef& query, bool isSql, TExprContext& ctx,
@@ -1354,7 +1388,7 @@ class TKqpHost : public IKqpHost {
13541388 }
13551389
13561390 return MakeIntrusive<TAsyncPrepareYqlResult>(queryExpr.Get (), ctx, *YqlTransformer, SessionCtx->QueryPtr (),
1357- query.Text , sqlVersion);
1391+ query.Text , sqlVersion, TransformCtx );
13581392 }
13591393
13601394 IAsyncQueryResultPtr PrepareScanQueryAstInternal (const TKqpQueryRef& queryAst, TExprContext& ctx) {
@@ -1502,7 +1536,8 @@ class TKqpHost : public IKqpHost {
15021536 }
15031537
15041538 void Init (EKikimrQueryType queryType) {
1505- KqpRunner = CreateKqpRunner (Gateway, Cluster, TypesCtx, SessionCtx, *FuncRegistry);
1539+ TransformCtx = MakeIntrusive<TKqlTransformContext>(Config, SessionCtx->QueryPtr (), SessionCtx->TablesPtr ());
1540+ KqpRunner = CreateKqpRunner (Gateway, Cluster, TypesCtx, SessionCtx, TransformCtx, *FuncRegistry);
15061541
15071542 ExprCtx->NodesAllocationLimit = SessionCtx->Config ()._KqpExprNodesAllocationLimit .Get ().GetRef ();
15081543 ExprCtx->StringsAllocationLimit = SessionCtx->Config ()._KqpExprStringsAllocationLimit .Get ().GetRef ();
@@ -1635,6 +1670,7 @@ class TKqpHost : public IKqpHost {
16351670 std::optional<TKqpFederatedQuerySetup> FederatedQuerySetup;
16361671
16371672 TIntrusivePtr<TKikimrSessionContext> SessionCtx;
1673+ TKikimrConfiguration::TPtr Config;
16381674
16391675 TIntrusivePtr<NKikimr::NMiniKQL::IFunctionRegistry> FuncRegistryHolder;
16401676 const NKikimr::NMiniKQL::IFunctionRegistry* FuncRegistry;
@@ -1648,6 +1684,7 @@ class TKqpHost : public IKqpHost {
16481684 TExprNode::TPtr FakeWorld;
16491685
16501686 TIntrusivePtr<TExecuteContext> ExecuteCtx;
1687+ TIntrusivePtr<TKqlTransformContext> TransformCtx;
16511688 TIntrusivePtr<IKqpRunner> KqpRunner;
16521689 NExternalSource::IExternalSourceFactory::TPtr ExternalSourceFactory{NExternalSource::CreateExternalSourceFactory ({})};
16531690
0 commit comments