Skip to content

Commit 8571c01

Browse files
authored
25-1: Preserve column order (#18938)
2 parents 50c8726 + eda772d commit 8571c01

File tree

6 files changed

+49
-19
lines changed

6 files changed

+49
-19
lines changed

ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3400,11 +3400,11 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
34003400
UNIT_ASSERT_VALUES_EQUAL(decimalType.Scale, scale);
34013401
};
34023402

3403-
checkColumn(0,22, 20);
3404-
checkColumn(3, 1, 0);
3405-
checkColumn(4, 2, 1);
3406-
checkColumn(5, 22,9);
3407-
checkColumn(6, 35, 10);
3403+
checkColumn(2, 1, 0);
3404+
checkColumn(3, 2, 1);
3405+
checkColumn(4, 22, 9);
3406+
checkColumn(5, 35, 10);
3407+
checkColumn(6, 22, 20);
34083408
}
34093409

34103410
Y_UNIT_TEST(AlterTableWithPgColumn) {

ydb/core/tx/schemeshard/schemeshard__conditional_erase.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,9 @@ struct TSchemeShard::TTxRunConditionalErase: public TSchemeShard::TRwTxBase {
292292
}
293293

294294
for (const ui32 mainColumnId : mainTable->KeyColumnIds) {
295-
Y_ABORT_UNLESS(mainTable->Columns.contains(mainColumnId));
296-
const TString& mainKey = mainTable->Columns.at(mainColumnId).Name;
295+
auto it = mainTable->Columns.find(mainColumnId);
296+
Y_ABORT_UNLESS(it != mainTable->Columns.end());
297+
const TString& mainKey = it->second.Name;
297298

298299
if (keys.contains(mainKey)) {
299300
continue;
@@ -306,7 +307,7 @@ struct TSchemeShard::TTxRunConditionalErase: public TSchemeShard::TRwTxBase {
306307
return result;
307308
}
308309

309-
static THashMap<TString, ui32> MakeColumnNameToId(const THashMap<ui32, TTableInfo::TColumn>& columns) {
310+
static THashMap<TString, ui32> MakeColumnNameToId(const TMap<ui32, TTableInfo::TColumn>& columns) {
310311
THashMap<TString, ui32> result;
311312

312313
for (const auto& [id, column] : columns) {

ydb/core/tx/schemeshard/schemeshard_info_types.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,7 @@ TTableInfo::TAlterDataPtr TTableInfo::CreateAlterData(
596596

597597
const auto& ttl = op.GetTTLSettings();
598598

599-
if (!ValidateTtlSettings(ttl, source ? source->Columns : THashMap<ui32, TColumn>(), alterData->Columns, colName2Id, subDomain, errStr)) {
599+
if (!ValidateTtlSettings(ttl, source ? source->Columns : TMap<ui32, TColumn>(), alterData->Columns, colName2Id, subDomain, errStr)) {
600600
return nullptr;
601601
}
602602

ydb/core/tx/schemeshard/schemeshard_info_types.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ struct TTableInfo : public TSimpleRefCount<TTableInfo> {
397397

398398
ui32 NextColumnId = 1;
399399
ui64 AlterVersion = 0;
400-
THashMap<ui32, TColumn> Columns;
400+
TMap<ui32, TColumn> Columns;
401401
TVector<ui32> KeyColumnIds;
402402
bool IsBackup = false;
403403
bool IsRestore = false;
@@ -441,7 +441,7 @@ struct TTableInfo : public TSimpleRefCount<TTableInfo> {
441441
ui32 NextColumnId = 1; // Next unallocated column id
442442
ui64 AlterVersion = 0;
443443
ui64 PartitioningVersion = 0;
444-
THashMap<ui32, TColumn> Columns;
444+
TMap<ui32, TColumn> Columns;
445445
TVector<ui32> KeyColumnIds;
446446
bool IsBackup = false;
447447
bool IsRestore = false;
@@ -3800,8 +3800,8 @@ struct TBackupCollectionInfo : TSimpleRefCount<TBackupCollectionInfo> {
38003800
};
38013801

38023802
bool ValidateTtlSettings(const NKikimrSchemeOp::TTTLSettings& ttl,
3803-
const THashMap<ui32, TTableInfo::TColumn>& sourceColumns,
3804-
const THashMap<ui32, TTableInfo::TColumn>& alterColumns,
3803+
const TMap<ui32, TTableInfo::TColumn>& sourceColumns,
3804+
const TMap<ui32, TTableInfo::TColumn>& alterColumns,
38053805
const THashMap<TString, ui32>& colName2Id,
38063806
const TSubDomainInfo& subDomain, TString& errStr);
38073807

ydb/core/tx/schemeshard/schemeshard_validate_ttl.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ static inline NScheme::TTypeInfo GetType(const TTableInfo::TColumn& col) {
1919
}
2020

2121
bool ValidateTtlSettings(const NKikimrSchemeOp::TTTLSettings& ttl,
22-
const THashMap<ui32, TTableInfo::TColumn>& sourceColumns,
23-
const THashMap<ui32, TTableInfo::TColumn>& alterColumns,
22+
const TMap<ui32, TTableInfo::TColumn>& sourceColumns,
23+
const TMap<ui32, TTableInfo::TColumn>& alterColumns,
2424
const THashMap<TString, ui32>& colName2Id,
2525
const TSubDomainInfo& subDomain, TString& errStr)
2626
{
@@ -39,10 +39,10 @@ bool ValidateTtlSettings(const NKikimrSchemeOp::TTTLSettings& ttl,
3939

4040
const TTableInfo::TColumn* column = nullptr;
4141
const ui32 colId = it->second;
42-
if (alterColumns.contains(colId)) {
43-
column = &alterColumns.at(colId);
44-
} else if (sourceColumns.contains(colId)) {
45-
column = &sourceColumns.at(colId);
42+
if (auto x = alterColumns.find(colId); x != alterColumns.end()) {
43+
column = &x->second;
44+
} else if (auto x = sourceColumns.find(colId); x != sourceColumns.end()) {
45+
column = &x->second;
4646
} else {
4747
Y_ABORT_UNLESS("Unknown column");
4848
}

ydb/core/tx/schemeshard/ut_base/ut_base.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include <util/generic/size_literals.h>
99
#include <util/string/cast.h>
10+
#include <util/string/printf.h>
1011

1112
#include <locale>
1213

@@ -11784,4 +11785,32 @@ Y_UNIT_TEST_SUITE(TSchemeShardTest) {
1178411785
});
1178511786
}
1178611787
}
11788+
11789+
Y_UNIT_TEST(PreserveColumnOrder) {
11790+
TTestBasicRuntime runtime;
11791+
TTestEnv env(runtime);
11792+
11793+
static constexpr ui32 columns = 29;
11794+
11795+
TStringBuilder schema;
11796+
for (ui32 i = 1; i <= columns; ++i) {
11797+
schema << "Columns { Name: \"" << Sprintf("col%0*" PRIu32, 2, i) << "\" Type: \"Utf8\" }" << Endl;
11798+
}
11799+
schema << "Name: \"Table\"" << Endl;
11800+
schema << "KeyColumnNames: [\"col01\"]" << Endl;
11801+
11802+
ui64 txId = 100;
11803+
TestCreateTable(runtime, ++txId, "/MyRoot", schema);
11804+
env.TestWaitNotification(runtime, txId);
11805+
11806+
TestDescribeResult(DescribePath(runtime, "/MyRoot/Table"), {
11807+
NLs::PathExist, [&] (const NKikimrScheme::TEvDescribeSchemeResult& record) {
11808+
const auto& table = record.GetPathDescription().GetTable();
11809+
UNIT_ASSERT_VALUES_EQUAL(table.ColumnsSize(), columns);
11810+
for (ui32 i = 1; i <= columns; ++i) {
11811+
UNIT_ASSERT_VALUES_EQUAL(table.GetColumns(i - 1).GetName(), Sprintf("col%0*" PRIu32, 2, i));
11812+
}
11813+
}
11814+
});
11815+
}
1178711816
}

0 commit comments

Comments
 (0)