SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Schema.h
Go to the documentation of this file.
1 /*
2  * SWC-DB© Copyright since 2019 Alex Kashirin <kashirin.alex@gmail.com>
3  * License details at <https://github.com/kashirin-alex/swc-db/#license>
4  */
5 
6 
7 #ifndef swcdb_db_Columns_Schema_h
8 #define swcdb_db_Columns_Schema_h
9 
10 
11 #include "swcdb/db/Types/Encoder.h"
13 #include "swcdb/db/Types/KeySeq.h"
14 #include "swcdb/db/Types/Column.h"
17 
18 
19 namespace SWC { namespace DB {
20 
21 
22 
24 
25  static constexpr const cid_t NO_CID = 0;
26 
28  SchemaPrimitives() noexcept
29  : cid(NO_CID),
30  revision(0),
31  cell_versions(1),
32  cell_ttl(0),
33  blk_size(0),
34  blk_cells(0),
35  cs_size(0),
36  col_seq(Types::KeySeq::LEXIC),
37  col_type(Types::Column::PLAIN),
38  blk_encoding(Types::Encoder::DEFAULT),
39  cs_replication(0),
40  cs_max(0),
44  compact_percent(0) {
45  }
46 
48  SchemaPrimitives(const SchemaPrimitives& other) noexcept
49  : cid(other.cid),
50  revision(other.revision),
51  cell_versions(other.cell_versions),
52  cell_ttl(other.cell_ttl),
53  blk_size(other.blk_size),
54  blk_cells(other.blk_cells),
55  cs_size(other.cs_size),
56  col_seq(other.col_seq),
57  col_type(other.col_type),
58  blk_encoding(other.blk_encoding),
59  cs_replication(other.cs_replication),
60  cs_max(other.cs_max),
61  log_rollout_ratio(other.log_rollout_ratio),
62  log_compact_cointervaling(other.log_compact_cointervaling),
63  log_fragment_preload(other.log_fragment_preload),
64  compact_percent(other.compact_percent) {
65  }
66 
68  SchemaPrimitives(const uint8_t** bufp, size_t* remainp)
69  : cid(Serialization::decode_vi64(bufp, remainp)),
70  revision(Serialization::decode_vi64(bufp, remainp)),
71  cell_versions(Serialization::decode_vi32(bufp, remainp)),
72  cell_ttl(Serialization::decode_vi32(bufp, remainp)),
73  blk_size(Serialization::decode_vi32(bufp, remainp)),
74  blk_cells(Serialization::decode_vi32(bufp, remainp)),
75  cs_size(Serialization::decode_vi32(bufp, remainp)),
76  col_seq(Types::KeySeq(Serialization::decode_i8(bufp, remainp))),
77  col_type(Types::Column(Serialization::decode_i8(bufp, remainp))),
78  blk_encoding(Types::Encoder(Serialization::decode_i8(bufp, remainp))),
79  cs_replication(Serialization::decode_i8(bufp, remainp)),
80  cs_max(Serialization::decode_i8(bufp, remainp)),
81  log_rollout_ratio(Serialization::decode_i8(bufp, remainp)),
82  log_compact_cointervaling(Serialization::decode_i8(bufp, remainp)),
83  log_fragment_preload(Serialization::decode_i8(bufp, remainp)),
84  compact_percent(Serialization::decode_i8(bufp, remainp)) {
85  }
86 
88  uint32_t encoded_length() const noexcept {
96  + 9;
97  }
98 
100  void encode(uint8_t** bufp) const {
108  Serialization::encode_i8(bufp, uint8_t(col_seq));
109  Serialization::encode_i8(bufp, uint8_t(col_type));
110  Serialization::encode_i8(bufp, uint8_t(blk_encoding));
117  }
118 
120  void decode(const uint8_t** bufp, size_t* remainp) {
121  cid = Serialization::decode_vi64(bufp, remainp);
122  revision = Serialization::decode_vi64(bufp, remainp);
123  cell_versions = Serialization::decode_vi32(bufp, remainp);
124  cell_ttl = Serialization::decode_vi32(bufp, remainp);
125  blk_size = Serialization::decode_vi32(bufp, remainp);
126  blk_cells = Serialization::decode_vi32(bufp, remainp);
127  cs_size = Serialization::decode_vi32(bufp, remainp);
131  cs_replication = Serialization::decode_i8(bufp, remainp);
132  cs_max = Serialization::decode_i8(bufp, remainp);
136  compact_percent = Serialization::decode_i8(bufp, remainp);
137  }
138 
140  bool equal(const SchemaPrimitives& other,
141  bool with_rev=true) const noexcept {
142  return cid == other.cid &&
143  (!with_rev || revision == other.revision) &&
144  cell_versions == other.cell_versions &&
145  cell_ttl == other.cell_ttl &&
146  blk_size == other.blk_size &&
147  blk_cells == other.blk_cells &&
148  cs_size == other.cs_size &&
149  col_seq == other.col_seq &&
150  col_type == other.col_type &&
151  blk_encoding == other.blk_encoding &&
152  cs_replication == other.cs_replication &&
153  cs_max == other.cs_max &&
158  ;
159  }
160 
162  int64_t revision;
163  uint32_t cell_versions;
164  uint32_t cell_ttl;
165  uint32_t blk_size;
166  uint32_t blk_cells;
167  uint32_t cs_size;
171  uint8_t cs_replication;
172  uint8_t cs_max;
177 
178 };
179 
180 
181 
182 class Schema final : public SchemaPrimitives {
183  public:
184 
185  typedef std::shared_ptr<Schema> Ptr;
187 
189  static Ptr make() {
190  return Ptr(new Schema());
191  }
192 
194  static Ptr make(const Ptr& other) {
195  return Ptr(new Schema(*other.get()));
196  }
197 
199  static Ptr make(const uint8_t** bufp, size_t* remainp) {
200  return Ptr(new Schema(bufp, remainp));
201  }
202 
204  Schema() noexcept : col_name(), tags() { }
205 
206  Schema(const Schema& other);
207 
208  Schema(const uint8_t** bufp, size_t* remainp);
209 
210  ~Schema() noexcept;
211 
212  bool SWC_PURE_FUNC
213  equal(const Ptr& other, bool with_rev=true) const noexcept;
214 
215  uint32_t SWC_PURE_FUNC encoded_length() const noexcept;
216 
217  void encode(uint8_t** bufp) const;
218 
219  void display(std::ostream& out) const;
220 
222  std::string to_string() const {
223  std::string s;
224  {
225  std::stringstream ss;
226  display(ss);
227  s = ss.str();
228  }
229  return s;
230  }
231 
232  void print(std::ostream& out) const;
233 
234  std::string col_name;
236 };
237 
238 
240 
241 
242 }} // SWC::DB namespace
243 
244 
245 #ifdef SWC_IMPL_SOURCE
247 #endif
248 
249 #endif // swcdb_db_Columns_Schema_h
SWC::DB::SchemaPrimitives::blk_cells
uint32_t blk_cells
Definition: Schema.h:166
SWC::DB::Schema::Schema
SWC_CAN_INLINE Schema() noexcept
Definition: Schema.h:204
SWC::DB::SchemaPrimitives::NO_CID
static constexpr const cid_t NO_CID
Definition: Schema.h:25
SWC::DB::Schema::Ptr
std::shared_ptr< Schema > Ptr
Definition: Schema.h:185
SWC::Core::Encoder::Type
Type
Definition: Encoder.h:28
SWC::Serialization::encoded_length_vi32
constexpr SWC_CAN_INLINE uint8_t encoded_length_vi32(uint32_t val) noexcept
Definition: Serialization.h:234
SWC::DB::Schema::encode
void encode(uint8_t **bufp) const
Definition: Schema.cc:49
SWC::DB::SchemaPrimitives::encode
SWC_CAN_INLINE void encode(uint8_t **bufp) const
Definition: Schema.h:100
KeySeq.h
Encoder.h
SWC::DB::SchemaPrimitives
Definition: Schema.h:23
SWC::DB::Types::Column
Column
Definition: Column.h:18
SWC::DB::SchemaPrimitives::cs_size
uint32_t cs_size
Definition: Schema.h:167
SWC::DB::SchemaPrimitives::SchemaPrimitives
SWC_CAN_INLINE SchemaPrimitives() noexcept
Definition: Schema.h:28
SWC::DB::Schema::to_string
SWC_CAN_INLINE std::string to_string() const
Definition: Schema.h:222
SWC::DB::Schema::equal
bool SWC_PURE_FUNC equal(const Ptr &other, bool with_rev=true) const noexcept
Definition: Schema.cc:57
SWC::Serialization::encode_i8
constexpr SWC_CAN_INLINE void encode_i8(uint8_t **bufp, uint8_t val) noexcept
Definition: Serialization.h:85
SWC::DB::Schema::Tags
Core::Vector< std::string > Tags
Definition: Schema.h:186
SWC::DB::Schema
Definition: Schema.h:182
SWC::DB::SchemaPrimitives::log_fragment_preload
uint8_t log_fragment_preload
Definition: Schema.h:175
SWC::DB::Types::KeySeq
KeySeq
Definition: KeySeq.h:13
SWC::DB::SchemaPrimitives::log_rollout_ratio
uint8_t log_rollout_ratio
Definition: Schema.h:173
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::DB::SchemaPrimitives::revision
int64_t revision
Definition: Schema.h:162
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::DB::SchemaPrimitives::equal
SWC_CAN_INLINE bool equal(const SchemaPrimitives &other, bool with_rev=true) const noexcept
Definition: Schema.h:140
Column.h
SWC::DB::Schema::make
static SWC_CAN_INLINE Ptr make()
Definition: Schema.h:189
SWC::DB::SchemasVec
Core::Vector< Schema::Ptr > SchemasVec
Definition: Schema.h:239
SWC::DB::SchemaPrimitives::blk_encoding
Types::Encoder blk_encoding
Definition: Schema.h:170
SWC_PURE_FUNC
#define SWC_PURE_FUNC
Definition: Compat.h:108
SWC::DB::Schema::make
static SWC_CAN_INLINE Ptr make(const Ptr &other)
Definition: Schema.h:194
SWC::DB::Schema::make
static SWC_CAN_INLINE Ptr make(const uint8_t **bufp, size_t *remainp)
Definition: Schema.h:199
SWC::DB::SchemaPrimitives::cs_max
uint8_t cs_max
Definition: Schema.h:172
SWC::DB::SchemaPrimitives::cell_ttl
uint32_t cell_ttl
Definition: Schema.h:164
Schema.cc
Serialization.h
SWC::DB::Schema::tags
Tags tags
Definition: Schema.h:235
SWC::DB::SchemaPrimitives::col_seq
Types::KeySeq col_seq
Definition: Schema.h:168
Identifiers.h
SWC::Serialization::encoded_length_vi64
constexpr SWC_CAN_INLINE uint8_t encoded_length_vi64(uint64_t val) noexcept
Definition: Serialization.h:272
SWC::cid_t
uint64_t cid_t
Definition: Identifiers.h:16
SWC::DB::SchemaPrimitives::blk_size
uint32_t blk_size
Definition: Schema.h:165
SWC::Core::Vector< std::string >
SWC::DB::SchemaPrimitives::log_compact_cointervaling
uint8_t log_compact_cointervaling
Definition: Schema.h:174
SWC::DB::Types::Encoder
Core::Encoder::Type Encoder
Definition: Encoder.h:15
SWC::DB::SchemaPrimitives::decode
SWC_CAN_INLINE void decode(const uint8_t **bufp, size_t *remainp)
Definition: Schema.h:120
SWC::DB::Schema::col_name
std::string col_name
Definition: Schema.h:234
SWC::DB::SchemaPrimitives::cs_replication
uint8_t cs_replication
Definition: Schema.h:171
SWC::Serialization::decode_vi64
constexpr SWC_CAN_INLINE uint64_t decode_vi64(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:302
SWC::Serialization::encode_vi32
constexpr SWC_CAN_INLINE void encode_vi32(uint8_t **bufp, uint32_t val)
Definition: Serialization.h:243
SWC::DB::SchemaPrimitives::compact_percent
uint8_t compact_percent
Definition: Schema.h:176
SWC::Serialization::encode_vi64
constexpr SWC_CAN_INLINE void encode_vi64(uint8_t **bufp, uint64_t val)
Definition: Serialization.h:286
SWC::DB::SchemaPrimitives::encoded_length
SWC_CAN_INLINE uint32_t encoded_length() const noexcept
Definition: Schema.h:88
SWC::DB::SchemaPrimitives::cell_versions
uint32_t cell_versions
Definition: Schema.h:163
SWC::DB::Schema::print
void print(std::ostream &out) const
Definition: Schema.cc:97
SWC::DB::SchemaPrimitives::col_type
Types::Column col_type
Definition: Schema.h:169
SWC::DB::SchemaPrimitives::SchemaPrimitives
SWC_CAN_INLINE SchemaPrimitives(const uint8_t **bufp, size_t *remainp)
Definition: Schema.h:68
SWC::DB::Schema::display
void display(std::ostream &out) const
Definition: Schema.cc:63
SWC::Serialization::decode_i8
constexpr SWC_CAN_INLINE uint8_t decode_i8(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:91
SWC::DB::SchemaPrimitives::SchemaPrimitives
SWC_CAN_INLINE SchemaPrimitives(const SchemaPrimitives &other) noexcept
Definition: Schema.h:48
SWC::DB::SchemaPrimitives::cid
cid_t cid
Definition: Schema.h:161
SWC::DB::Schema::encoded_length
uint32_t SWC_PURE_FUNC encoded_length() const noexcept
Definition: Schema.cc:40
SWC::DB::Schema::~Schema
~Schema() noexcept
Definition: Schema.cc:38
SystemColumn.h
SWC::Serialization::decode_vi32
constexpr SWC_CAN_INLINE uint32_t decode_vi32(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:254