Skip to content

Commit 25ef694

Browse files
committed
Moved commit "Support ydb dump for tables with serial types" from ydb repo
1 parent 0e04d7c commit 25ef694

File tree

4 files changed

+70
-13
lines changed

4 files changed

+70
-13
lines changed

include/ydb-cpp-sdk/client/table/table.h

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,19 +98,33 @@ class TKeyRange {
9898
std::optional<TKeyBound> To_;
9999
};
100100

101+
struct TSequenceDescription {
102+
struct TSetVal {
103+
int64_t NextValue;
104+
bool NextUsed;
105+
};
106+
std::optional<TSetVal> SetVal;
107+
};
108+
101109
struct TTableColumn {
102110
std::string Name;
103111
TType Type;
104112
std::string Family;
105113
std::optional<bool> NotNull;
114+
std::optional<TSequenceDescription> SequenceDescription;
106115

107116
TTableColumn() = default;
108117

109-
TTableColumn(std::string name, TType type, std::string family = std::string(), std::optional<bool> notNull = std::nullopt)
118+
TTableColumn(std::string name,
119+
TType type,
120+
std::string family = std::string(),
121+
std::optional<bool> notNull = std::nullopt,
122+
std::optional<TSequenceDescription> sequenceDescription = std::nullopt)
110123
: Name(std::move(name))
111124
, Type(std::move(type))
112125
, Family(std::move(family))
113126
, NotNull(std::move(notNull))
127+
, SequenceDescription(std::move(sequenceDescription))
114128
{ }
115129

116130
// Conversion from TColumn for API compatibility
@@ -634,7 +648,7 @@ class TTableDescription {
634648
TTableDescription();
635649
explicit TTableDescription(const Ydb::Table::CreateTableRequest& request);
636650

637-
void AddColumn(const std::string& name, const Ydb::Type& type, const std::string& family, std::optional<bool> notNull);
651+
void AddColumn(const std::string& name, const Ydb::Type& type, const std::string& family, std::optional<bool> notNull, std::optional<TSequenceDescription> sequenceDescription);
638652
void SetPrimaryKeyColumns(const std::vector<std::string>& primaryKeyColumns);
639653

640654
// common
@@ -852,6 +866,7 @@ class TTableBuilder {
852866
TTableBuilder& AddNonNullableColumn(const std::string& name, const TPgType& type, const std::string& family = std::string());
853867
TTableBuilder& SetPrimaryKeyColumns(const std::vector<std::string>& primaryKeyColumns);
854868
TTableBuilder& SetPrimaryKeyColumn(const std::string& primaryKeyColumn);
869+
TTableBuilder& AddSerialColumn(const std::string& name, const EPrimitiveType& type, TSequenceDescription sequenceDescription, const std::string& family = std::string());
855870

856871
// common
857872
TTableBuilder& AddSecondaryIndex(const TIndexDescription& indexDescription);
@@ -1627,6 +1642,7 @@ struct TDescribeTableSettings : public TOperationRequestSettings<TDescribeTableS
16271642
FLUENT_SETTING_DEFAULT(bool, WithKeyShardBoundary, false);
16281643
FLUENT_SETTING_DEFAULT(bool, WithTableStatistics, false);
16291644
FLUENT_SETTING_DEFAULT(bool, WithPartitionStatistics, false);
1645+
FLUENT_SETTING_DEFAULT(bool, WithSetVal, false);
16301646
};
16311647

16321648
struct TExplainDataQuerySettings : public TOperationRequestSettings<TExplainDataQuerySettings> {

src/api/protos/ydb_table.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,8 @@ message DescribeTableRequest {
779779
bool include_table_stats = 6;
780780
// Includes partition statistics (required include_table_statistics)
781781
bool include_partition_stats = 7;
782+
// Includes set_val settings for sequences
783+
bool include_set_val = 8;
782784
}
783785

784786
message DescribeTableResponse {

src/client/table/impl/table_client.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,10 @@ TAsyncDescribeTableResult TTableClient::TImpl::DescribeTable(const std::string&
525525
request.set_include_partition_stats(true);
526526
}
527527

528+
if (settings.WithSetVal_) {
529+
request.set_include_set_val(true);
530+
}
531+
528532
auto promise = NewPromise<TDescribeTableResult>();
529533

530534
auto extractor = [promise, settings]

src/client/table/table.cpp

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,24 @@ class TTableDescription::TImpl {
291291
if (col.has_not_null()) {
292292
not_null = col.not_null();
293293
}
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));
295312
}
296313

297314
// indexes
@@ -453,8 +470,8 @@ class TTableDescription::TImpl {
453470
return Proto_;
454471
}
455472

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));
458475
}
459476

460477
void SetPrimaryKeyColumns(const std::vector<std::string>& primaryKeyColumns) {
@@ -738,8 +755,8 @@ const std::vector<TKeyRange>& TTableDescription::GetKeyRanges() const {
738755
return Impl_->GetKeyRanges();
739756
}
740757

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));
743760
}
744761

745762
void TTableDescription::SetPrimaryKeyColumns(const std::vector<std::string>& primaryKeyColumns) {
@@ -915,6 +932,15 @@ void TTableDescription::SerializeTo(Ydb::Table::CreateTableRequest& request) con
915932
if (column.NotNull.has_value()) {
916933
protoColumn.set_not_null(column.NotNull.value());
917934
}
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+
}
918944
}
919945

920946
for (const auto& pk : Impl_->GetPrimaryKeyColumns()) {
@@ -1122,7 +1148,7 @@ TTableBuilder& TTableBuilder::AddNullableColumn(const std::string& name, const E
11221148
.EndOptional()
11231149
.Build();
11241150

1125-
TableDescription_.AddColumn(name, TProtoAccessor::GetProto(columnType), family, false);
1151+
TableDescription_.AddColumn(name, TProtoAccessor::GetProto(columnType), family, false, std::nullopt);
11261152
return *this;
11271153
}
11281154

@@ -1132,7 +1158,7 @@ TTableBuilder& TTableBuilder::AddNullableColumn(const std::string& name, const T
11321158
.Decimal(type)
11331159
.EndOptional()
11341160
.Build();
1135-
TableDescription_.AddColumn(name, TProtoAccessor::GetProto(columnType), family, false);
1161+
TableDescription_.AddColumn(name, TProtoAccessor::GetProto(columnType), family, false, std::nullopt);
11361162
return *this;
11371163
}
11381164

@@ -1141,7 +1167,7 @@ TTableBuilder& TTableBuilder::AddNullableColumn(const std::string& name, const T
11411167
.Pg(type)
11421168
.Build();
11431169

1144-
TableDescription_.AddColumn(name, TProtoAccessor::GetProto(columnType), family, false);
1170+
TableDescription_.AddColumn(name, TProtoAccessor::GetProto(columnType), family, false, std::nullopt);
11451171
return *this;
11461172
}
11471173

@@ -1150,7 +1176,7 @@ TTableBuilder& TTableBuilder::AddNonNullableColumn(const std::string& name, cons
11501176
.Primitive(type)
11511177
.Build();
11521178

1153-
TableDescription_.AddColumn(name, TProtoAccessor::GetProto(columnType), family, true);
1179+
TableDescription_.AddColumn(name, TProtoAccessor::GetProto(columnType), family, true, std::nullopt);
11541180
return *this;
11551181
}
11561182

@@ -1159,7 +1185,7 @@ TTableBuilder& TTableBuilder::AddNonNullableColumn(const std::string& name, cons
11591185
.Decimal(type)
11601186
.Build();
11611187

1162-
TableDescription_.AddColumn(name, TProtoAccessor::GetProto(columnType), family, true);
1188+
TableDescription_.AddColumn(name, TProtoAccessor::GetProto(columnType), family, true, std::nullopt);
11631189
return *this;
11641190
}
11651191

@@ -1168,7 +1194,16 @@ TTableBuilder& TTableBuilder::AddNonNullableColumn(const std::string& name, cons
11681194
.Pg(type)
11691195
.Build();
11701196

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));
11721207
return *this;
11731208
}
11741209

0 commit comments

Comments
 (0)