@@ -50,16 +50,16 @@ class TKqpQueryCache {
50
50
51
51
void InsertAst (const TKqpCompileResult::TConstPtr& compileResult) {
52
52
Y_ENSURE (compileResult->Query );
53
- Y_ENSURE (compileResult->Ast );
53
+ Y_ENSURE (compileResult->GetAst () );
54
54
55
- AstIndex.emplace (GetQueryIdWithAst (*compileResult->Query , *compileResult->Ast ), compileResult->Uid );
55
+ AstIndex.emplace (GetQueryIdWithAst (*compileResult->Query , *compileResult->GetAst () ), compileResult->Uid );
56
56
}
57
57
58
58
bool Insert (const TKqpCompileResult::TConstPtr& compileResult, bool isEnableAstCache, bool isPerStatementExecution) {
59
59
if (!isPerStatementExecution) {
60
60
InsertQuery (compileResult);
61
61
}
62
- if (isEnableAstCache && compileResult->Ast ) {
62
+ if (isEnableAstCache && compileResult->GetAst () ) {
63
63
InsertAst (compileResult);
64
64
}
65
65
@@ -76,8 +76,8 @@ class TKqpQueryCache {
76
76
77
77
auto queryId = *removedItem->Value .CompileResult ->Query ;
78
78
QueryIndex.erase (queryId);
79
- if (removedItem->Value .CompileResult ->Ast ) {
80
- AstIndex.erase (GetQueryIdWithAst (queryId, *removedItem->Value .CompileResult ->Ast ));
79
+ if (removedItem->Value .CompileResult ->GetAst () ) {
80
+ AstIndex.erase (GetQueryIdWithAst (queryId, *removedItem->Value .CompileResult ->GetAst () ));
81
81
}
82
82
auto indexIt = Index.find (*removedItem);
83
83
if (indexIt != Index.end ()) {
@@ -190,8 +190,8 @@ class TKqpQueryCache {
190
190
Y_ABORT_UNLESS (item->Value .CompileResult ->Query );
191
191
auto queryId = *item->Value .CompileResult ->Query ;
192
192
QueryIndex.erase (queryId);
193
- if (item->Value .CompileResult ->Ast ) {
194
- AstIndex.erase (GetQueryIdWithAst (queryId, *item->Value .CompileResult ->Ast ));
193
+ if (item->Value .CompileResult ->GetAst () ) {
194
+ AstIndex.erase (GetQueryIdWithAst (queryId, *item->Value .CompileResult ->GetAst () ));
195
195
}
196
196
197
197
Index.erase (it);
@@ -327,6 +327,8 @@ struct TKqpCompileRequest {
327
327
NYql::TExprContext* SplitCtx;
328
328
NYql::TExprNode::TPtr SplitExpr;
329
329
330
+ bool FindInCache = true ;
331
+
330
332
bool IsIntrestedInResult () const {
331
333
return IntrestedInResult->load ();
332
334
}
@@ -764,8 +766,6 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
764
766
}
765
767
766
768
if (compileResult || request.Query ) {
767
- QueryCache.EraseByUid (request.Uid );
768
-
769
769
Counters->ReportCompileRequestCompile (dbCounters);
770
770
771
771
NWilson::TSpan compileServiceSpan (TWilsonKqp::CompileService, ev->Get () ? std::move (ev->TraceId ) : NWilson::TTraceId (), " CompileService" );
@@ -790,12 +790,13 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
790
790
);
791
791
}
792
792
}
793
- TKqpCompileRequest compileRequest (ev->Sender , request.Uid , query ,
793
+ TKqpCompileRequest compileRequest (ev->Sender , request.Uid , compileResult ? *compileResult-> Query : *request. Query ,
794
794
compileSettings, request.UserToken , dbCounters, request.GUCSettings , request.ApplicationName ,
795
795
ev->Cookie , std::move (ev->Get ()->IntrestedInResult ),
796
796
ev->Get ()->UserRequestContext ,
797
797
ev->Get () ? std::move (ev->Get ()->Orbit ) : NLWTrace::TOrbit (),
798
798
std::move (compileServiceSpan), std::move (ev->Get ()->TempTablesState ));
799
+ compileRequest.FindInCache = false ;
799
800
800
801
if (TableServiceConfig.GetEnableAstCache () && request.QueryAst ) {
801
802
return CompileByAst (*request.QueryAst , compileRequest, ctx);
@@ -976,7 +977,7 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
976
977
<< " , ast: " << queryAst.Ast ->Root ->ToString ());
977
978
auto compileResult = QueryCache.FindByAst (compileRequest.Query , *queryAst.Ast , compileRequest.CompileSettings .KeepInCache );
978
979
979
- if (HasTempTablesNameClashes (compileResult, compileRequest.TempTablesState )) {
980
+ if (!compileRequest. FindInCache || HasTempTablesNameClashes (compileResult, compileRequest.TempTablesState )) {
980
981
compileResult = nullptr ;
981
982
}
982
983
@@ -987,7 +988,7 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
987
988
<< " , sender: " << compileRequest.Sender
988
989
<< " , queryUid: " << compileResult->Uid );
989
990
990
- compileResult->Ast ->PgAutoParamValues = std::move (queryAst.Ast ->PgAutoParamValues );
991
+ compileResult->GetAst () ->PgAutoParamValues = std::move (queryAst.Ast ->PgAutoParamValues );
991
992
992
993
ReplyFromCache (compileRequest.Sender , compileResult, ctx, compileRequest.Cookie , std::move (compileRequest.Orbit ), std::move (compileRequest.CompileServiceSpan ));
993
994
return ;
@@ -1061,10 +1062,10 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
1061
1062
if (QueryCache.FindByQuery (query, keepInCache)) {
1062
1063
return false ;
1063
1064
}
1064
- if (compileResult->Ast && QueryCache.FindByAst (query, *compileResult->Ast , keepInCache)) {
1065
+ if (compileResult->GetAst () && QueryCache.FindByAst (query, *compileResult->GetAst () , keepInCache)) {
1065
1066
return false ;
1066
1067
}
1067
- auto newCompileResult = TKqpCompileResult::Make (CreateGuidAsString (), compileResult->Status , compileResult->Issues , compileResult->MaxReadType , std::move (query), compileResult->Ast );
1068
+ auto newCompileResult = TKqpCompileResult::Make (CreateGuidAsString (), compileResult->Status , compileResult->Issues , compileResult->MaxReadType , std::move (query), compileResult->QueryAst );
1068
1069
newCompileResult->AllowCache = compileResult->AllowCache ;
1069
1070
newCompileResult->PreparedQuery = compileResult->PreparedQuery ;
1070
1071
LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Insert preparing query with params, queryId: " << query.SerializeToString ());
0 commit comments