Files
scylladb/idl/mutation.idl.hh
Avi Kivity c5e4bf51bd Introduce mutation/ module
Move mutation-related files to a new mutation/ directory. The names
are kept in the global namespace to reduce churn; the names are
unambiguous in any case.

mutation_reader remains in the readers/ module.

mutation_partition_v2.cc was missing from CMakeLists.txt; it's added in this
patch.

This is a step forward towards librarization or modularization of the
source base.

Closes #12788
2023-02-14 11:19:03 +02:00

171 lines
3.7 KiB
C++

/*
* Copyright 2016-present ScyllaDB
*/
/*
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#include "counters.hh"
#include "mutation/mutation.hh"
#include "idl/uuid.idl.hh"
#include "idl/keys.idl.hh"
class counter_id final {
utils::UUID uuid();
};
class counter_shard final {
counter_id id();
int64_t value();
int64_t logical_clock();
};
class counter_cell_full final stub [[writable]] {
std::vector<counter_shard> shards;
};
class counter_cell_update final stub [[writable]] {
int64_t delta;
};
class counter_cell stub [[writable]] {
api::timestamp_type created_at;
boost::variant<counter_cell_full, counter_cell_update> value;
};
class tombstone [[writable]] {
api::timestamp_type timestamp;
gc_clock::time_point deletion_time;
};
class live_cell stub [[writable]] {
api::timestamp_type created_at;
bytes value;
};
class expiring_cell stub [[writable]] {
gc_clock::duration ttl;
gc_clock::time_point expiry;
live_cell c;
};
class dead_cell final stub [[writable]] {
tombstone tomb;
};
class collection_element stub [[writable]] {
// key's format depends on its CQL type as defined in the schema and is specified in CQL binary protocol.
bytes key;
boost::variant<live_cell, expiring_cell, dead_cell> value;
};
class collection_cell stub [[writable]] {
tombstone tomb;
std::vector<collection_element> elements; // sorted by key
};
class column stub [[writable]] {
uint32_t id;
boost::variant<boost::variant<live_cell, expiring_cell, dead_cell, counter_cell>, collection_cell> c;
};
class row stub [[writable]] {
std::vector<column> columns; // sorted by id
};
class no_marker final stub [[writable]] {};
class live_marker stub [[writable]] {
api::timestamp_type created_at;
};
class expiring_marker stub [[writable]] {
live_marker lm;
gc_clock::duration ttl;
gc_clock::time_point expiry;
};
class dead_marker final stub [[writable]] {
tombstone tomb;
};
class deletable_row stub [[writable]] {
clustering_key key;
boost::variant<live_marker, expiring_marker, dead_marker, no_marker> marker;
tombstone deleted_at;
row cells;
tombstone shadowable_deleted_at [[version 1.8]] = deleted_at;
};
enum class bound_kind : uint8_t {
excl_end,
incl_start,
incl_end,
excl_start,
};
class range_tombstone [[writable]] {
clustering_key_prefix start;
tombstone tomb;
bound_kind start_kind [[version 1.3]] = bound_kind::incl_start;
clustering_key_prefix end [[version 1.3]] = start;
bound_kind end_kind [[version 1.3]] = bound_kind::incl_end;
};
class mutation_partition stub [[writable]] {
tombstone tomb;
row static_row;
std::vector<range_tombstone> range_tombstones; // sorted by key
utils::chunked_vector<deletable_row> rows; // sorted by key
};
class mutation stub [[writable]] {
::table_id table_id;
table_schema_version schema_version;
partition_key key;
mutation_partition partition;
};
class column_mapping_entry {
bytes name();
sstring type_name();
};
class column_mapping {
std::vector<column_mapping_entry> columns();
uint32_t n_static();
};
class canonical_mutation stub [[writable]] {
::table_id table_id;
table_schema_version schema_version;
partition_key key;
column_mapping mapping;
mutation_partition partition;
}
class clustering_row stub [[writable]] {
deletable_row row;
};
class static_row stub [[writable]] {
row cells;
};
class partition_start stub [[writable]] {
partition_key key;
tombstone partition_tombstone;
};
class partition_end {
};
class mutation_fragment stub [[writable]] {
std::variant<clustering_row, static_row, range_tombstone,
partition_start, partition_end> fragment;
};