diff --git a/db/view/view.cc b/db/view/view.cc index 1c8a1d6bc5..929c374b69 100644 --- a/db/view/view.cc +++ b/db/view/view.cc @@ -72,6 +72,7 @@ static inline void inject_failure(std::string_view operation) { view_info::view_info(const schema& schema, const raw_view_info& raw_view_info) : _schema(schema) , _raw(raw_view_info) + , _has_computed_column_depending_on_base_non_primary_key(false) { } cql3::statements::select_statement& view_info::select_statement() const { @@ -167,6 +168,9 @@ db::view::base_info_ptr view_info::make_base_dependent_view_info(const schema& b for (auto&& view_col : boost::range::join(_schema.partition_key_columns(), _schema.clustering_key_columns())) { if (view_col.is_computed()) { // we are not going to find it in the base table... + if (view_col.get_computation().depends_on_non_primary_key_column()) { + _has_computed_column_depending_on_base_non_primary_key = true; + } continue; } const bytes& view_col_name = view_col.name(); diff --git a/view_info.hh b/view_info.hh index 45d1817cb4..63ca03918a 100644 --- a/view_info.hh +++ b/view_info.hh @@ -24,6 +24,7 @@ class view_info final { mutable shared_ptr _select_statement; mutable std::optional _partition_slice; db::view::base_info_ptr _base_info; + mutable bool _has_computed_column_depending_on_base_non_primary_key; public: view_info(const schema& schema, const raw_view_info& raw_view_info); @@ -52,6 +53,9 @@ public: const column_definition* view_column(const schema& base, column_id base_id) const; const column_definition* view_column(const column_definition& base_def) const; bool has_base_non_pk_columns_in_view_pk() const; + bool has_computed_column_depending_on_base_non_primary_key() const { + return _has_computed_column_depending_on_base_non_primary_key; + } /// Returns a pointer to the base_dependent_view_info which matches the current /// schema of the base table.