summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Doronin <[email protected]>2025-09-30 15:24:41 +0200
committerGitHub <[email protected]>2025-09-30 16:24:41 +0300
commit26207edfacb0dc3a6f400d3eaf708bf64fe4d35d (patch)
tree9587e33c7518da502a03c2acf9959db97a9b3ed8
parent731435ddb5de2eefc75cee989758d5b3b780905e (diff)
cs validation has been fixed (#25903)
-rw-r--r--ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp4
-rw-r--r--ydb/core/tx/schemeshard/olap/columns/schema.cpp11
-rw-r--r--ydb/core/tx/schemeshard/olap/columns/update.cpp1
-rw-r--r--ydb/core/tx/schemeshard/olap/columns/update.h1
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 b73a4940301..d194baea04c 100644
--- a/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp
+++ b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp
@@ -3602,10 +3602,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 3ff56dbbdba..9e10152fbe9 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 88cdcca3ef3..ba015456a7d 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<TString> columnNames;
diff --git a/ydb/core/tx/schemeshard/olap/columns/update.h b/ydb/core/tx/schemeshard/olap/columns/update.h
index 5670ac5f23e..e08ad53cf78 100644
--- a/ydb/core/tx/schemeshard/olap/columns/update.h
+++ b/ydb/core/tx/schemeshard/olap/columns/update.h
@@ -80,6 +80,7 @@ private:
YDB_READONLY_DEF(TVector<TOlapColumnAdd>, AddColumns);
YDB_READONLY_DEF(TSet<TString>, DropColumns);
YDB_READONLY_DEF(TVector<TOlapColumnDiff>, AlterColumns);
+ YDB_READONLY_DEF(TVector<TString>, PrimaryKeyColumnNames);
public:
bool Parse(const NKikimrSchemeOp::TColumnTableSchema& tableSchema, IErrorCollector& errors, bool allowNullKeys = false);
bool Parse(const NKikimrSchemeOp::TAlterColumnTableSchema& alterRequest, IErrorCollector& errors);