diff --git a/ydb/core/kqp/compile_service/kqp_compile_actor.cpp b/ydb/core/kqp/compile_service/kqp_compile_actor.cpp index dfb8b7a77073..95de8ccb252c 100644 --- a/ydb/core/kqp/compile_service/kqp_compile_actor.cpp +++ b/ydb/core/kqp/compile_service/kqp_compile_actor.cpp @@ -450,9 +450,9 @@ class TKqpCompileActor : public TActorBootstrapped { } void FillCompileResult(std::unique_ptr preparingQuery, NKikimrKqp::EQueryType queryType, - bool allowCache) { + bool allowCache, bool success) { auto preparedQueryHolder = std::make_shared( - preparingQuery.release(), AppData()->FunctionRegistry); + preparingQuery.release(), AppData()->FunctionRegistry, !success); preparedQueryHolder->MutableLlvmSettings().Fill(Config, queryType); KqpCompileResult->PreparedQuery = preparedQueryHolder; KqpCompileResult->AllowCache = CanCacheQuery(KqpCompileResult->PreparedQuery->GetPhysicalQuery()) && allowCache; @@ -501,7 +501,7 @@ class TKqpCompileActor : public TActorBootstrapped { if (status == Ydb::StatusIds::SUCCESS) { YQL_ENSURE(kqpResult.PreparingQuery); - FillCompileResult(std::move(kqpResult.PreparingQuery), queryType, kqpResult.AllowCache); + FillCompileResult(std::move(kqpResult.PreparingQuery), queryType, kqpResult.AllowCache, true); auto now = TInstant::Now(); auto duration = now - StartTime; @@ -512,7 +512,7 @@ class TKqpCompileActor : public TActorBootstrapped { << ", duration: " << duration); } else { if (kqpResult.PreparingQuery) { - FillCompileResult(std::move(kqpResult.PreparingQuery), queryType, kqpResult.AllowCache); + FillCompileResult(std::move(kqpResult.PreparingQuery), queryType, kqpResult.AllowCache, false); } LOG_ERROR_S(ctx, NKikimrServices::KQP_COMPILE_ACTOR, "Compilation failed" diff --git a/ydb/core/kqp/query_data/kqp_prepared_query.cpp b/ydb/core/kqp/query_data/kqp_prepared_query.cpp index 9817c4b3ce37..a46ec53d9068 100644 --- a/ydb/core/kqp/query_data/kqp_prepared_query.cpp +++ b/ydb/core/kqp/query_data/kqp_prepared_query.cpp @@ -154,7 +154,7 @@ const NKikimr::NKqp::TStagePredictor& TKqpPhyTxHolder::GetCalculationPredictor(c } TPreparedQueryHolder::TPreparedQueryHolder(NKikimrKqp::TPreparedQuery* proto, - const NKikimr::NMiniKQL::IFunctionRegistry* functionRegistry) + const NKikimr::NMiniKQL::IFunctionRegistry* functionRegistry, bool noFillTables) : Proto(proto) , Alloc(nullptr) , TableConstInfoById(MakeIntrusive()) @@ -164,6 +164,11 @@ TPreparedQueryHolder::TPreparedQueryHolder(NKikimrKqp::TPreparedQuery* proto, Alloc = std::make_shared(functionRegistry); } + // In case of some compilation failures filling tables may produce new problems which may replace original error messages. + if (noFillTables) { + return; + } + THashSet tablesSet; const auto& phyQuery = Proto->GetPhysicalQuery(); Transactions.reserve(phyQuery.TransactionsSize()); diff --git a/ydb/core/kqp/query_data/kqp_prepared_query.h b/ydb/core/kqp/query_data/kqp_prepared_query.h index a92a79063137..b7cd6ab1b167 100644 --- a/ydb/core/kqp/query_data/kqp_prepared_query.h +++ b/ydb/core/kqp/query_data/kqp_prepared_query.h @@ -143,7 +143,10 @@ class TPreparedQueryHolder { public: - TPreparedQueryHolder(NKikimrKqp::TPreparedQuery* proto, const NKikimr::NMiniKQL::IFunctionRegistry* functionRegistry); + TPreparedQueryHolder( + NKikimrKqp::TPreparedQuery* proto, + const NKikimr::NMiniKQL::IFunctionRegistry* functionRegistry, + bool noFillTables = false); ~TPreparedQueryHolder(); using TConstPtr = std::shared_ptr;