partition_slice_builder: add range mutating methods

This commit is contained in:
Botond Dénes
2021-09-09 14:08:04 +03:00
parent a2eb0f7d7e
commit 4fc39721a2
2 changed files with 24 additions and 1 deletions

View File

@@ -29,6 +29,7 @@ partition_slice_builder::partition_slice_builder(const schema& schema, query::pa
: _regular_columns(std::move(slice.regular_columns))
, _static_columns(std::move(slice.static_columns))
, _row_ranges(std::move(slice._row_ranges))
, _specific_ranges(std::move(slice._specific_ranges))
, _schema(schema)
, _options(std::move(slice.options))
{
@@ -72,7 +73,8 @@ partition_slice_builder::build() {
std::move(ranges),
std::move(static_columns),
std::move(regular_columns),
std::move(_options)
std::move(_options),
std::move(_specific_ranges)
};
}
@@ -97,6 +99,22 @@ partition_slice_builder::with_ranges(std::vector<query::clustering_range> ranges
return *this;
}
partition_slice_builder&
partition_slice_builder::mutate_ranges(std::function<void(std::vector<query::clustering_range>&)> func) {
if (_row_ranges) {
func(*_row_ranges);
}
return *this;
}
partition_slice_builder&
partition_slice_builder::mutate_specific_ranges(std::function<void(query::specific_ranges&)> func) {
if (_specific_ranges) {
func(*_specific_ranges);
}
return *this;
}
partition_slice_builder&
partition_slice_builder::with_no_regular_columns() {
_regular_columns = query::column_id_vector();

View File

@@ -40,6 +40,7 @@ class partition_slice_builder {
std::optional<query::column_id_vector> _regular_columns;
std::optional<query::column_id_vector> _static_columns;
std::optional<std::vector<query::clustering_range>> _row_ranges;
std::unique_ptr<query::specific_ranges> _specific_ranges;
const schema& _schema;
query::partition_slice::option_set _options;
public:
@@ -52,6 +53,10 @@ public:
partition_slice_builder& with_no_regular_columns();
partition_slice_builder& with_range(query::clustering_range range);
partition_slice_builder& with_ranges(std::vector<query::clustering_range>);
// noop if no ranges have been set yet
partition_slice_builder& mutate_ranges(std::function<void(std::vector<query::clustering_range>&)>);
// noop if no specific ranges have been set yet
partition_slice_builder& mutate_specific_ranges(std::function<void(query::specific_ranges&)>);
partition_slice_builder& without_partition_key_columns();
partition_slice_builder& without_clustering_key_columns();
partition_slice_builder& reversed();