@@ -566,24 +566,26 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
566
566
if (request.Uid ) {
567
567
Counters->ReportCompileRequestGet (dbCounters);
568
568
569
- auto compileResult = QueryCache.FindByUid (*request.Uid , request.KeepInCache );
570
- if (compileResult) {
571
- Y_ENSURE (compileResult->Query );
572
- if (compileResult->Query ->UserSid == userSid) {
573
- Counters->ReportQueryCacheHit (dbCounters, true );
574
-
575
- LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Served query from cache by uid"
576
- << " , sender: " << ev->Sender
577
- << " , queryUid: " << *request.Uid );
578
-
579
- ReplyFromCache (ev->Sender , compileResult, ctx, ev->Cookie , std::move (ev->Get ()->Orbit ), std::move (compileServiceSpan));
580
- return ;
581
- } else {
582
- LOG_NOTICE_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Non-matching user sid for query"
583
- << " , sender: " << ev->Sender
584
- << " , queryUid: " << *request.Uid
585
- << " , expected sid: " << compileResult->Query ->UserSid
586
- << " , actual sid: " << userSid);
569
+ if (!request.TempTablesState || request.TempTablesState ->TempTables .empty ()) {
570
+ auto compileResult = QueryCache.FindByUid (*request.Uid , request.KeepInCache );
571
+ if (compileResult) {
572
+ Y_ENSURE (compileResult->Query );
573
+ if (compileResult->Query ->UserSid == userSid) {
574
+ Counters->ReportQueryCacheHit (dbCounters, true );
575
+
576
+ LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Served query from cache by uid"
577
+ << " , sender: " << ev->Sender
578
+ << " , queryUid: " << *request.Uid );
579
+
580
+ ReplyFromCache (ev->Sender , compileResult, ctx, ev->Cookie , std::move (ev->Get ()->Orbit ), std::move (compileServiceSpan));
581
+ return ;
582
+ } else {
583
+ LOG_NOTICE_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Non-matching user sid for query"
584
+ << " , sender: " << ev->Sender
585
+ << " , queryUid: " << *request.Uid
586
+ << " , expected sid: " << compileResult->Query ->UserSid
587
+ << " , actual sid: " << userSid);
588
+ }
587
589
}
588
590
}
589
591
@@ -609,16 +611,19 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
609
611
Y_ENSURE (query.UserSid == userSid);
610
612
}
611
613
612
- auto compileResult = QueryCache.FindByQuery (query, request.KeepInCache );
613
- if (compileResult) {
614
- Counters->ReportQueryCacheHit (dbCounters, true );
615
614
616
- LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Served query from cache from query text"
617
- << " , sender: " << ev->Sender
618
- << " , queryUid: " << compileResult->Uid );
615
+ if (!request.TempTablesState || request.TempTablesState ->TempTables .empty ()) {
616
+ auto compileResult = QueryCache.FindByQuery (query, request.KeepInCache );
617
+ if (compileResult) {
618
+ Counters->ReportQueryCacheHit (dbCounters, true );
619
619
620
- ReplyFromCache (ev->Sender , compileResult, ctx, ev->Cookie , std::move (ev->Get ()->Orbit ), std::move (compileServiceSpan));
621
- return ;
620
+ LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Served query from cache from query text"
621
+ << " , sender: " << ev->Sender
622
+ << " , queryUid: " << compileResult->Uid );
623
+
624
+ ReplyFromCache (ev->Sender , compileResult, ctx, ev->Cookie , std::move (ev->Get ()->Orbit ), std::move (compileServiceSpan));
625
+ return ;
626
+ }
622
627
}
623
628
624
629
CollectDiagnostics = request.CollectDiagnostics ;
@@ -672,7 +677,11 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
672
677
auto dbCounters = request.DbCounters ;
673
678
Counters->ReportRecompileRequestGet (dbCounters);
674
679
675
- auto compileResult = QueryCache.FindByUid (request.Uid , false );
680
+ TKqpCompileResult::TConstPtr compileResult = nullptr ;
681
+ if (!request.TempTablesState || request.TempTablesState ->TempTables .empty ()) {
682
+ compileResult = QueryCache.FindByUid (request.Uid , false );
683
+ }
684
+
676
685
if (compileResult || request.Query ) {
677
686
Counters->ReportCompileRequestCompile (dbCounters);
678
687
@@ -736,18 +745,26 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
736
745
737
746
bool keepInCache = compileRequest.KeepInCache && compileResult->AllowCache ;
738
747
748
+ bool hasTempTables = compileRequest.TempTablesState
749
+ && (!compileRequest.TempTablesState ->TempTables .empty ());
750
+ if (compileResult->PreparedQuery ) {
751
+ hasTempTables = compileResult->PreparedQuery ->HasTempTables (compileRequest.TempTablesState );
752
+ }
753
+
739
754
try {
740
755
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 )) {
756
+ if (!hasTempTables) {
757
+ if (QueryCache.FindByUid (compileResult->Uid , false )) {
758
+ QueryCache.Replace (compileResult);
759
+ } else if (keepInCache) {
760
+ if (QueryCache.Insert (compileResult, TableServiceConfig.GetEnableAstCache ())) {
749
761
Counters->CompileQueryCacheEvicted ->Inc ();
750
- };
762
+ }
763
+ if (compileResult->Query && compileResult->Query ->Settings .IsPrepareQuery ) {
764
+ if (InsertPreparingQuery (compileResult, compileRequest.KeepInCache )) {
765
+ Counters->CompileQueryCacheEvicted ->Inc ();
766
+ };
767
+ }
751
768
}
752
769
}
753
770
@@ -762,8 +779,10 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
762
779
request.Cookie , std::move (request.Orbit ), std::move (request.CompileServiceSpan ), (CollectDiagnostics ? ev->Get ()->ReplayMessageUserView : std::nullopt));
763
780
}
764
781
} else {
765
- if (QueryCache.FindByUid (compileResult->Uid , false )) {
766
- QueryCache.EraseByUid (compileResult->Uid );
782
+ if (!hasTempTables) {
783
+ if (QueryCache.FindByUid (compileResult->Uid , false )) {
784
+ QueryCache.EraseByUid (compileResult->Uid );
785
+ }
767
786
}
768
787
}
769
788
@@ -819,18 +838,20 @@ class TKqpCompileService : public TActorBootstrapped<TKqpCompileService> {
819
838
auto & query = ev->Get ()->Query ;
820
839
auto compileRequest = RequestsQueue.FinishActiveRequest (query);
821
840
if (parseResult && parseResult->Ast ->IsOk ()) {
822
- auto compileResult = QueryCache.FindByAst (query, *parseResult->Ast , compileRequest.KeepInCache );
823
- if (compileResult) {
824
- Counters->ReportQueryCacheHit (compileRequest.DbCounters , true );
841
+ if (!compileRequest.TempTablesState || compileRequest.TempTablesState ->TempTables .empty ()) {
842
+ auto compileResult = QueryCache.FindByAst (query, *parseResult->Ast , compileRequest.KeepInCache );
843
+ if (compileResult) {
844
+ Counters->ReportQueryCacheHit (compileRequest.DbCounters , true );
825
845
826
- LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Served query from cache from ast"
827
- << " , sender: " << compileRequest.Sender
828
- << " , queryUid: " << compileResult->Uid );
846
+ LOG_DEBUG_S (ctx, NKikimrServices::KQP_COMPILE_SERVICE, " Served query from cache from ast"
847
+ << " , sender: " << compileRequest.Sender
848
+ << " , queryUid: " << compileResult->Uid );
829
849
830
- compileResult->Ast ->PgAutoParamValues = std::move (parseResult->Ast ->PgAutoParamValues );
850
+ compileResult->Ast ->PgAutoParamValues = std::move (parseResult->Ast ->PgAutoParamValues );
831
851
832
- ReplyFromCache (compileRequest.Sender , compileResult, ctx, compileRequest.Cookie , std::move (compileRequest.Orbit ), std::move (compileRequest.CompileServiceSpan ));
833
- return ;
852
+ ReplyFromCache (compileRequest.Sender , compileResult, ctx, compileRequest.Cookie , std::move (compileRequest.Orbit ), std::move (compileRequest.CompileServiceSpan ));
853
+ return ;
854
+ }
834
855
}
835
856
}
836
857
Counters->ReportQueryCacheHit (compileRequest.DbCounters , false );
0 commit comments