refactor: use derive_builder for boilerplate builders (#116)

* refactor: remove boilerplate builder code with derive_builder macro

* refactor: better build creation using Default::default()

* refactor: resolve api change issues in benchmark code

* refactor: address some review issues

* refactor: address clippy issues

* chore: doc and todo update

* refactor: add builder for RegionDescriptor
This commit is contained in:
Ning Sun
2022-07-29 14:31:12 +08:00
committed by GitHub
parent 45490b6293
commit 62cb649389
10 changed files with 250 additions and 261 deletions

View File

@@ -17,14 +17,15 @@ impl RegionDescBuilder {
let key_builder = RowKeyDescriptorBuilder::new(
ColumnDescriptorBuilder::new(2, TIMESTAMP_NAME, ConcreteDataType::int64_datatype())
.is_nullable(false)
.build(),
.build()
.unwrap(),
);
Self {
name: name.into(),
last_column_id: 2,
key_builder,
default_cf_builder: ColumnFamilyDescriptorBuilder::new(),
default_cf_builder: ColumnFamilyDescriptorBuilder::default(),
}
}
@@ -38,8 +39,8 @@ impl RegionDescBuilder {
RegionDescriptor {
id: 0,
name: self.name,
row_key: self.key_builder.build(),
default_cf: self.default_cf_builder.build(),
row_key: self.key_builder.build().unwrap(),
default_cf: self.default_cf_builder.build().unwrap(),
extra_cfs: Vec::new(),
}
}
@@ -54,5 +55,6 @@ impl RegionDescBuilder {
ColumnDescriptorBuilder::new(self.alloc_column_id(), column_def.0, datatype)
.is_nullable(column_def.2)
.build()
.unwrap()
}
}

View File

@@ -316,6 +316,7 @@ fn version_column_desc() -> ColumnDescriptor {
)
.is_nullable(false)
.build()
.unwrap()
}
// TODO(yingwen): Add tests for using invalid row_key/cf to build metadata.
@@ -381,20 +382,26 @@ mod tests {
fn new_metadata(enable_version_column: bool) -> RegionMetadata {
let timestamp = ColumnDescriptorBuilder::new(2, "ts", ConcreteDataType::int64_datatype())
.is_nullable(false)
.build();
.build()
.unwrap();
let row_key = RowKeyDescriptorBuilder::new(timestamp)
.push_column(
ColumnDescriptorBuilder::new(3, "k1", ConcreteDataType::int64_datatype())
.is_nullable(false)
.build(),
.build()
.unwrap(),
)
.enable_version_column(enable_version_column)
.build();
let cf = ColumnFamilyDescriptorBuilder::new()
.build()
.unwrap();
let cf = ColumnFamilyDescriptorBuilder::default()
.push_column(
ColumnDescriptorBuilder::new(4, "v1", ConcreteDataType::int64_datatype()).build(),
ColumnDescriptorBuilder::new(4, "v1", ConcreteDataType::int64_datatype())
.build()
.unwrap(),
)
.build();
.build()
.unwrap();
RegionMetadataBuilder::new()
.row_key(row_key)
.unwrap()

View File

@@ -24,7 +24,8 @@ impl RegionDescBuilder {
ConcreteDataType::int64_datatype(),
)
.is_nullable(false)
.build(),
.build()
.unwrap(),
);
Self {
@@ -32,7 +33,7 @@ impl RegionDescBuilder {
name: name.into(),
last_column_id: 2,
key_builder,
default_cf_builder: ColumnFamilyDescriptorBuilder::new(),
default_cf_builder: ColumnFamilyDescriptorBuilder::default(),
}
}
@@ -43,8 +44,17 @@ impl RegionDescBuilder {
// This will reset the row key builder, so should be called before `push_key_column()`
// and `enable_version_column()`, or just call after `new()`.
//
// NOTE(ning): it's now possible to change this function to:
//
// ```
// self.key_builder.timestamp(self.new_column(column_def))
// ```
// to resolve the constraint above
pub fn timestamp(mut self, column_def: ColumnDef) -> Self {
let builder = RowKeyDescriptorBuilder::new(self.new_column(column_def));
self.key_builder = builder;
self
}
@@ -70,8 +80,8 @@ impl RegionDescBuilder {
RegionDescriptor {
id: self.id,
name: self.name,
row_key: self.key_builder.build(),
default_cf: self.default_cf_builder.build(),
row_key: self.key_builder.build().unwrap(),
default_cf: self.default_cf_builder.build().unwrap(),
extra_cfs: Vec::new(),
}
}
@@ -86,5 +96,6 @@ impl RegionDescBuilder {
ColumnDescriptorBuilder::new(self.alloc_column_id(), column_def.0, datatype)
.is_nullable(column_def.2)
.build()
.unwrap()
}
}