@@ -291,7 +291,24 @@ class TTableDescription::TImpl {
291
291
if (col.has_not_null ()) {
292
292
not_null = col.not_null ();
293
293
}
294
- Columns_.emplace_back (col.name (), col.type (), col.family (), not_null);
294
+ std::optional<TSequenceDescription> sequenceDescription;
295
+ switch (col.default_value_case ()) {
296
+ case Ydb::Table::ColumnMeta::kFromSequence : {
297
+ if (col.from_sequence ().name () == " _serial_column_" + col.name ()) {
298
+ TSequenceDescription currentSequenceDescription;
299
+ if (col.from_sequence ().has_set_val ()) {
300
+ TSequenceDescription::TSetVal setVal;
301
+ setVal.NextUsed = col.from_sequence ().set_val ().next_used ();
302
+ setVal.NextValue = col.from_sequence ().set_val ().next_value ();
303
+ currentSequenceDescription.SetVal = std::move (setVal);
304
+ }
305
+ sequenceDescription = std::move (currentSequenceDescription);
306
+ }
307
+ break ;
308
+ }
309
+ default : break ;
310
+ }
311
+ Columns_.emplace_back (col.name (), col.type (), col.family (), not_null, std::move (sequenceDescription));
295
312
}
296
313
297
314
// indexes
@@ -453,8 +470,8 @@ class TTableDescription::TImpl {
453
470
return Proto_;
454
471
}
455
472
456
- void AddColumn (const std::string& name, const Ydb::Type& type, const std::string& family, std::optional<bool > notNull) {
457
- Columns_.emplace_back (name, type, family, notNull);
473
+ void AddColumn (const std::string& name, const Ydb::Type& type, const std::string& family, std::optional<bool > notNull, std::optional<TSequenceDescription> sequenceDescription ) {
474
+ Columns_.emplace_back (name, type, family, notNull, std::move (sequenceDescription) );
458
475
}
459
476
460
477
void SetPrimaryKeyColumns (const std::vector<std::string>& primaryKeyColumns) {
@@ -738,8 +755,8 @@ const std::vector<TKeyRange>& TTableDescription::GetKeyRanges() const {
738
755
return Impl_->GetKeyRanges ();
739
756
}
740
757
741
- void TTableDescription::AddColumn (const std::string& name, const Ydb::Type& type, const std::string& family, std::optional<bool > notNull) {
742
- Impl_->AddColumn (name, type, family, notNull);
758
+ void TTableDescription::AddColumn (const std::string& name, const Ydb::Type& type, const std::string& family, std::optional<bool > notNull, std::optional<TSequenceDescription> sequenceDescription ) {
759
+ Impl_->AddColumn (name, type, family, notNull, std::move (sequenceDescription) );
743
760
}
744
761
745
762
void TTableDescription::SetPrimaryKeyColumns (const std::vector<std::string>& primaryKeyColumns) {
@@ -915,6 +932,15 @@ void TTableDescription::SerializeTo(Ydb::Table::CreateTableRequest& request) con
915
932
if (column.NotNull .has_value ()) {
916
933
protoColumn.set_not_null (column.NotNull .value ());
917
934
}
935
+ if (column.SequenceDescription .has_value ()) {
936
+ auto * fromSequence = protoColumn.mutable_from_sequence ();
937
+ if (column.SequenceDescription ->SetVal .has_value ()) {
938
+ auto * setVal = fromSequence->mutable_set_val ();
939
+ setVal->set_next_value (column.SequenceDescription ->SetVal ->NextValue );
940
+ setVal->set_next_used (column.SequenceDescription ->SetVal ->NextUsed );
941
+ }
942
+ fromSequence->set_name (" _serial_column_" + column.Name );
943
+ }
918
944
}
919
945
920
946
for (const auto & pk : Impl_->GetPrimaryKeyColumns ()) {
@@ -1122,7 +1148,7 @@ TTableBuilder& TTableBuilder::AddNullableColumn(const std::string& name, const E
1122
1148
.EndOptional ()
1123
1149
.Build ();
1124
1150
1125
- TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, false );
1151
+ TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, false , std::nullopt );
1126
1152
return *this ;
1127
1153
}
1128
1154
@@ -1132,7 +1158,7 @@ TTableBuilder& TTableBuilder::AddNullableColumn(const std::string& name, const T
1132
1158
.Decimal (type)
1133
1159
.EndOptional ()
1134
1160
.Build ();
1135
- TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, false );
1161
+ TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, false , std::nullopt );
1136
1162
return *this ;
1137
1163
}
1138
1164
@@ -1141,7 +1167,7 @@ TTableBuilder& TTableBuilder::AddNullableColumn(const std::string& name, const T
1141
1167
.Pg (type)
1142
1168
.Build ();
1143
1169
1144
- TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, false );
1170
+ TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, false , std::nullopt );
1145
1171
return *this ;
1146
1172
}
1147
1173
@@ -1150,7 +1176,7 @@ TTableBuilder& TTableBuilder::AddNonNullableColumn(const std::string& name, cons
1150
1176
.Primitive (type)
1151
1177
.Build ();
1152
1178
1153
- TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, true );
1179
+ TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, true , std::nullopt );
1154
1180
return *this ;
1155
1181
}
1156
1182
@@ -1159,7 +1185,7 @@ TTableBuilder& TTableBuilder::AddNonNullableColumn(const std::string& name, cons
1159
1185
.Decimal (type)
1160
1186
.Build ();
1161
1187
1162
- TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, true );
1188
+ TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, true , std::nullopt );
1163
1189
return *this ;
1164
1190
}
1165
1191
@@ -1168,7 +1194,16 @@ TTableBuilder& TTableBuilder::AddNonNullableColumn(const std::string& name, cons
1168
1194
.Pg (type)
1169
1195
.Build ();
1170
1196
1171
- TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, true );
1197
+ TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, true , std::nullopt);
1198
+ return *this ;
1199
+ }
1200
+
1201
+ TTableBuilder& TTableBuilder::AddSerialColumn (const std::string& name, const EPrimitiveType& type, TSequenceDescription sequenceDescription, const std::string& family) {
1202
+ auto columnType = TTypeBuilder ()
1203
+ .Primitive (type)
1204
+ .Build ();
1205
+
1206
+ TableDescription_.AddColumn (name, TProtoAccessor::GetProto (columnType), family, true , std::move (sequenceDescription));
1172
1207
return *this ;
1173
1208
}
1174
1209
0 commit comments