diff --git a/cql3/statements/update_statement.cc b/cql3/statements/update_statement.cc index 1646f42dc3..24e8ae75e1 100644 --- a/cql3/statements/update_statement.cc +++ b/cql3/statements/update_statement.cc @@ -181,6 +181,19 @@ modification_statement::json_cache_opt insert_prepared_json_statement::maybe_pre void insert_prepared_json_statement::execute_set_value(mutation& m, const clustering_key_prefix& prefix, const update_parameters& params, const column_definition& column, const bytes_opt& value) { if (!value) { + if (column.type->is_collection()) { + auto& k = static_pointer_cast(column.type)->_kind; + if (&k == &collection_type_impl::kind::list) { + lists::setter::execute(m, prefix, params, column, make_shared(lists::value(std::vector()))); + } else if (&k == &collection_type_impl::kind::set) { + sets::setter::execute(m, prefix, params, column, make_shared(sets::value(std::set(serialized_compare(empty_type))))); + } else if (&k == &collection_type_impl::kind::map) { + maps::setter::execute(m, prefix, params, column, make_shared(maps::value(std::map(serialized_compare(empty_type))))); + } else { + throw exceptions::invalid_request_exception("Incorrect value kind in JSON INSERT statement"); + } + return; + } m.set_cell(prefix, column, std::move(operation::make_dead_cell(params))); return; } else if (!column.type->is_collection()) {