@@ -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" );
@@ -785,22 +785,13 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
785
785
: (TableServiceConfig.GetEnableAstCache () && !request.QueryAst )
786
786
? ECompileActorAction::PARSE
787
787
: ECompileActorAction::COMPILE);
788
- auto query = request.Query ? *request.Query : *compileResult->Query ;
789
- if (compileResult) {
790
- query.UserSid = compileResult->Query ->UserSid ;
791
- if (query != *compileResult->Query ) {
792
- LOG_WARN_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " queryId in recompile request and queryId in cache are different"
793
- << " , queryId in request: " << query.SerializeToString ()
794
- << " , queryId in cache: " << compileResult->Query ->SerializeToString ()
795
- );
796
- }
797
- }
798
- TKqpCompileRequest compileRequest (ev->Sender , request.Uid , query,
788
+ TKqpCompileRequest compileRequest (ev->Sender , request.Uid , compileResult ? *compileResult->Query : *request.Query ,
799
789
compileSettings, request.UserToken , dbCounters, request.GUCSettings , request.ApplicationName ,
800
790
ev->Cookie , std::move (ev->Get ()->IntrestedInResult ),
801
791
ev->Get ()->UserRequestContext ,
802
792
ev->Get () ? std::move (ev->Get ()->Orbit ) : NLWTrace::TOrbit (),
803
793
std::move (compileServiceSpan), std::move (ev->Get ()->TempTablesState ));
794
+ compileRequest.FindInCache = false ;
804
795
805
796
if (TableServiceConfig.GetEnableAstCache () && request.QueryAst ) {
806
797
return CompileByAst (*request.QueryAst , compileRequest, ctx);
@@ -981,7 +972,7 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
981
972
<< " , ast: " << queryAst.Ast ->Root ->ToString ());
982
973
auto compileResult = QueryCache.FindByAst (compileRequest.Query , *queryAst.Ast , compileRequest.CompileSettings .KeepInCache );
983
974
984
- if (HasTempTablesNameClashes (compileResult, compileRequest.TempTablesState )) {
975
+ if (!compileRequest. FindInCache || HasTempTablesNameClashes (compileResult, compileRequest.TempTablesState )) {
985
976
compileResult = nullptr ;
986
977
}
987
978
@@ -992,7 +983,7 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
992
983
<< " , sender: " << compileRequest.Sender
993
984
<< " , queryUid: " << compileResult->Uid );
994
985
995
- compileResult->Ast ->PgAutoParamValues = std::move (queryAst.Ast ->PgAutoParamValues );
986
+ compileResult->GetAst () ->PgAutoParamValues = std::move (queryAst.Ast ->PgAutoParamValues );
996
987
997
988
ReplyFromCache (compileRequest.Sender , compileResult, ctx, compileRequest.Cookie , std::move (compileRequest.Orbit ), std::move (compileRequest.CompileServiceSpan ));
998
989
return ;
@@ -1066,10 +1057,10 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
1066
1057
if (QueryCache.FindByQuery (query, keepInCache)) {
1067
1058
return false ;
1068
1059
}
1069
- if (compileResult->Ast && QueryCache.FindByAst (query, *compileResult->Ast , keepInCache)) {
1060
+ if (compileResult->GetAst () && QueryCache.FindByAst (query, *compileResult->GetAst () , keepInCache)) {
1070
1061
return false ;
1071
1062
}
1072
- auto newCompileResult = TKqpCompileResult::Make (CreateGuidAsString (), compileResult->Status , compileResult->Issues , compileResult->MaxReadType , std::move (query), compileResult->Ast );
1063
+ auto newCompileResult = TKqpCompileResult::Make (CreateGuidAsString (), compileResult->Status , compileResult->Issues , compileResult->MaxReadType , std::move (query), compileResult->QueryAst );
1073
1064
newCompileResult->AllowCache = compileResult->AllowCache ;
1074
1065
newCompileResult->PreparedQuery = compileResult->PreparedQuery ;
1075
1066
LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Insert preparing query with params, queryId: " << query.SerializeToString ());
0 commit comments