From 1c1c4f923a5cf4a02ca5487eeea2d53e5d816bcd Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Thu, 26 Mar 2015 14:23:50 +0200 Subject: [PATCH] db: fix collection_type_impl::deserialize_mutation_form() types It accepts a bytes_view instead of the type-safe wrapper. --- cql3/lists.cc | 2 +- database.cc | 2 +- tests/urchin/cql_query_test.cc | 2 +- tests/urchin/mutation_test.cc | 6 +++--- types.cc | 7 ++++--- types.hh | 2 +- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/cql3/lists.cc b/cql3/lists.cc index eb65a26141..c937043e66 100644 --- a/cql3/lists.cc +++ b/cql3/lists.cc @@ -230,7 +230,7 @@ lists::setter_by_index::execute(mutation& m, const exploded_clustering_prefix& p collection_mutation::view existing_list_ser = params.get_prefetched_list(m.key, row_key, column); auto ltype = dynamic_pointer_cast(column.type); - collection_type_impl::mutation_view existing_list = ltype->deserialize_mutation_form(existing_list_ser.data); + collection_type_impl::mutation_view existing_list = ltype->deserialize_mutation_form(existing_list_ser); // we verified that index is an int32_type auto idx = net::ntoh(int32_t(*unaligned_cast(index->begin()))); if (idx < 0 || size_t(idx) >= existing_list.cells.size()) { diff --git a/database.cc b/database.cc index 3057ed4048..6d16f67731 100644 --- a/database.cc +++ b/database.cc @@ -691,7 +691,7 @@ column_family::get_partition_slice(mutation_partition& partition, const query::p auto&& ctype = static_pointer_cast(def.type); // cannot use mutation_view, since we'll modify some of the values // FIXME: work around this somehow - collection_type_impl::mutation m = ctype->deserialize_mutation_form(cell.data).materialize(); + collection_type_impl::mutation m = ctype->deserialize_mutation_form(cell).materialize(); for (auto&& e : m.cells) { auto& value = e.second; if (value.timestamp() < row_tombstone.timestamp) { diff --git a/tests/urchin/cql_query_test.cc b/tests/urchin/cql_query_test.cc index 63419663da..0e1f7def7a 100644 --- a/tests/urchin/cql_query_test.cc +++ b/tests/urchin/cql_query_test.cc @@ -75,7 +75,7 @@ static future<> require_column_has_value(distributed& ddb, const sstri } else { auto cell = i->second.as_collection_mutation(); auto type = dynamic_pointer_cast(col_def->type); - actual = type->to_value(type->deserialize_mutation_form(cell.data), + actual = type->to_value(type->deserialize_mutation_form(cell), serialization_format::internal()); } assert(col_def->type->equal(actual, col_def->type->decompose(expected))); diff --git a/tests/urchin/mutation_test.cc b/tests/urchin/mutation_test.cc index 3bb9d0290e..720db1d367 100644 --- a/tests/urchin/mutation_test.cc +++ b/tests/urchin/mutation_test.cc @@ -126,7 +126,7 @@ BOOST_AUTO_TEST_CASE(test_map_mutations) { auto i = r.find(column.id); BOOST_REQUIRE(i != r.end()); auto cell = i->second.as_collection_mutation(); - auto muts = my_map_type->deserialize_mutation_form(cell.data); + auto muts = my_map_type->deserialize_mutation_form(cell); BOOST_REQUIRE(muts.cells.size() == 3); // FIXME: more strict tests } @@ -159,7 +159,7 @@ BOOST_AUTO_TEST_CASE(test_set_mutations) { auto i = r.find(column.id); BOOST_REQUIRE(i != r.end()); auto cell = i->second.as_collection_mutation(); - auto muts = my_set_type->deserialize_mutation_form(cell.data); + auto muts = my_set_type->deserialize_mutation_form(cell); BOOST_REQUIRE(muts.cells.size() == 3); // FIXME: more strict tests } @@ -193,7 +193,7 @@ BOOST_AUTO_TEST_CASE(test_list_mutations) { auto i = r.find(column.id); BOOST_REQUIRE(i != r.end()); auto cell = i->second.as_collection_mutation(); - auto muts = my_list_type->deserialize_mutation_form(cell.data); + auto muts = my_list_type->deserialize_mutation_form(cell); BOOST_REQUIRE(muts.cells.size() == 4); // FIXME: more strict tests } diff --git a/types.cc b/types.cc index 1f32ad12d3..aaf7fd4c8a 100644 --- a/types.cc +++ b/types.cc @@ -927,7 +927,8 @@ map_type_impl::serialize_partially_deserialized_form( } -auto collection_type_impl::deserialize_mutation_form(bytes_view in) -> mutation_view { +auto collection_type_impl::deserialize_mutation_form(collection_mutation::view cm) -> mutation_view { + auto&& in = cm.data; mutation_view ret; auto has_tomb = read_simple(in); if (has_tomb) { @@ -1000,8 +1001,8 @@ collection_type_impl::serialize_mutation_form(mutation_view mut) { collection_mutation::one collection_type_impl::merge(collection_mutation::view a, collection_mutation::view b) { - auto aa = deserialize_mutation_form(a.data); - auto bb = deserialize_mutation_form(b.data); + auto aa = deserialize_mutation_form(a); + auto bb = deserialize_mutation_form(b); mutation_view merged; merged.cells.reserve(aa.cells.size() + bb.cells.size()); using element_type = std::pair; diff --git a/types.hh b/types.hh index 7b16e51c84..59786193f7 100644 --- a/types.hh +++ b/types.hh @@ -332,7 +332,7 @@ public: virtual shared_ptr as_cql3_type() override; template static bytes pack(BytesViewIterator start, BytesViewIterator finish, int elements, serialization_format sf); - mutation_view deserialize_mutation_form(bytes_view in); + mutation_view deserialize_mutation_form(collection_mutation::view in); virtual bytes to_value(mutation_view mut, serialization_format sf) = 0; // FIXME: use iterators? collection_mutation::one serialize_mutation_form(const mutation& mut);