From 85de40a101fd00b0b132bd3969455a5f1b219427 Mon Sep 17 00:00:00 2001 From: Oleg Doronin Date: Fri, 26 Sep 2025 19:29:38 +0000 Subject: [PATCH] cs validation has been fixed --- ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp | 4 ---- ydb/core/tx/schemeshard/olap/columns/schema.cpp | 11 ++++++++++- ydb/core/tx/schemeshard/olap/columns/update.cpp | 1 + ydb/core/tx/schemeshard/olap/columns/update.h | 1 + 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp index 309b05cb83f1..7cbf1e1cc5a8 100644 --- a/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp +++ b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp @@ -3576,10 +3576,6 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetQueryClient(); - if (IsOlap) { - return; - } - { auto result = db.ExecuteQuery(Sprintf(R"( CREATE TABLE Table ( diff --git a/ydb/core/tx/schemeshard/olap/columns/schema.cpp b/ydb/core/tx/schemeshard/olap/columns/schema.cpp index 3ff56dbbdbaf..9e10152fbe98 100644 --- a/ydb/core/tx/schemeshard/olap/columns/schema.cpp +++ b/ydb/core/tx/schemeshard/olap/columns/schema.cpp @@ -84,7 +84,16 @@ bool TOlapColumnsDescription::ApplyUpdate( auto it = orderedKeyColumnIds.begin(); for (ui32 i = 0; i < orderedKeyColumnIds.size(); ++i, ++it) { KeyColumnIds.emplace_back(it->second); - Y_ABORT_UNLESS(i == it->first); + if (i != it->first) { + const TString missedColumnName = i < schemaUpdate.GetPrimaryKeyColumnNames().size() ? schemaUpdate.GetPrimaryKeyColumnNames()[i] : "@unknown"; + errors.AddError(NKikimrScheme::StatusSchemeError, Sprintf("Unknown column '%s' specified in key column list", missedColumnName.data())); + return false; + } + } + if (orderedKeyColumnIds.size() < schemaUpdate.GetPrimaryKeyColumnNames().size()) { + const TString missedColumnName = schemaUpdate.GetPrimaryKeyColumnNames()[orderedKeyColumnIds.size()]; + errors.AddError(NKikimrScheme::StatusSchemeError, Sprintf("Unknown column '%s' specified in key column list", missedColumnName.data())); + return false; } if (KeyColumnIds.empty()) { errors.AddError(NKikimrScheme::StatusSchemeError, "No primary key specified"); diff --git a/ydb/core/tx/schemeshard/olap/columns/update.cpp b/ydb/core/tx/schemeshard/olap/columns/update.cpp index 88cdcca3ef3c..ba015456a7d5 100644 --- a/ydb/core/tx/schemeshard/olap/columns/update.cpp +++ b/ydb/core/tx/schemeshard/olap/columns/update.cpp @@ -405,6 +405,7 @@ void TOlapColumnAdd::ParseFromLocalDB(const NKikimrSchemeOp::TOlapColumnDescript errors.AddError(NKikimrScheme::StatusSchemeError, TStringBuilder() << "Duplicate key column '" << pkKey << "'"); return false; } + PrimaryKeyColumnNames.emplace_back(pkKey); } TSet columnNames; diff --git a/ydb/core/tx/schemeshard/olap/columns/update.h b/ydb/core/tx/schemeshard/olap/columns/update.h index 5670ac5f23e9..e08ad53cf78f 100644 --- a/ydb/core/tx/schemeshard/olap/columns/update.h +++ b/ydb/core/tx/schemeshard/olap/columns/update.h @@ -80,6 +80,7 @@ class TOlapColumnsUpdate { YDB_READONLY_DEF(TVector, AddColumns); YDB_READONLY_DEF(TSet, DropColumns); YDB_READONLY_DEF(TVector, AlterColumns); + YDB_READONLY_DEF(TVector, PrimaryKeyColumnNames); public: bool Parse(const NKikimrSchemeOp::TColumnTableSchema& tableSchema, IErrorCollector& errors, bool allowNullKeys = false); bool Parse(const NKikimrSchemeOp::TAlterColumnTableSchema& alterRequest, IErrorCollector& errors);