From b0a31bb7a743b2b032df109ee033a5f03fc248da Mon Sep 17 00:00:00 2001 From: Piotr Dulikowski Date: Wed, 24 Aug 2022 08:32:40 +0200 Subject: [PATCH] column_computation: adjust to use clustering_or_static_row Adjusts the column_computation interface so that it is able to accept both clustering and static rows through the common db::view::clustering_or_static_row interface. --- column_computation.hh | 7 ++++--- db/view/view.cc | 8 +++++++- schema.cc | 5 +++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/column_computation.hh b/column_computation.hh index 70ce8d9f58..68ae807e96 100644 --- a/column_computation.hh +++ b/column_computation.hh @@ -12,11 +12,11 @@ class schema; class partition_key; -class clustering_row; struct atomic_cell_view; struct tombstone; namespace db::view { +struct clustering_or_static_row; struct view_key_and_action; } @@ -118,7 +118,7 @@ class collection_column_computation final : public column_computation { using collection_kv = std::pair; void operate_on_collection_entries( std::invocable auto&& old_and_new_row_func, const schema& schema, - const partition_key& key, const clustering_row& update, const std::optional& existing) const; + const partition_key& key, const db::view::clustering_or_static_row& update, const std::optional& existing) const; public: static collection_column_computation for_keys(const bytes& collection_name) { @@ -141,5 +141,6 @@ public: return true; } - std::vector compute_values_with_action(const schema& schema, const partition_key& key, const clustering_row& row, const std::optional& existing) const; + std::vector compute_values_with_action(const schema& schema, const partition_key& key, + const db::view::clustering_or_static_row& row, const std::optional& existing) const; }; diff --git a/db/view/view.cc b/db/view/view.cc index a52d6e385b..2c16fec27d 100644 --- a/db/view/view.cc +++ b/db/view/view.cc @@ -620,7 +620,13 @@ private: } collection_column_position = column_position - 1; - for (auto& bwa : collection_computation->compute_values_with_action(_base, _base_key, _update, _existing)) { + // TODO: Introduced just for the sake of clear commit history, will be removed in following commits + const auto update = clustering_or_static_row(clustering_row(_base, _update)); + const auto existing = _existing + ? std::make_optional(clustering_row(_base, *_existing)) + : std::nullopt; + + for (auto& bwa : collection_computation->compute_values_with_action(_base, _base_key, update, existing)) { ret.push_back({std::move(bwa), linearized_values}); } return ret; diff --git a/schema.cc b/schema.cc index f1b3e528f2..1d75fc5912 100644 --- a/schema.cc +++ b/schema.cc @@ -1770,7 +1770,7 @@ column_computation_ptr collection_column_computation::for_target_type(std::strin void collection_column_computation::operate_on_collection_entries( std::invocable auto&& old_and_new_row_func, const schema& schema, - const partition_key& key, const clustering_row& update, const std::optional& existing) const { + const partition_key& key, const db::view::clustering_or_static_row& update, const std::optional& existing) const { const column_definition* cdef = schema.get_column_definition(_collection_name); @@ -1840,7 +1840,8 @@ bytes collection_column_computation::compute_value(const schema&, const partitio throw std::runtime_error(fmt::format("{}: not supported", __PRETTY_FUNCTION__)); } -std::vector collection_column_computation::compute_values_with_action(const schema& schema, const partition_key& key, const clustering_row& update, const std::optional& existing) const { +std::vector collection_column_computation::compute_values_with_action(const schema& schema, const partition_key& key, + const db::view::clustering_or_static_row& update, const std::optional& existing) const { using collection_kv = std::pair; auto serialize_cell = [_kind = _kind](const collection_kv& kv) -> bytes { using kind = collection_column_computation::kind;