summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSema Checherinda <[email protected]>2022-05-23 23:23:45 +0300
committerSema Checherinda <[email protected]>2022-05-23 23:23:45 +0300
commite8aa5160e09378c2bb8f8ed7c806a52336a34810 (patch)
tree022f0be57337ba8a36d2b341f45613c56b749755
parent475a41e940b15e231717ffaebcb8e14a87910c90 (diff)
KIKIMR-14282 YDBREQUESTS-1324 add index schema versions into program
ref:2ff67b6ceeef49cb31420be7d82ceddc93d39607
-rw-r--r--ydb/core/kqp/compile/kqp_compile.cpp7
-rw-r--r--ydb/core/kqp/host/kqp_runner.cpp8
-rw-r--r--ydb/core/kqp/kqp_compile_request.cpp5
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_exec.cpp6
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_opt_build.cpp6
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_provider.cpp48
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_provider_impl.h4
-rw-r--r--ydb/core/kqp/ut/kqp_scheme_ut.cpp4
8 files changed, 71 insertions, 17 deletions
diff --git a/ydb/core/kqp/compile/kqp_compile.cpp b/ydb/core/kqp/compile/kqp_compile.cpp
index bf95244d090..68d52ea665a 100644
--- a/ydb/core/kqp/compile/kqp_compile.cpp
+++ b/ydb/core/kqp/compile/kqp_compile.cpp
@@ -423,12 +423,13 @@ public:
auto ops = TableOperationsToProto(tableOps, ctx);
for (auto& op : ops) {
- const auto& tableName = op.GetTable();
+ const auto tableName = op.GetTable();
+ auto operation = (TYdbOperation)op.GetOperation();
- queryProto.AddTableOps()->Swap(&op);
+ *queryProto.AddTableOps() = std::move(op);
const auto& desc = TablesData->GetTable(Cluster, tableName);
- TableDescriptionToTableInfo(desc, queryProto.AddTableInfos());
+ TableDescriptionToTableInfo(desc, operation, *queryProto.MutableTableInfos());
}
for (const auto& tx : query.Transactions()) {
diff --git a/ydb/core/kqp/host/kqp_runner.cpp b/ydb/core/kqp/host/kqp_runner.cpp
index 52fef46c598..293eea0bd2e 100644
--- a/ydb/core/kqp/host/kqp_runner.cpp
+++ b/ydb/core/kqp/host/kqp_runner.cpp
@@ -475,11 +475,13 @@ private:
auto operations = TableOperationsToProto(dataQuery.Operations(), ctx);
for (auto& op : operations) {
- const auto& tableName = op.GetTable();
+ const auto tableName = op.GetTable();
+ auto operation = (TYdbOperation)op.GetOperation();
+
+ *kql->AddOperations() = std::move(op);
- kql->AddOperations()->CopyFrom(op);
const auto& desc = TransformCtx->Tables->GetTable(cluster, tableName);
- TableDescriptionToTableInfo(desc, kql->AddTableInfo());
+ TableDescriptionToTableInfo(desc, operation, *kql->MutableTableInfo());
}
TransformCtx->PreparingKql = kql;
diff --git a/ydb/core/kqp/kqp_compile_request.cpp b/ydb/core/kqp/kqp_compile_request.cpp
index 2c18af159bc..76e85a27e0f 100644
--- a/ydb/core/kqp/kqp_compile_request.cpp
+++ b/ydb/core/kqp/kqp_compile_request.cpp
@@ -186,6 +186,11 @@ private:
entry.SyncVersion = false;
entry.ShowPrivatePath = true;
+ LOG_DEBUG_S(ctx, NKikimrServices::KQP_COMPILE_REQUEST, "Query has dependency on table, check the table schema version"
+ << ", self: " << ctx.SelfID
+ << ", pathId: " << entry.TableId.PathId
+ << ", version: " << entry.TableId.SchemaVersion);
+
navigate->ResultSet.emplace_back(entry);
}
diff --git a/ydb/core/kqp/provider/yql_kikimr_exec.cpp b/ydb/core/kqp/provider/yql_kikimr_exec.cpp
index b9cb673b287..5eeaa7f465a 100644
--- a/ydb/core/kqp/provider/yql_kikimr_exec.cpp
+++ b/ydb/core/kqp/provider/yql_kikimr_exec.cpp
@@ -1165,10 +1165,12 @@ private:
for (const auto& op : tableOps) {
auto table = op.GetTable();
+ auto operation = (TYdbOperation)op.GetOperation();
const auto& desc = SessionCtx->Tables().GetTable(cluster, table);
YQL_ENSURE(desc.Metadata);
- tableInfo.push_back(NKqpProto::TKqpTableInfo());
- TableDescriptionToTableInfo(desc, &tableInfo.back());
+ size_t size = tableInfo.size();
+ TableDescriptionToTableInfo(desc, operation, tableInfo);
+ Y_VERIFY(size + 1 == tableInfo.size());
}
if (!SessionCtx->HasTx()) {
diff --git a/ydb/core/kqp/provider/yql_kikimr_opt_build.cpp b/ydb/core/kqp/provider/yql_kikimr_opt_build.cpp
index 0ba0b349524..2c5e4bd311b 100644
--- a/ydb/core/kqp/provider/yql_kikimr_opt_build.cpp
+++ b/ydb/core/kqp/provider/yql_kikimr_opt_build.cpp
@@ -1,4 +1,5 @@
#include "yql_kikimr_provider_impl.h"
+#include "yql_kikimr_gateway.h"
#include <ydb/library/yql/core/yql_opt_utils.h>
#include <ydb/library/yql/utils/log/log.h>
@@ -130,6 +131,11 @@ bool ExploreTx(TExprBase node, TExprContext& ctx, const TKiDataSink& dataSink, T
auto table = key.GetTablePath();
txRes.Ops.insert(node.Raw());
auto result = ExploreTx(maybeRead.Cast().World(), ctx, dataSink, txRes);
+
+ if (const auto& view = key.GetView()) {
+ auto indexTable = IKikimrGateway::CreateIndexTablePath(table, view.GetRef());
+ txRes.TableOperations.push_back(BuildTableOpNode(cluster, indexTable, TYdbOperation::Select, read.Pos(), ctx));
+ }
txRes.TableOperations.push_back(BuildTableOpNode(cluster, table, TYdbOperation::Select, read.Pos(), ctx));
return result;
}
diff --git a/ydb/core/kqp/provider/yql_kikimr_provider.cpp b/ydb/core/kqp/provider/yql_kikimr_provider.cpp
index 635d1648279..eb492ccef0c 100644
--- a/ydb/core/kqp/provider/yql_kikimr_provider.cpp
+++ b/ydb/core/kqp/provider/yql_kikimr_provider.cpp
@@ -522,15 +522,51 @@ TVector<NKqpProto::TKqpTableOp> TableOperationsToProto(const TKiOperationList& o
return protoOps;
}
-void TableDescriptionToTableInfo(const TKikimrTableDescription& desc, NKqpProto::TKqpTableInfo* info) {
+template<class OutputIterator>
+void TableDescriptionToTableInfoImpl(const TKikimrTableDescription& desc, TYdbOperation op, OutputIterator back_inserter)
+{
YQL_ENSURE(desc.Metadata);
- info->SetTableName(desc.Metadata->Name);
- info->MutableTableId()->SetOwnerId(desc.Metadata->PathId.OwnerId());
- info->MutableTableId()->SetTableId(desc.Metadata->PathId.TableId());
- info->SetSchemaVersion(desc.Metadata->SchemaVersion);
+
+ auto info = NKqpProto::TKqpTableInfo();
+ info.SetTableName(desc.Metadata->Name);
+ info.MutableTableId()->SetOwnerId(desc.Metadata->PathId.OwnerId());
+ info.MutableTableId()->SetTableId(desc.Metadata->PathId.TableId());
+ info.SetSchemaVersion(desc.Metadata->SchemaVersion);
+
if (desc.Metadata->Indexes) {
- info->SetHasIndexTables(true);
+ info.SetHasIndexTables(true);
}
+
+ back_inserter = std::move(info);
+ ++back_inserter;
+
+ if (KikimrModifyOps() & op) {
+ for (ui32 idxNo = 0; idxNo < desc.Metadata->Indexes.size(); ++idxNo) {
+ const auto& idxDesc = desc.Metadata->Indexes[idxNo];
+ if (!idxDesc.ItUsedForWrite()) {
+ continue;
+ }
+
+ const auto& idxTableDesc = desc.Metadata->SecondaryGlobalIndexMetadata[idxNo];
+
+ auto info = NKqpProto::TKqpTableInfo();
+ info.SetTableName(idxTableDesc->Name);
+ info.MutableTableId()->SetOwnerId(idxTableDesc->PathId.OwnerId());
+ info.MutableTableId()->SetTableId(idxTableDesc->PathId.TableId());
+ info.SetSchemaVersion(idxTableDesc->SchemaVersion);
+
+ back_inserter = std::move(info);
+ ++back_inserter;
+ }
+ }
+}
+
+void TableDescriptionToTableInfo(const TKikimrTableDescription& desc, TYdbOperation op, NProtoBuf::RepeatedPtrField<NKqpProto::TKqpTableInfo>& infos) {
+ TableDescriptionToTableInfoImpl(desc, op, google::protobuf::internal::RepeatedPtrFieldBackInsertIterator<NKqpProto::TKqpTableInfo>(&infos));
+}
+
+void TableDescriptionToTableInfo(const TKikimrTableDescription& desc, TYdbOperation op, TVector<NKqpProto::TKqpTableInfo>& infos) {
+ TableDescriptionToTableInfoImpl(desc, op, std::back_inserter(infos));
}
bool TKikimrTransactionContextBase::ApplyTableOperations(const TVector<NKqpProto::TKqpTableOp>& operations,
diff --git a/ydb/core/kqp/provider/yql_kikimr_provider_impl.h b/ydb/core/kqp/provider/yql_kikimr_provider_impl.h
index e1aa3cda2b4..2149d95309f 100644
--- a/ydb/core/kqp/provider/yql_kikimr_provider_impl.h
+++ b/ydb/core/kqp/provider/yql_kikimr_provider_impl.h
@@ -235,7 +235,9 @@ TMaybe<TString> GetIsolationLevel(const NKikimrKqp::EIsolationLevel& isolationLe
TYdbOperation GetTableOp(const NNodes::TKiWriteTable& write);
TVector<NKqpProto::TKqpTableOp> TableOperationsToProto(const NNodes::TCoNameValueTupleList& operations, TExprContext& ctx);
TVector<NKqpProto::TKqpTableOp> TableOperationsToProto(const NNodes::TKiOperationList& operations, TExprContext& ctx);
-void TableDescriptionToTableInfo(const TKikimrTableDescription& desc, NKqpProto::TKqpTableInfo* info);
+
+void TableDescriptionToTableInfo(const TKikimrTableDescription& desc, TYdbOperation op, NProtoBuf::RepeatedPtrField<NKqpProto::TKqpTableInfo>& infos);
+void TableDescriptionToTableInfo(const TKikimrTableDescription& desc, TYdbOperation op, TVector<NKqpProto::TKqpTableInfo>& infos);
NNodes::TExprBase DeduplicateByMembers(const NNodes::TExprBase& expr, const TSet<TString>& members, TExprContext& ctx,
TPositionHandle pos);
diff --git a/ydb/core/kqp/ut/kqp_scheme_ut.cpp b/ydb/core/kqp/ut/kqp_scheme_ut.cpp
index 5ae1124c3fb..13c3ad4ccde 100644
--- a/ydb/core/kqp/ut/kqp_scheme_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_scheme_ut.cpp
@@ -379,11 +379,11 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
{
auto result = session.ExecuteDataQuery(query,
TTxControl::BeginTx(), execSettings).ExtractValueSync();
- UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), write ? EStatus::SUCCESS : EStatus::ABORTED, result.GetIssues().ToString());
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), write ? EStatus::SUCCESS : EStatus::SUCCESS, result.GetIssues().ToString());
if (write) {
auto commit = result.GetTransaction()->Commit().GetValueSync();
- UNIT_ASSERT_VALUES_EQUAL_C(commit.GetStatus(), UseNewEngine ? EStatus::SUCCESS : EStatus::ABORTED, commit.GetIssues().ToString());
+ UNIT_ASSERT_VALUES_EQUAL_C(commit.GetStatus(), UseNewEngine ? EStatus::SUCCESS : EStatus::SUCCESS, commit.GetIssues().ToString());
}
}