From 013fa3da14fd2ed1e60c8f3f4a793349f9728db6 Mon Sep 17 00:00:00 2001 From: Duarte Nunes Date: Wed, 19 Jul 2017 12:51:31 +0200 Subject: [PATCH] schema: Calculate default validator Fixes #2605 Signed-off-by: Duarte Nunes Message-Id: <20170719105131.21455-3-duarte@scylladb.com> --- schema.cc | 10 ++++++++++ schema_builder.hh | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/schema.cc b/schema.cc index 498a9d1b16..8c736b8236 100644 --- a/schema.cc +++ b/schema.cc @@ -751,6 +751,16 @@ schema_ptr schema_builder::build() { } prepare_dense_schema(new_raw); + + if (_default_validator) { + new_raw._default_validator = *_default_validator; + } else if (new_raw._is_dense || !new_raw._is_compound) { + auto regular_column = std::find_if(new_raw._columns.begin(), new_raw._columns.end(), [] (auto&& col) { + return col.kind == column_kind::regular_column; + }); + new_raw._default_validator = regular_column->type; + } + return make_lw_shared(schema(new_raw)); } diff --git a/schema_builder.hh b/schema_builder.hh index b87455c195..d9d79e8196 100644 --- a/schema_builder.hh +++ b/schema_builder.hh @@ -31,6 +31,7 @@ private: schema::raw_schema _raw; std::experimental::optional _compact_storage; std::experimental::optional _version; + std::experimental::optional _default_validator; schema_builder(const schema::raw_schema&); public: schema_builder(const sstring& ks_name, const sstring& cf_name, @@ -74,7 +75,7 @@ public: } schema_builder& set_default_validator(const data_type& validator) { - _raw._default_validator = validator; + _default_validator = {validator}; return *this; }