@@ -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,13 +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)
343
+ , ExprCtx(exprCtx)
344
+ , TransformCtx(transformCtx)
326
345
, QueryText(query.Text)
327
346
, SqlVersion(sqlVersion) {}
328
347
329
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
+
330
357
YQL_ENSURE (QueryCtx->PrepareOnly );
331
358
YQL_ENSURE (QueryCtx->PreparingQuery );
332
359
@@ -344,6 +371,8 @@ class TAsyncPrepareYqlResult : public TKqpAsyncResultBase<IKqpHost::TQueryResult
344
371
345
372
private:
346
373
TIntrusivePtr<TKikimrQueryContext> QueryCtx;
374
+ NYql::TExprContext& ExprCtx;
375
+ TIntrusivePtr<TKqlTransformContext> TransformCtx;
347
376
TString QueryText;
348
377
TMaybe<TSqlVersion> SqlVersion;
349
378
};
@@ -933,6 +962,7 @@ class TKqpHost : public IKqpHost {
933
962
, IsInternalCall(isInternalCall)
934
963
, FederatedQuerySetup(federatedQuerySetup)
935
964
, SessionCtx(new TKikimrSessionContext(funcRegistry, config, TAppData::TimeProvider, TAppData::RandomProvider, userToken))
965
+ , Config(config)
936
966
, TypesCtx(MakeIntrusive<TTypeAnnotationContext>())
937
967
, PlanBuilder(CreatePlanBuilder(*TypesCtx))
938
968
, FakeWorld(ExprCtx->NewWorld (TPosition()))
@@ -1327,7 +1357,7 @@ class TKqpHost : public IKqpHost {
1327
1357
}
1328
1358
1329
1359
return MakeIntrusive<TAsyncPrepareYqlResult>(queryExpr.Get (), ctx, *YqlTransformer, SessionCtx->QueryPtr (),
1330
- query.Text , sqlVersion);
1360
+ query.Text , sqlVersion, TransformCtx );
1331
1361
}
1332
1362
1333
1363
IAsyncQueryResultPtr PrepareScanQueryInternal (const TKqpQueryRef& query, bool isSql, TExprContext& ctx,
@@ -1502,7 +1532,8 @@ class TKqpHost : public IKqpHost {
1502
1532
}
1503
1533
1504
1534
void Init (EKikimrQueryType queryType) {
1505
- 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);
1506
1537
1507
1538
ExprCtx->NodesAllocationLimit = SessionCtx->Config ()._KqpExprNodesAllocationLimit .Get ().GetRef ();
1508
1539
ExprCtx->StringsAllocationLimit = SessionCtx->Config ()._KqpExprStringsAllocationLimit .Get ().GetRef ();
@@ -1635,6 +1666,7 @@ class TKqpHost : public IKqpHost {
1635
1666
std::optional<TKqpFederatedQuerySetup> FederatedQuerySetup;
1636
1667
1637
1668
TIntrusivePtr<TKikimrSessionContext> SessionCtx;
1669
+ TKikimrConfiguration::TPtr Config;
1638
1670
1639
1671
TIntrusivePtr<NKikimr::NMiniKQL::IFunctionRegistry> FuncRegistryHolder;
1640
1672
const NKikimr::NMiniKQL::IFunctionRegistry* FuncRegistry;
@@ -1648,6 +1680,7 @@ class TKqpHost : public IKqpHost {
1648
1680
TExprNode::TPtr FakeWorld;
1649
1681
1650
1682
TIntrusivePtr<TExecuteContext> ExecuteCtx;
1683
+ TIntrusivePtr<TKqlTransformContext> TransformCtx;
1651
1684
TIntrusivePtr<IKqpRunner> KqpRunner;
1652
1685
NExternalSource::IExternalSourceFactory::TPtr ExternalSourceFactory{NExternalSource::CreateExternalSourceFactory ({})};
1653
1686
0 commit comments