From 02e4abc1fa5f00a207010969e130aa78c5285d1c Mon Sep 17 00:00:00 2001 From: gvit Date: Thu, 9 Nov 2023 11:30:00 +0300 Subject: unnest TTableConstInfo class in kqp resolve KIKIMR-19910 --- ydb/core/kqp/common/kqp_resolve.h | 172 ++++++++++----------- .../kqp/executer_actor/kqp_partition_helper.cpp | 2 +- ydb/core/kqp/executer_actor/kqp_table_resolver.cpp | 2 +- ydb/core/kqp/executer_actor/kqp_tasks_graph.h | 4 +- ydb/core/kqp/query_data/kqp_prepared_query.h | 3 +- 5 files changed, 90 insertions(+), 93 deletions(-) diff --git a/ydb/core/kqp/common/kqp_resolve.h b/ydb/core/kqp/common/kqp_resolve.h index 36deda8e071..8226503d9a1 100644 --- a/ydb/core/kqp/common/kqp_resolve.h +++ b/ydb/core/kqp/common/kqp_resolve.h @@ -23,110 +23,108 @@ enum class ETableKind { External }; -class TKqpTableKeys { -public: - using TColumn = NSharding::TShardingBase::TColumn; - - struct TTableConstInfo : public TAtomicRefCount { - TString Path; - TMap Columns; - TVector KeyColumns; - TVector KeyColumnTypes; - ETableKind TableKind = ETableKind::Unknown; - THashMap Sequences; - THashMap DefaultFromLiteral; - TTableConstInfo() {} - TTableConstInfo(const TString& path) : Path(path) {} +struct TTableConstInfo : public TAtomicRefCount { + TString Path; + TMap Columns; + TVector KeyColumns; + TVector KeyColumnTypes; + ETableKind TableKind = ETableKind::Unknown; + THashMap Sequences; + THashMap DefaultFromLiteral; + + TTableConstInfo() {} + TTableConstInfo(const TString& path) : Path(path) {} + + void FillColumn(const NKqpProto::TKqpPhyColumn& phyColumn) { + if (Columns.FindPtr(phyColumn.GetId().GetName())) { + return; + } - void FillColumn(const NKqpProto::TKqpPhyColumn& phyColumn) { - if (Columns.FindPtr(phyColumn.GetId().GetName())) { - return; - } + NSharding::TShardingBase::TColumn column; + column.Id = phyColumn.GetId().GetId(); - TKqpTableKeys::TColumn column; - column.Id = phyColumn.GetId().GetId(); + if (phyColumn.GetTypeId() != NScheme::NTypeIds::Pg) { + column.Type = NScheme::TTypeInfo(phyColumn.GetTypeId()); + } else { + column.Type = NScheme::TTypeInfo(phyColumn.GetTypeId(), + NPg::TypeDescFromPgTypeName(phyColumn.GetPgTypeName())); + } + column.NotNull = phyColumn.GetNotNull(); - if (phyColumn.GetTypeId() != NScheme::NTypeIds::Pg) { - column.Type = NScheme::TTypeInfo(phyColumn.GetTypeId()); - } else { - column.Type = NScheme::TTypeInfo(phyColumn.GetTypeId(), - NPg::TypeDescFromPgTypeName(phyColumn.GetPgTypeName())); + Columns.emplace(phyColumn.GetId().GetName(), std::move(column)); + if (!phyColumn.GetDefaultFromSequence().empty()) { + TString seq = phyColumn.GetDefaultFromSequence(); + if (!seq.StartsWith(Path)) { + seq = Path + "/" + seq; } - column.NotNull = phyColumn.GetNotNull(); - - Columns.emplace(phyColumn.GetId().GetName(), std::move(column)); - if (!phyColumn.GetDefaultFromSequence().empty()) { - TString seq = phyColumn.GetDefaultFromSequence(); - if (!seq.StartsWith(Path)) { - seq = Path + "/" + seq; - } Sequences.emplace(phyColumn.GetId().GetName(), seq); - } - - if (phyColumn.HasDefaultFromLiteral()) { - DefaultFromLiteral.emplace( - phyColumn.GetId().GetName(), - phyColumn.GetDefaultFromLiteral()); - } } - void AddColumn(const TString& columnName) { - auto& sysColumns = GetSystemColumns(); - if (Columns.FindPtr(columnName)) { - return; - } - - auto* systemColumn = sysColumns.FindPtr(columnName); - YQL_ENSURE(systemColumn, "Unknown table column" - << ", table: " << Path - << ", column: " << columnName); + if (phyColumn.HasDefaultFromLiteral()) { + DefaultFromLiteral.emplace( + phyColumn.GetId().GetName(), + phyColumn.GetDefaultFromLiteral()); + } + } - TKqpTableKeys::TColumn column; - column.Id = systemColumn->ColumnId; - column.Type = NScheme::TTypeInfo(systemColumn->TypeId); - column.NotNull = false; - Columns.emplace(columnName, std::move(column)); + void AddColumn(const TString& columnName) { + auto& sysColumns = GetSystemColumns(); + if (Columns.FindPtr(columnName)) { + return; } + auto* systemColumn = sysColumns.FindPtr(columnName); + YQL_ENSURE(systemColumn, "Unknown table column" + << ", table: " << Path + << ", column: " << columnName); - void FillTable(const NKqpProto::TKqpPhyTable& phyTable) { - switch (phyTable.GetKind()) { - case NKqpProto::TABLE_KIND_DS: - TableKind = ETableKind::Datashard; - break; - case NKqpProto::TABLE_KIND_OLAP: - TableKind = ETableKind::Olap; - break; - case NKqpProto::TABLE_KIND_SYS_VIEW: - TableKind = ETableKind::SysView; - break; - case NKqpProto::TABLE_KIND_EXTERNAL: - TableKind = ETableKind::External; - return; - default: - YQL_ENSURE(false, "Unexpected phy table kind: " << (i64) phyTable.GetKind()); - } + NSharding::TShardingBase::TColumn column; + column.Id = systemColumn->ColumnId; + column.Type = NScheme::TTypeInfo(systemColumn->TypeId); + column.NotNull = false; + Columns.emplace(columnName, std::move(column)); + } - for (const auto& [_, phyColumn] : phyTable.GetColumns()) { - FillColumn(phyColumn); - } + void FillTable(const NKqpProto::TKqpPhyTable& phyTable) { + switch (phyTable.GetKind()) { + case NKqpProto::TABLE_KIND_DS: + TableKind = ETableKind::Datashard; + break; + case NKqpProto::TABLE_KIND_OLAP: + TableKind = ETableKind::Olap; + break; + case NKqpProto::TABLE_KIND_SYS_VIEW: + TableKind = ETableKind::SysView; + break; + case NKqpProto::TABLE_KIND_EXTERNAL: + TableKind = ETableKind::External; + return; + default: + YQL_ENSURE(false, "Unexpected phy table kind: " << (i64) phyTable.GetKind()); + } - YQL_ENSURE(KeyColumns.empty()); - KeyColumns.reserve(phyTable.KeyColumnsSize()); - YQL_ENSURE(KeyColumnTypes.empty()); - KeyColumnTypes.reserve(phyTable.KeyColumnsSize()); - for (const auto& keyColumnId : phyTable.GetKeyColumns()) { - const auto& column = Columns.FindPtr(keyColumnId.GetName()); - YQL_ENSURE(column); + for (const auto& [_, phyColumn] : phyTable.GetColumns()) { + FillColumn(phyColumn); + } - KeyColumns.push_back(keyColumnId.GetName()); - KeyColumnTypes.push_back(column->Type); - } + YQL_ENSURE(KeyColumns.empty()); + KeyColumns.reserve(phyTable.KeyColumnsSize()); + YQL_ENSURE(KeyColumnTypes.empty()); + KeyColumnTypes.reserve(phyTable.KeyColumnsSize()); + for (const auto& keyColumnId : phyTable.GetKeyColumns()) { + const auto& column = Columns.FindPtr(keyColumnId.GetName()); + YQL_ENSURE(column); + + KeyColumns.push_back(keyColumnId.GetName()); + KeyColumnTypes.push_back(column->Type); } - }; + } +}; +class TKqpTableKeys { +public: struct TTable { private: TIntrusivePtr TableConstInfo; @@ -142,7 +140,7 @@ public: return TableConstInfo->Path; } - const TMap& GetColumns() const { + const TMap& GetColumns() const { return TableConstInfo->Columns; } diff --git a/ydb/core/kqp/executer_actor/kqp_partition_helper.cpp b/ydb/core/kqp/executer_actor/kqp_partition_helper.cpp index 61e867999fd..8c9b3e9a075 100644 --- a/ydb/core/kqp/executer_actor/kqp_partition_helper.cpp +++ b/ydb/core/kqp/executer_actor/kqp_partition_helper.cpp @@ -111,7 +111,7 @@ THashMap PartitionParamByKey( THashMap PartitionParamByKeyPrefix( const NUdf::TUnboxedValue& value, NKikimr::NMiniKQL::TType* type, - const TTableId& tableId, const TIntrusiveConstPtr& tableInfo, const TKeyDesc& key, + const TTableId& tableId, const TIntrusiveConstPtr& tableInfo, const TKeyDesc& key, const NMiniKQL::THolderFactory&, const NMiniKQL::TTypeEnvironment& typeEnv) { YQL_ENSURE(tableInfo); diff --git a/ydb/core/kqp/executer_actor/kqp_table_resolver.cpp b/ydb/core/kqp/executer_actor/kqp_table_resolver.cpp index ace9db43d6c..3e29f7e0127 100644 --- a/ydb/core/kqp/executer_actor/kqp_table_resolver.cpp +++ b/ydb/core/kqp/executer_actor/kqp_table_resolver.cpp @@ -198,7 +198,7 @@ private: } private: - THolder ExtractKey(const TTableId& table, const TIntrusiveConstPtr& tableInfo, TKeyDesc::ERowOperation operation) { + THolder ExtractKey(const TTableId& table, const TIntrusiveConstPtr& tableInfo, TKeyDesc::ERowOperation operation) { auto range = GetFullRange(tableInfo->KeyColumnTypes.size()); return MakeHolder(table, range.ToTableRange(), operation, tableInfo->KeyColumnTypes, diff --git a/ydb/core/kqp/executer_actor/kqp_tasks_graph.h b/ydb/core/kqp/executer_actor/kqp_tasks_graph.h index 5c21eebe162..b4f68ea1649 100644 --- a/ydb/core/kqp/executer_actor/kqp_tasks_graph.h +++ b/ydb/core/kqp/executer_actor/kqp_tasks_graph.h @@ -33,7 +33,7 @@ struct TStageInfoMeta { TTableId TableId; TString TablePath; ETableKind TableKind; - TIntrusiveConstPtr TableConstInfo; + TIntrusiveConstPtr TableConstInfo; TIntrusiveConstPtr ColumnTableInfoPtr; TVector SkipNullKeys; @@ -259,7 +259,7 @@ void FillChannelDesc(const TKqpTasksGraph& tasksGraph, NYql::NDqProto::TChannel& const NYql::NDq::TChannel& channel, const NKikimrConfig::TTableServiceConfig::EChannelTransportVersion chanTransportVersion); template -TVector BuildKqpColumns(const Proto& op, TIntrusiveConstPtr tableInfo) { +TVector BuildKqpColumns(const Proto& op, TIntrusiveConstPtr tableInfo) { TVector columns; columns.reserve(op.GetColumns().size()); diff --git a/ydb/core/kqp/query_data/kqp_prepared_query.h b/ydb/core/kqp/query_data/kqp_prepared_query.h index b1d07486da1..43e7f627b67 100644 --- a/ydb/core/kqp/query_data/kqp_prepared_query.h +++ b/ydb/core/kqp/query_data/kqp_prepared_query.h @@ -33,7 +33,7 @@ struct TPhyTxResultMetadata { }; struct TTableConstInfoMap : public TAtomicRefCount { - THashMap> Map; + THashMap> Map; }; class TKqpPhyTxHolder { @@ -127,7 +127,6 @@ public: class TPreparedQueryHolder { private: - using TTableConstInfo = TKqpTableKeys::TTableConstInfo; YDB_ACCESSOR_DEF(TLlvmSettings, LlvmSettings); std::shared_ptr Proto; -- cgit v1.3