Skip to content

Commit eda772d

Browse files
committed
Preserve column order (#18664)
1 parent 029dcd0 commit eda772d

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
@@ -393,7 +393,7 @@ struct TTableInfo : public TSimpleRefCount<TTableInfo> {
393393

394394
ui32 NextColumnId = 1;
395395
ui64 AlterVersion = 0;
396-
THashMap<ui32, TColumn> Columns;
396+
TMap<ui32, TColumn> Columns;
397397
TVector<ui32> KeyColumnIds;
398398
bool IsBackup = false;
399399
bool IsRestore = false;
@@ -437,7 +437,7 @@ struct TTableInfo : public TSimpleRefCount<TTableInfo> {
437437
ui32 NextColumnId = 1; // Next unallocated column id
438438
ui64 AlterVersion = 0;
439439
ui64 PartitioningVersion = 0;
440-
THashMap<ui32, TColumn> Columns;
440+
TMap<ui32, TColumn> Columns;
441441
TVector<ui32> KeyColumnIds;
442442
bool IsBackup = false;
443443
bool IsRestore = false;
@@ -3796,8 +3796,8 @@ struct TBackupCollectionInfo : TSimpleRefCount<TBackupCollectionInfo> {
37963796
};
37973797

37983798
bool ValidateTtlSettings(const NKikimrSchemeOp::TTTLSettings& ttl,
3799-
const THashMap<ui32, TTableInfo::TColumn>& sourceColumns,
3800-
const THashMap<ui32, TTableInfo::TColumn>& alterColumns,
3799+
const TMap<ui32, TTableInfo::TColumn>& sourceColumns,
3800+
const TMap<ui32, TTableInfo::TColumn>& alterColumns,
38013801
const THashMap<TString, ui32>& colName2Id,
38023802
const TSubDomainInfo& subDomain, TString& errStr);
38033803

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)