@@ -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
}
@@ -769,8 +771,6 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
769
771
}
770
772
771
773
if (compileResult || request.Query ) {
772
- QueryCache.EraseByUid (request.Uid );
773
-
774
774
Counters->ReportCompileRequestCompile (dbCounters);
775
775
776
776
NWilson::TSpan compileServiceSpan (TWilsonKqp::CompileService, ev->Get () ? std::move (ev->TraceId ) : NWilson::TTraceId (), " CompileService" );
@@ -795,12 +795,13 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
795
795
);
796
796
}
797
797
}
798
- TKqpCompileRequest compileRequest (ev->Sender , request.Uid , query ,
798
+ TKqpCompileRequest compileRequest (ev->Sender , request.Uid , compileResult ? *compileResult-> Query : *request. Query ,
799
799
compileSettings, request.UserToken , dbCounters, request.GUCSettings , request.ApplicationName ,
800
800
ev->Cookie , std::move (ev->Get ()->IntrestedInResult ),
801
801
ev->Get ()->UserRequestContext ,
802
802
ev->Get () ? std::move (ev->Get ()->Orbit ) : NLWTrace::TOrbit (),
803
803
std::move (compileServiceSpan), std::move (ev->Get ()->TempTablesState ));
804
+ compileRequest.FindInCache = false ;
804
805
805
806
if (TableServiceConfig.GetEnableAstCache () && request.QueryAst ) {
806
807
return CompileByAst (*request.QueryAst , compileRequest, ctx);
@@ -981,7 +982,7 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
981
982
<< " , ast: " << queryAst.Ast ->Root ->ToString ());
982
983
auto compileResult = QueryCache.FindByAst (compileRequest.Query , *queryAst.Ast , compileRequest.CompileSettings .KeepInCache );
983
984
984
- if (HasTempTablesNameClashes (compileResult, compileRequest.TempTablesState )) {
985
+ if (!compileRequest. FindInCache || HasTempTablesNameClashes (compileResult, compileRequest.TempTablesState )) {
985
986
compileResult = nullptr ;
986
987
}
987
988
@@ -992,7 +993,7 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
992
993
<< " , sender: " << compileRequest.Sender
993
994
<< " , queryUid: " << compileResult->Uid );
994
995
995
- compileResult->Ast ->PgAutoParamValues = std::move (queryAst.Ast ->PgAutoParamValues );
996
+ compileResult->GetAst () ->PgAutoParamValues = std::move (queryAst.Ast ->PgAutoParamValues );
996
997
997
998
ReplyFromCache (compileRequest.Sender , compileResult, ctx, compileRequest.Cookie , std::move (compileRequest.Orbit ), std::move (compileRequest.CompileServiceSpan ));
998
999
return ;
@@ -1066,10 +1067,10 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
1066
1067
if (QueryCache.FindByQuery (query, keepInCache)) {
1067
1068
return false ;
1068
1069
}
1069
- if (compileResult->Ast && QueryCache.FindByAst (query, *compileResult->Ast , keepInCache)) {
1070
+ if (compileResult->GetAst () && QueryCache.FindByAst (query, *compileResult->GetAst () , keepInCache)) {
1070
1071
return false ;
1071
1072
}
1072
- auto newCompileResult = TKqpCompileResult::Make (CreateGuidAsString (), compileResult->Status , compileResult->Issues , compileResult->MaxReadType , std::move (query), compileResult->Ast );
1073
+ auto newCompileResult = TKqpCompileResult::Make (CreateGuidAsString (), compileResult->Status , compileResult->Issues , compileResult->MaxReadType , std::move (query), compileResult->QueryAst );
1073
1074
newCompileResult->AllowCache = compileResult->AllowCache ;
1074
1075
newCompileResult->PreparedQuery = compileResult->PreparedQuery ;
1075
1076
LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Insert preparing query with params, queryId: " << query.SerializeToString ());
0 commit comments