Browse Source

KIKIMR-17960: Create temp table and remove by close session

shumkovnd 1 year ago
parent
commit
4cc49d583b

+ 17 - 6
ydb/core/kqp/common/compilation/events.h

@@ -3,6 +3,7 @@
 
 #include <library/cpp/actors/core/event_local.h>
 #include <ydb/library/aclib/aclib.h>
+#include <ydb/core/kqp/common/simple/temp_tables.h>
 #include <ydb/core/kqp/common/simple/kqp_event_ids.h>
 #include <ydb/core/kqp/common/simple/query_id.h>
 #include <ydb/core/kqp/counters/kqp_counters.h>
@@ -10,15 +11,18 @@
 namespace NKikimr::NKqp::NPrivateEvents {
 
 struct TEvCompileRequest: public TEventLocal<TEvCompileRequest, TKqpEvents::EvCompileRequest> {
-    TEvCompileRequest(const TIntrusiveConstPtr<NACLib::TUserToken>& userToken, const TMaybe<TString>& uid, TMaybe<TKqpQueryId>&& query,
-        bool keepInCache, TInstant deadline, TKqpDbCountersPtr dbCounters, NLWTrace::TOrbit orbit = {})
+    TEvCompileRequest(const TIntrusiveConstPtr<NACLib::TUserToken>& userToken, const TMaybe<TString>& uid,
+        TMaybe<TKqpQueryId>&& query, bool keepInCache, TInstant deadline,
+        TKqpDbCountersPtr dbCounters, NLWTrace::TOrbit orbit = {},
+        TKqpTempTablesState::TConstPtr tempTablesState = nullptr)
         : UserToken(userToken)
         , Uid(uid)
         , Query(std::move(query))
         , KeepInCache(keepInCache)
         , Deadline(deadline)
         , DbCounters(dbCounters)
-        , Orbit(std::move(orbit)) {
+        , Orbit(std::move(orbit))
+        , TempTablesState(std::move(tempTablesState)) {
         Y_ENSURE(Uid.Defined() != Query.Defined());
     }
 
@@ -32,17 +36,22 @@ struct TEvCompileRequest: public TEventLocal<TEvCompileRequest, TKqpEvents::EvCo
     TMaybe<bool> DocumentApiRestricted;
 
     NLWTrace::TOrbit Orbit;
+
+    TKqpTempTablesState::TConstPtr TempTablesState;
 };
 
 struct TEvRecompileRequest: public TEventLocal<TEvRecompileRequest, TKqpEvents::EvRecompileRequest> {
-    TEvRecompileRequest(const TIntrusiveConstPtr<NACLib::TUserToken>& userToken, const TString& uid, const TMaybe<TKqpQueryId>& query,
-        TInstant deadline, TKqpDbCountersPtr dbCounters, NLWTrace::TOrbit orbit = {})
+    TEvRecompileRequest(const TIntrusiveConstPtr<NACLib::TUserToken>& userToken, const TString& uid,
+        const TMaybe<TKqpQueryId>& query, TInstant deadline,
+        TKqpDbCountersPtr dbCounters, NLWTrace::TOrbit orbit = {},
+        TKqpTempTablesState::TConstPtr tempTablesState = nullptr)
         : UserToken(userToken)
         , Uid(uid)
         , Query(query)
         , Deadline(deadline)
         , DbCounters(dbCounters)
-        , Orbit(std::move(orbit)) {
+        , Orbit(std::move(orbit))
+        , TempTablesState(std::move(tempTablesState)) {
     }
 
     TIntrusiveConstPtr<NACLib::TUserToken> UserToken;
@@ -53,6 +62,8 @@ struct TEvRecompileRequest: public TEventLocal<TEvRecompileRequest, TKqpEvents::
     TKqpDbCountersPtr DbCounters;
 
     NLWTrace::TOrbit Orbit;
+
+    TKqpTempTablesState::TConstPtr TempTablesState;
 };
 
 struct TEvCompileResponse: public TEventLocal<TEvCompileResponse, TKqpEvents::EvCompileResponse> {

+ 1 - 0
ydb/core/kqp/common/simple/CMakeLists.darwin-x86_64.txt

@@ -23,4 +23,5 @@ target_sources(kqp-common-simple PRIVATE
   ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/settings.cpp
   ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/services.cpp
   ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/kqp_event_ids.cpp
+  ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/temp_tables.cpp
 )

+ 1 - 0
ydb/core/kqp/common/simple/CMakeLists.linux-aarch64.txt

@@ -24,4 +24,5 @@ target_sources(kqp-common-simple PRIVATE
   ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/settings.cpp
   ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/services.cpp
   ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/kqp_event_ids.cpp
+  ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/temp_tables.cpp
 )

+ 1 - 0
ydb/core/kqp/common/simple/CMakeLists.linux-x86_64.txt

@@ -24,4 +24,5 @@ target_sources(kqp-common-simple PRIVATE
   ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/settings.cpp
   ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/services.cpp
   ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/kqp_event_ids.cpp
+  ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/temp_tables.cpp
 )

+ 1 - 0
ydb/core/kqp/common/simple/CMakeLists.windows-x86_64.txt

@@ -23,4 +23,5 @@ target_sources(kqp-common-simple PRIVATE
   ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/settings.cpp
   ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/services.cpp
   ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/kqp_event_ids.cpp
+  ${CMAKE_SOURCE_DIR}/ydb/core/kqp/common/simple/temp_tables.cpp
 )

+ 5 - 0
ydb/core/kqp/common/simple/temp_tables.cpp

@@ -0,0 +1,5 @@
+#include "temp_tables.h"
+
+namespace NKikimr::NKqp {
+
+} // namespace NKikimr::NKqp

+ 27 - 0
ydb/core/kqp/common/simple/temp_tables.h

@@ -0,0 +1,27 @@
+#pragma once
+
+#include <ydb/library/aclib/aclib.h>
+
+#include <optional>
+
+#include <util/generic/fwd.h>
+#include <util/generic/hash.h>
+#include <util/generic/vector.h>
+
+namespace NKikimr::NKqp {
+
+struct TKqpTempTablesState {
+    struct TTempTableInfo {
+        TString Name;
+        TString WorkingDir;
+        TString Database;
+        TIntrusiveConstPtr<NACLib::TUserToken> UserToken;
+        TString Cluster;
+    };
+    std::optional<TString> SessionId;
+    THashMap<std::pair<TString, TString>, TTempTableInfo> TempTables;
+
+    using TConstPtr = std::shared_ptr<const TKqpTempTablesState>;
+};
+
+} // namespace NKikimr::NKqp

+ 1 - 0
ydb/core/kqp/common/simple/ya.make

@@ -6,6 +6,7 @@ SRCS(
     settings.cpp
     services.cpp
     kqp_event_ids.cpp
+    temp_tables.cpp
 )
 
 PEERDIR(

+ 1 - 0
ydb/core/kqp/compile_service/CMakeLists.darwin-x86_64.txt

@@ -17,6 +17,7 @@ target_link_libraries(core-kqp-compile_service PUBLIC
   ydb-core-actorlib_impl
   ydb-core-base
   core-kqp-host
+  kqp-common-simple
   providers-common-http_gateway
 )
 target_sources(core-kqp-compile_service PRIVATE

+ 1 - 0
ydb/core/kqp/compile_service/CMakeLists.linux-aarch64.txt

@@ -18,6 +18,7 @@ target_link_libraries(core-kqp-compile_service PUBLIC
   ydb-core-actorlib_impl
   ydb-core-base
   core-kqp-host
+  kqp-common-simple
   providers-common-http_gateway
 )
 target_sources(core-kqp-compile_service PRIVATE

Some files were not shown because too many files changed in this diff