Files
scylladb/frozen_mutation.cc

71 lines
1.8 KiB
C++

/*
* Copyright (C) 2015 Cloudius Systems, Ltd.
*/
#include "db/serializer.hh"
#include "frozen_mutation.hh"
#include "partition_builder.hh"
#include "mutation_partition_serializer.hh"
#include "utils/UUID.hh"
#include "utils/data_input.hh"
//
// Representation layout:
//
// <mutation> ::= <column-family-id> <partition-key> <partition>
//
using namespace db;
utils::UUID
frozen_mutation::column_family_id() const {
data_input in(_bytes);
return uuid_serializer::read(in);
}
partition_key_view
frozen_mutation::key(const schema& s) const {
data_input in(_bytes);
uuid_serializer::skip(in);
return partition_key_view_serializer::read(in);
}
static size_t
serialized_size(const mutation& m) {
return uuid_serializer(m.schema()->id()).size()
+ partition_key_view_serializer(m.key()).size()
+ mutation_partition_serializer::size(*m.schema(), m.partition());
}
frozen_mutation::frozen_mutation(bytes&& b)
: _bytes(std::move(b))
{ }
frozen_mutation::frozen_mutation(const mutation& m)
: _bytes(bytes::initialized_later(), serialized_size(m))
{
data_output out(_bytes);
uuid_serializer::write(out, m.schema()->id());
partition_key_view_serializer::write(out, m.key());
mutation_partition_serializer::write(out, *m.schema(), m.partition());
}
mutation
frozen_mutation::unfreeze(schema_ptr schema) const {
mutation m(key(*schema), schema);
partition_builder b(*schema, m.partition());
partition().accept(*schema, b);
return m;
}
frozen_mutation freeze(const mutation& m) {
return { m };
}
mutation_partition_view frozen_mutation::partition() const {
data_input in(_bytes);
uuid_serializer::skip(in);
partition_key_view_serializer::skip(in);
return mutation_partition_view::from_bytes(in.read_view(in.avail()));
}