@@ -567,6 +567,9 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
567567 Counters->ReportCompileRequestGet (dbCounters);
568568
569569 auto compileResult = QueryCache.FindByUid (*request.Uid , request.KeepInCache );
570+ if (HasTempTablesNameClashes (compileResult, request.TempTablesState )) {
571+ compileResult = nullptr ;
572+ }
570573 if (compileResult) {
571574 Y_ENSURE (compileResult->Query );
572575 if (compileResult->Query ->UserSid == userSid) {
@@ -610,6 +613,10 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
610613 }
611614
612615 auto compileResult = QueryCache.FindByQuery (query, request.KeepInCache );
616+ if (HasTempTablesNameClashes (compileResult, request.TempTablesState )) {
617+ compileResult = nullptr ;
618+ }
619+
613620 if (compileResult) {
614621 Counters->ReportQueryCacheHit (dbCounters, true );
615622
@@ -672,7 +679,11 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
672679 auto dbCounters = request.DbCounters ;
673680 Counters->ReportRecompileRequestGet (dbCounters);
674681
675- auto compileResult = QueryCache.FindByUid (request.Uid , false );
682+ TKqpCompileResult::TConstPtr compileResult = QueryCache.FindByUid (request.Uid , false );
683+ if (HasTempTablesNameClashes (compileResult, request.TempTablesState )) {
684+ compileResult = nullptr ;
685+ }
686+
676687 if (compileResult || request.Query ) {
677688 Counters->ReportCompileRequestCompile (dbCounters);
678689
@@ -736,19 +747,12 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
736747
737748 bool keepInCache = compileRequest.KeepInCache && compileResult->AllowCache ;
738749
750+ bool hasTempTablesNameClashes = HasTempTablesNameClashes (compileResult, compileRequest.TempTablesState , true );
751+
739752 try {
740753 if (compileResult->Status == Ydb::StatusIds::SUCCESS) {
741- if (QueryCache.FindByUid (compileResult->Uid , false )) {
742- QueryCache.Replace (compileResult);
743- } else if (keepInCache) {
744- if (QueryCache.Insert (compileResult, TableServiceConfig.GetEnableAstCache ())) {
745- Counters->CompileQueryCacheEvicted ->Inc ();
746- }
747- if (compileResult->Query && compileResult->Query ->Settings .IsPrepareQuery ) {
748- if (InsertPreparingQuery (compileResult, compileRequest.KeepInCache )) {
749- Counters->CompileQueryCacheEvicted ->Inc ();
750- };
751- }
754+ if (!hasTempTablesNameClashes) {
755+ UpdateQueryCache (compileResult, keepInCache);
752756 }
753757
754758 if (ev->Get ()->ReplayMessage ) {
@@ -762,8 +766,10 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
762766 request.Cookie , std::move (request.Orbit ), std::move (request.CompileServiceSpan ), (CollectDiagnostics ? ev->Get ()->ReplayMessageUserView : std::nullopt ));
763767 }
764768 } else {
765- if (QueryCache.FindByUid (compileResult->Uid , false )) {
766- QueryCache.EraseByUid (compileResult->Uid );
769+ if (!hasTempTablesNameClashes) {
770+ if (QueryCache.FindByUid (compileResult->Uid , false )) {
771+ QueryCache.EraseByUid (compileResult->Uid );
772+ }
767773 }
768774 }
769775
@@ -814,12 +820,43 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
814820 StartCheckQueriesTtlTimer ();
815821 }
816822
823+ bool HasTempTablesNameClashes (
824+ TKqpCompileResult::TConstPtr compileResult,
825+ TKqpTempTablesState::TConstPtr tempTablesState, bool withSessionId = false ) {
826+ if (!compileResult) {
827+ return false ;
828+ }
829+ if (!compileResult->PreparedQuery ) {
830+ return false ;
831+ }
832+
833+ return compileResult->PreparedQuery ->HasTempTables (tempTablesState, withSessionId);
834+ }
835+
836+ void UpdateQueryCache (TKqpCompileResult::TConstPtr compileResult, bool keepInCache) {
837+ if (QueryCache.FindByUid (compileResult->Uid , false )) {
838+ QueryCache.Replace (compileResult);
839+ } else if (keepInCache) {
840+ if (QueryCache.Insert (compileResult, TableServiceConfig.GetEnableAstCache ())) {
841+ Counters->CompileQueryCacheEvicted ->Inc ();
842+ }
843+ if (compileResult->Query && compileResult->Query ->Settings .IsPrepareQuery ) {
844+ if (InsertPreparingQuery (compileResult, true )) {
845+ Counters->CompileQueryCacheEvicted ->Inc ();
846+ };
847+ }
848+ }
849+ }
850+
817851 void Handle (TEvKqp::TEvParseResponse::TPtr& ev, const TActorContext& ctx) {
818852 auto & parseResult = ev->Get ()->AstResult ;
819853 auto & query = ev->Get ()->Query ;
820854 auto compileRequest = RequestsQueue.FinishActiveRequest (query);
821855 if (parseResult && parseResult->Ast ->IsOk ()) {
822856 auto compileResult = QueryCache.FindByAst (query, *parseResult->Ast , compileRequest.KeepInCache );
857+ if (HasTempTablesNameClashes (compileResult, compileRequest.TempTablesState )) {
858+ compileResult = nullptr ;
859+ }
823860 if (compileResult) {
824861 Counters->ReportQueryCacheHit (compileRequest.DbCounters , true );
825862
0 commit comments