Skip to content

Commit dbe09f9

Browse files
authored
Decimal migration fix (#9606)
1 parent ea42b54 commit dbe09f9

File tree

4 files changed

+26
-3
lines changed

4 files changed

+26
-3
lines changed

ydb/core/scheme/scheme_types_proto.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,12 @@ TTypeInfoMod TypeInfoModFromProtoColumnType(ui32 typeId, const NKikimrProto::TTy
5555
}
5656
}
5757

58+
NKikimrProto::TTypeInfo DefaultDecimalProto() {
59+
NKikimrProto::TTypeInfo typeInfoProto;
60+
typeInfoProto.SetDecimalPrecision(NScheme::DECIMAL_PRECISION);
61+
typeInfoProto.SetDecimalScale(NScheme::DECIMAL_SCALE);
62+
return typeInfoProto;
63+
}
64+
65+
5866
} // namespace NKikimr::NScheme

ydb/core/scheme/scheme_types_proto.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ struct TTypeInfoMod {
1919

2020
TTypeInfoMod TypeInfoModFromProtoColumnType(ui32 typeId, const NKikimrProto::TTypeInfo* typeInfo);
2121

22+
NKikimrProto::TTypeInfo DefaultDecimalProto();
23+
2224
} // namespace NKikimr::NScheme

ydb/core/tablet_flat/flat_dbase_apply.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,12 @@ bool TSchemeModifier::Apply(const TAlterRecord &delta)
5252
}
5353

5454
std::optional<NKikimrProto::TTypeInfo> typeInfoProto;
55-
if (delta.HasColumnTypeInfo())
55+
if (delta.HasColumnTypeInfo()) {
5656
typeInfoProto = delta.GetColumnTypeInfo();
57+
} else if (delta.GetColumnType() == NScheme::NTypeIds::Decimal) {
58+
// Migration from table with no decimal typeInfo
59+
typeInfoProto = NKikimr::NScheme::DefaultDecimalProto();
60+
}
5761
changes |= AddColumnWithTypeInfo(table, delta.GetColumnName(), delta.GetColumnId(),
5862
delta.GetColumnType(), typeInfoProto, delta.GetNotNull(), null);
5963
} else if (action == TAlterRecord::DropColumn) {

ydb/core/tx/datashard/datashard_user_table.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,17 @@ void TUserTable::ParseProto(const NKikimrSchemeOp::TTableDescription& descr)
266266
for (const auto& col : descr.GetColumns()) {
267267
TUserColumn& column = Columns[col.GetId()];
268268
if (column.Name.empty()) {
269-
auto typeInfoMod = NScheme::TypeInfoModFromProtoColumnType(col.GetTypeId(),
270-
col.HasTypeInfo() ? &col.GetTypeInfo() : nullptr);
269+
std::optional<NKikimrProto::TTypeInfo> typeInfo;
270+
if (col.HasTypeInfo()) {
271+
typeInfo = col.GetTypeInfo();
272+
} else if (col.GetTypeId() == NScheme::NTypeIds::Decimal) {
273+
// Migration from table with no decimal typeInfo
274+
typeInfo = NKikimr::NScheme::DefaultDecimalProto();
275+
} else {
276+
typeInfo = {};
277+
}
278+
279+
auto typeInfoMod = NScheme::TypeInfoModFromProtoColumnType(col.GetTypeId(), typeInfo ? &*typeInfo : nullptr);
271280
column = TUserColumn(typeInfoMod.TypeInfo, typeInfoMod.TypeMod, col.GetName());
272281
}
273282
column.Family = col.GetFamily();

0 commit comments

Comments
 (0)