SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Converter.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 #ifndef swcdb_thrift_utils_Converter_h
7 #define swcdb_thrift_utils_Converter_h
8 
9 
11 
12 
13 namespace SWC { namespace Thrift {
14 
15 
17 namespace Converter {
18 
19 
20 [[noreturn]]
21 void exception(int err, const std::string& msg = "");
22 
23 void exception(int err, const std::string& msg) {
24  // switch on err with exception error type
25  Exception e;
26  if(err == Error::CLIENT_STOPPING)
28  e.__set_code(err);
29  e.__set_message(msg + " - " + Error::get_text(err));
30  SWC_LOG_OUT(LOG_DEBUG, e.printTo(SWC_LOG_OSTREAM); );
31  throw e;
32 }
33 
34 void set(const SpecFlags& flags, DB::Specs::Flags& dbspec) {
35  if(flags.__isset.limit)
36  dbspec.limit = flags.limit;
37  if(flags.__isset.offset)
38  dbspec.offset = flags.offset;
39  if(flags.__isset.max_versions)
40  dbspec.max_versions = flags.max_versions;
41  if(flags.__isset.max_buffer)
42  dbspec.max_buffer = flags.max_buffer;
43  if(flags.__isset.options)
44  dbspec.options = flags.options;
45 }
46 
47 void set(const Key& key, DB::Cell::Key& dbkey) {
48  dbkey.read(key);
49 }
50 
51 void set(const CellValuesSerial& value,
53  size_t len = 0;
54  for(auto& fields : value) {
55  if(fields.__isset.v_int64)
56  len += 16;
57  if(fields.__isset.v_double)
58  len += 24;
59  if(!fields.v_bytes.empty())
60  len += fields.v_bytes.size() + 8;
61  if(!fields.v_key.empty())
62  len += fields.v_key.size() + 8;
63  if(!fields.v_li.empty())
64  len += fields.v_li.size() * 16;
65  for(auto& v : fields.v_lb)
66  len += v.size() + 8;
67  }
68  wfields.ensure(len);
69  for(auto& fields : value) {
70  if(fields.__isset.v_int64)
71  wfields.add(fields.field_id, fields.v_int64);
72  if(fields.__isset.v_double) {
73  long double v(fields.v_double);
74  wfields.add(fields.field_id, v);
75  }
76  if(!fields.v_bytes.empty())
77  wfields.add(fields.field_id, fields.v_bytes);
78  if(!fields.v_key.empty()) {
80  field.fid = fields.field_id;
81  set(fields.v_key, field.key);
82  //
83  wfields.add(&field);
84  }
85  if(!fields.v_li.empty())
86  wfields.add(fields.field_id, fields.v_li);
87  if(!fields.v_lb.empty())
88  wfields.add(fields.field_id, fields.v_lb);
89  }
90 }
91 
92 void set(const CellValuesSerialOp& value,
94  size_t len = 0;
95  for(auto& fields : value) {
96  if(fields.__isset.v_int64) {
97  len += 16;
98  }
99  if(fields.__isset.v_double) {
100  len += 24;
101  }
102  if(fields.__isset.v_bytes) {
103  len += fields.v_bytes.v.size() + 16;
104  }
105  if(fields.__isset.v_key) {
106  len += fields.v_key.size() + 16;
107  }
108  if(fields.__isset.v_li) {
109  len += fields.v_li.v.size() * 16;
110  }
111  if(fields.__isset.v_lb) {
112  for(auto& u : fields.v_lb.v)
113  len += u.v.size() + 16;
114  len += 16;
115  }
116  }
117  wfields.ensure(len);
118  for(auto& fields : value) {
119  if(fields.__isset.v_int64) {
122  uint8_t(fields.v_int64.op)
123  ),
124  fields.v_int64.ctrl
125  );
126  wfields.add(fields.field_id, fields.v_int64.v);
127  wfields.add(&ufield);
128  }
129  if(fields.__isset.v_double) {
132  uint8_t(fields.v_double.op)
133  ),
134  fields.v_double.ctrl
135  );
136  long double v(fields.v_double.v);
137  wfields.add(fields.field_id, v);
138  wfields.add(&ufield);
139  }
140  if(fields.__isset.v_bytes) {
143  uint8_t(fields.v_bytes.op)
144  ),
145  fields.v_bytes.pos,
146  fields.v_bytes.ctrl
147  );
148  // Fix applicable OP
149  if(ufield.is_op_by_unique())
150  exception(Error::INCOMPATIBLE_OPTIONS, "not supported OP::BY_UNIQUE");
151  if(ufield.is_op_by_cond())
152  exception(Error::INCOMPATIBLE_OPTIONS, "not supported OP::BY_COND");
153  if(ufield.is_op_by_idx())
154  exception(Error::INCOMPATIBLE_OPTIONS, "not supported OP::BY_INDEX");
155 
156  wfields.add(
157  fields.field_id,
158  ufield.is_delete_field() ? std::string() : fields.v_bytes.v
159  );
160  wfields.add(&ufield);
161  }
162  if(fields.__isset.v_key) {
164  field.fid = fields.field_id;
165  set(fields.v_key, field.key);
166  wfields.add(&field);
167  }
168  if(fields.__isset.v_li) {
171  uint8_t(fields.v_li.op)
172  ),
173  fields.v_li.pos,
174  fields.v_li.ctrl
175  );
176 
177  Core::Vector<int64_t> items;
178  if(!ufield.is_delete_field()) {
179  items.reserve(fields.v_li.v.size());
180  for(auto& u : fields.v_li.v) {
181  if(ufield.is_op_by_idx()) {
182  ufield.add_item(
183  u.pos,
185  uint8_t(u.op)
186  ),
187  u.ctrl
188  );
189  } else if(ufield.is_op_by_unique()) {
190  ufield.add_item(
191  0,
193  uint8_t(u.op)
194  ),
195  u.ctrl
196  );
197  } else if(ufield.is_op_by_cond()) {
198  ufield.add_item(
199  uint32_t(Condition::Comp(uint8_t(u.comp))),
201  uint8_t(u.op)
202  ),
203  u.ctrl
204  );
205  }
206  items.push_back(u.v);
207  }
208  }
209  wfields.add(fields.field_id, items);
210  wfields.add(&ufield);
211  }
212  if(fields.__isset.v_lb) {
215  uint8_t(fields.v_lb.op)
216  ),
217  fields.v_lb.pos,
218  fields.v_lb.ctrl
219  );
220 
222  if(!ufield.is_delete_field()) {
223  items.reserve(fields.v_lb.v.size());
224  for(auto& u : fields.v_lb.v) {
225  if(ufield.is_op_by_idx()) {
226  ufield.add_item(
227  u.pos,
229  uint8_t(u.op)
230  ),
231  0,
232  u.ctrl
233  );
234  } else if(ufield.is_op_by_unique()) {
235  ufield.add_item(
236  0,
238  uint8_t(u.op)
239  ),
240  0,
241  u.ctrl
242  );
243  } else if(ufield.is_op_by_cond()) {
244  ufield.add_item(
245  uint32_t(Condition::Comp(uint8_t(u.comp))),
247  uint8_t(u.op)
248  ),
249  0,
250  u.ctrl
251  );
252  }
253  items.push_back(u.v);
254  }
255  }
256  wfields.add(fields.field_id, items);
257  wfields.add(&ufield);
258  }
259  }
260 }
261 
262 void set(const SpecKey& spec, DB::Specs::Key& dbspec) {
263  dbspec.reserve(spec.size());
264  for(const auto& fraction : spec) {
265  if(uint8_t(fraction.comp) > 0x8 && uint8_t(fraction.comp) < 0x13) {
266  std::string msg("Key ext-fraction-comp(");
267  msg.append(Condition::to_string(Condition::Comp(fraction.comp)));
268  msg.append(")");
270  }
271  dbspec.add(fraction.f, Condition::Comp(fraction.comp));
272  }
273 }
274 
275 void set(const SpecTimestamp& spec, DB::Specs::Timestamp& dbspec) {
276  dbspec.set(spec.ts, Condition::Comp(spec.comp));
277 }
278 
279 void set(const SpecUpdateOP& spec, DB::Specs::UpdateOP& dbspec) {
280  dbspec.set_op(uint8_t(spec.op));
281  if(spec.__isset.pos && dbspec.has_pos())
282  dbspec.set_pos(spec.pos);
283 }
284 
285 
286 // SpecIntervalPlain
287 
288 void set(const SpecValuePlain& spec, DB::Specs::Value& dbspec) {
289  dbspec.set(spec.v, Condition::Comp(spec.comp));
290 }
291 
292 void set(const SpecValuesPlain& spec, DB::Specs::Values& dbspec) {
293  for(const auto& value : spec)
294  set(value, dbspec.add());
295 }
296 
297 void set(const SpecIntervalPlain& intval, DB::Specs::Interval& dbintval) {
298  if(!intval.range_begin.empty())
299  set(intval.range_begin, dbintval.range_begin);
300 
301  if(!intval.range_end.empty())
302  set(intval.range_end, dbintval.range_end);
303 
304  if(!intval.offset_key.empty())
305  set(intval.offset_key, dbintval.offset_key);
306 
307  if(intval.__isset.offset_rev)
308  dbintval.offset_rev = intval.offset_rev;
309 
310  dbintval.key_intervals.resize(intval.key_intervals.size());
311  size_t n = 0;
312  for(const auto& key_intval : intval.key_intervals) {
313  if(!key_intval.start.empty())
314  set(key_intval.start, dbintval.key_intervals[n].start);
315  if(!key_intval.finish.empty())
316  set(key_intval.finish, dbintval.key_intervals[n].finish);
317  ++n;
318  }
319 
320  if(intval.__isset.ts_start)
321  set(intval.ts_start, dbintval.ts_start);
322 
323  if(intval.__isset.ts_finish)
324  set(intval.ts_finish, dbintval.ts_finish);
325 
326  if(intval.__isset.flags)
327  set(intval.flags, dbintval.flags);
328 
329  if(!intval.values.empty())
330  set(intval.values, dbintval.values);
331 
332  if(intval.options & SpecIntervalOptions::type::UPDATING) {
333  if(intval.__isset.updating) {
334  dbintval.set_opt__updating();
335 
336  DB::Specs::UpdateOP update_op;
337  if(intval.updating.__isset.update_op)
338  set(intval.updating.update_op, update_op);
339 
340  dbintval.updating.reset(new DB::Specs::IntervalUpdate(
341  intval.updating.__isset.encoder
342  ? DB::Types::Encoder(uint8_t(intval.updating.encoder))
344  intval.updating.v,
345  intval.updating.__isset.ts
346  ? intval.updating.ts
348  update_op
349  ));
350  }
351  } else if(intval.options & SpecIntervalOptions::type::DELETING) {
352  dbintval.set_opt__deleting();
353  }
354 }
355 
356 
357 // SpecIntervalCounter
358 
359 void set(const SpecValueCounter& spec, DB::Specs::Value& dbspec) {
360  dbspec.set_counter(spec.v, Condition::Comp(spec.comp));
361 }
362 
363 void set(const SpecValuesCounter& spec, DB::Specs::Values& dbspec) {
364  for(const auto& value : spec)
365  set(value, dbspec.add());
366 }
367 
368 void set(const SpecIntervalCounter& intval, DB::Specs::Interval& dbintval) {
369  if(!intval.range_begin.empty())
370  set(intval.range_begin, dbintval.range_begin);
371 
372  if(!intval.range_end.empty())
373  set(intval.range_end, dbintval.range_end);
374 
375  if(!intval.offset_key.empty())
376  set(intval.offset_key, dbintval.offset_key);
377 
378  if(intval.__isset.offset_rev)
379  dbintval.offset_rev = intval.offset_rev;
380 
381  dbintval.key_intervals.resize(intval.key_intervals.size());
382  size_t n = 0;
383  for(const auto& key_intval : intval.key_intervals) {
384  if(!key_intval.start.empty())
385  set(key_intval.start, dbintval.key_intervals[n].start);
386  if(!key_intval.finish.empty())
387  set(key_intval.finish, dbintval.key_intervals[n].finish);
388  ++n;
389  }
390 
391  if(intval.__isset.ts_start)
392  set(intval.ts_start, dbintval.ts_start);
393 
394  if(intval.__isset.ts_finish)
395  set(intval.ts_finish, dbintval.ts_finish);
396 
397  if(intval.__isset.flags)
398  set(intval.flags, dbintval.flags);
399 
400  if(!intval.values.empty())
401  set(intval.values, dbintval.values);
402 
403  if(intval.options & SpecIntervalOptions::type::UPDATING) {
404  if(intval.__isset.updating) {
405  dbintval.set_opt__updating();
406  DB::Cells::Cell dbcell;
407  dbcell.set_counter(
408  uint8_t(intval.updating.op),
409  intval.updating.v,
410  dbintval.values.col_type
411  );
412 
413  DB::Specs::UpdateOP update_op;
414  if(intval.updating.__isset.update_op)
415  set(intval.updating.update_op, update_op);
416  dbintval.updating.reset(new DB::Specs::IntervalUpdate(
418  dbcell.value,
419  dbcell.vlen,
420  intval.updating.__isset.ts
421  ? intval.updating.ts
423  update_op,
424  false
425  ));
426  dbcell.value = nullptr;
427  dbcell.vlen = 0;
428  }
429  } else if(intval.options & SpecIntervalOptions::type::DELETING) {
430  dbintval.set_opt__deleting();
431  }
432 }
433 
434 
435 
436 // SpecIntervalSerial
437 
438 void set(const SpecValueSerial& spec, DB::Specs::Value& dbspec) {
440 
441  for(const auto& fields : spec.fields) {
442  if(fields.__isset.spec_int64) {
443  dbfields.add(
445  fields.field_id,
446  Condition::Comp(uint8_t(fields.spec_int64.comp)),
447  fields.spec_int64.v));
448  }
449  if(fields.__isset.spec_double) {
450  dbfields.add(
452  fields.field_id,
453  Condition::Comp(uint8_t(fields.spec_double.comp)),
454  fields.spec_double.v));
455  }
456  if(!fields.spec_bytes.v.empty()) {
457  dbfields.add(
459  fields.field_id,
460  Condition::Comp(uint8_t(fields.spec_bytes.comp)),
461  fields.spec_bytes.v));
462  }
463  if(!fields.spec_key.v.empty()) {
465  fields.field_id, DB::Types::KeySeq(uint8_t(fields.spec_key.seq)));
466  Converter::set(fields.spec_key.v, field->key);
467  dbfields.add(std::move(field));
468  }
469  if(!fields.spec_li.v.empty()) {
471  fields.field_id, Condition::Comp(uint8_t(fields.spec_li.comp)));
472  field->items.resize(fields.spec_li.v.size());
473  size_t i = 0;
474  for(const auto& data : fields.spec_li.v) {
475  auto& f = field->items[i];
476  f.comp = Condition::Comp(uint8_t(data.comp));
477  f.value = data.v;
478  ++i;
479  }
480  dbfields.add(std::move(field));
481  }
482  if(!fields.spec_lb.v.empty()) {
484  fields.field_id, Condition::Comp(uint8_t(fields.spec_lb.comp)));
485  field->items.resize(fields.spec_lb.v.size());
486  size_t i = 0;
487  for(const auto& data : fields.spec_lb.v) {
488  auto& f = field->items[i];
489  f.comp = Condition::Comp(uint8_t(data.comp));
490  f.value = data.v;
491  ++i;
492  }
493  dbfields.add(std::move(field));
494  }
495  }
496 
497  dbspec.comp = Condition::Comp(uint8_t(spec.comp));
498  dbfields.encode(dbspec);
499 }
500 
501 void set(const SpecValuesSerial& spec, DB::Specs::Values& dbspec) {
502  for(const auto& value : spec)
503  set(value, dbspec.add());
504 }
505 
506 void set(const SpecIntervalSerial& intval, DB::Specs::Interval& dbintval) {
507  if(!intval.range_begin.empty())
508  set(intval.range_begin, dbintval.range_begin);
509 
510  if(!intval.range_end.empty())
511  set(intval.range_end, dbintval.range_end);
512 
513  if(!intval.offset_key.empty())
514  set(intval.offset_key, dbintval.offset_key);
515 
516  if(intval.__isset.offset_rev)
517  dbintval.offset_rev = intval.offset_rev;
518 
519  dbintval.key_intervals.resize(intval.key_intervals.size());
520  size_t n = 0;
521  for(const auto& key_intval : intval.key_intervals) {
522  if(!key_intval.start.empty())
523  set(key_intval.start, dbintval.key_intervals[n].start);
524  if(!key_intval.finish.empty())
525  set(key_intval.finish, dbintval.key_intervals[n].finish);
526  ++n;
527  }
528 
529  if(intval.__isset.ts_start)
530  set(intval.ts_start, dbintval.ts_start);
531 
532  if(intval.__isset.ts_finish)
533  set(intval.ts_finish, dbintval.ts_finish);
534 
535  if(intval.__isset.flags)
536  set(intval.flags, dbintval.flags);
537 
538  if(!intval.values.empty())
539  set(intval.values, dbintval.values);
540 
541  if(intval.options & SpecIntervalOptions::type::UPDATING) {
542  if(intval.__isset.updating) {
543  dbintval.set_opt__updating();
544 
545  DB::Specs::UpdateOP update_op;
546  if(intval.updating.__isset.update_op)
547  set(intval.updating.update_op, update_op);
548 
550  if(update_op.get_op() == DB::Specs::UpdateOP::SERIAL) {
551  set(intval.updating.v_op, wfields);
552  } else {
553  set(intval.updating.v, wfields);
554  }
555  dbintval.updating.reset(new DB::Specs::IntervalUpdate(
556  intval.updating.__isset.encoder
557  ? DB::Types::Encoder(uint8_t(intval.updating.encoder))
559  wfields.base,
560  wfields.fill(),
561  intval.updating.__isset.ts
562  ? intval.updating.ts
564  update_op,
565  true
566  ));
567  }
568  } else if(intval.options & SpecIntervalOptions::type::DELETING) {
569  dbintval.set_opt__deleting();
570  }
571 }
572 
573 
574 void set(const DB::Schema::Ptr& dbschema, Schema& schema) {
575  schema.__set_cid(dbschema->cid);
576  schema.__set_col_name(dbschema->col_name);
577  schema.col_tags.assign(dbschema->tags.cbegin(), dbschema->tags.cend());
578 
579  schema.__set_col_seq(
580  KeySeq::type(uint8_t(dbschema->col_seq)));
581  schema.__set_col_type(
582  ColumnType::type(uint8_t(dbschema->col_type)));
583 
584  schema.__set_cell_versions(dbschema->cell_versions);
585  schema.__set_cell_ttl(dbschema->cell_ttl);
586 
587  schema.__set_blk_encoding(
588  EncodingType::type(uint8_t(dbschema->blk_encoding)));
589  schema.__set_blk_size(dbschema->blk_size);
590  schema.__set_blk_cells(dbschema->blk_cells);
591 
592  schema.__set_cs_replication(dbschema->cs_replication);
593  schema.__set_cs_size(dbschema->cs_size);
594  schema.__set_cs_max(dbschema->cs_max);
595 
596  schema.__set_log_rollout_ratio(dbschema->log_rollout_ratio);
597  schema.__set_log_compact_cointervaling(dbschema->log_compact_cointervaling);
598  schema.__set_log_fragment_preload(dbschema->log_fragment_preload);
599 
600  schema.__set_compact_percent(dbschema->compact_percent);
601 
602  schema.__set_revision(dbschema->revision);
603 }
604 
605 void set(const Schema& schema, DB::Schema::Ptr& dbschema) {
606  if(schema.__isset.cid)
607  dbschema->cid = schema.cid;
608  if(schema.__isset.col_name)
609  dbschema->col_name = schema.col_name;
610  dbschema->tags.assign(schema.col_tags.cbegin(), schema.col_tags.cend());
611 
612  if(schema.__isset.col_seq)
613  dbschema->col_seq = DB::Types::KeySeq(uint8_t(schema.col_seq));
614  if(schema.__isset.col_type)
615  dbschema->col_type = DB::Types::Column(uint8_t(schema.col_type));
616 
617  if(schema.__isset.cell_versions)
618  dbschema->cell_versions = schema.cell_versions;
619  if(schema.__isset.cell_ttl)
620  dbschema->cell_ttl = schema.cell_ttl;
621 
622  if(schema.__isset.blk_encoding)
623  dbschema->blk_encoding = DB::Types::Encoder(uint8_t(schema.blk_encoding));
624  if(schema.__isset.blk_size)
625  dbschema->blk_size = schema.blk_size;
626  if(schema.__isset.blk_cells)
627  dbschema->blk_cells = schema.blk_cells;
628 
629  if(schema.__isset.cs_replication)
630  dbschema->cs_replication = schema.cs_replication;
631  if(schema.__isset.cs_size)
632  dbschema->cs_size = schema.cs_size;
633  if(schema.__isset.cs_max)
634  dbschema->cs_max = schema.cs_max;
635 
636  if(schema.__isset.log_rollout_ratio)
637  dbschema->log_rollout_ratio = schema.log_rollout_ratio;
638  if(schema.__isset.log_compact_cointervaling)
639  dbschema->log_compact_cointervaling = schema.log_compact_cointervaling;
640  if(schema.__isset.log_fragment_preload)
641  dbschema->log_fragment_preload = schema.log_fragment_preload;
642 
643  if(schema.__isset.compact_percent)
644  dbschema->compact_percent = schema.compact_percent;
645 
646  if(schema.__isset.revision)
647  dbschema->revision = schema.revision;
648 }
649 
650 CellValueSerial& get_fields(int32_t fid, CellValuesSerial& values) {
651  for(auto& fields : values) {
652  if(fid == fields.field_id)
653  return fields;
654  }
655  auto& fields = values.emplace_back();
656  fields.field_id = fid;
657  return fields;
658 }
659 
660 void set(const DB::Cells::Cell& dbcell, CellValuesSerial& values) {
661  if(!dbcell.vlen)
662  return;
663 
664  StaticBuffer v;
665  dbcell.get_value(v, false);
666  const uint8_t* ptr = v.base;
667  size_t remain = v.size;
668 
669  while(remain) {
670  switch(DB::Cell::Serial::Value::read_type(&ptr, &remain)) {
671 
673  DB::Cell::Serial::Value::Field_INT64 dbfield(&ptr, &remain);
674  auto& fields = get_fields(dbfield.fid, values);
675  fields.__set_v_int64(dbfield.value);
676  break;
677  }
679  DB::Cell::Serial::Value::Field_DOUBLE dbfield(&ptr, &remain);
680  auto& fields = get_fields(dbfield.fid, values);
681  fields.__set_v_double(dbfield.value);
682  break;
683  }
685  DB::Cell::Serial::Value::Field_BYTES dbfield(&ptr, &remain, false);
686  auto& fields = get_fields(dbfield.fid, values);
687  fields.__isset.v_bytes = true;
688  dbfield.convert_to(fields.v_bytes);
689  break;
690  }
692  DB::Cell::Serial::Value::Field_KEY dbfield(&ptr, &remain, false);
693  auto& fields = get_fields(dbfield.fid, values);
694  fields.__isset.v_key = true;
695  dbfield.key.convert_to(fields.v_key);
696  break;
697  }
699  DB::Cell::Serial::Value::Field_LIST_INT64 dbfield(&ptr, &remain, false);
700  auto& fields = get_fields(dbfield.fid, values);
701  fields.__isset.v_li = true;
702  dbfield.convert_to(fields.v_li);
703  break;
704  }
706  DB::Cell::Serial::Value::Field_LIST_BYTES dbfield(&ptr, &remain, false);
707  auto& fields = get_fields(dbfield.fid, values);
708  fields.__isset.v_lb = true;
709  dbfield.convert_to(fields.v_lb);
710  break;
711  }
712  default: {
713  exception(Error::SERIALIZATION_INPUT_OVERRUN, "Serial Cell Value");
714  remain = 0;
715  break;
716  }
717  }
718  }
719 }
720 
721 
722 
723 
724 }
725 
726 }}
727 
728 #endif // swcdb_thrift_utils_Converter_h
SWC::DB::Cells::Cell::set_counter
void set_counter(uint8_t op, int64_t v, Types::Column typ=Types::Column::COUNTER_I64, int64_t rev=TIMESTAMP_NULL)
Definition: Cell.h:450
SWC::DB::Specs::Serial::Value::Field_DOUBLE::make
static SWC_CAN_INLINE Field::Ptr make(uint24_t fid, Condition::Comp comp, const long double &value)
Definition: SpecsValueSerialFields.h:112
SWC::DB::Cell::Serial::Value::Field_KEY::key
Key key
Definition: CellValueSerialField.h:233
SWC_LOG_OSTREAM
#define SWC_LOG_OSTREAM
Definition: Logger.h:44
SWC::DB::Specs::Flags::max_versions
uint32_t max_versions
Definition: SpecsFlags.h:143
SWC::DB::Specs::UpdateOP::set_pos
SWC_CAN_INLINE void set_pos(uint32_t a_pos) noexcept
Definition: SpecsUpdateOp.h:105
SWC::DB::Specs::Interval::key_intervals
KeyIntervals key_intervals
Definition: SpecsInterval.h:239
SWC::Core::Vector::resize
SWC_CAN_INLINE void resize(size_type sz, ArgsT &&... args)
Definition: Vector.h:308
SWC::Error::SERVER_SHUTTING_DOWN
@ SERVER_SHUTTING_DOWN
Definition: Error.h:84
SWC::DB::Specs::Interval::values
Values values
Definition: SpecsInterval.h:240
SWC::DB::Schema::Ptr
std::shared_ptr< Schema > Ptr
Definition: Schema.h:185
SWC::DB::Specs::Serial::Value::Fields::add
void add(Field::Ptr &&field)
Definition: SpecsValueSerialFields.cc:724
SWC_LOG_OUT
#define SWC_LOG_OUT(pr, _code_)
Definition: Logger.h:178
SWC::DB::Specs::Value::set
SWC_CAN_INLINE void set(const char *data_n, Condition::Comp comp_n, bool owner)
Definition: SpecsValue.h:124
data
T data
Definition: BitFieldInt.h:1
SWC::DB::Cell::Serial::Value::Field_KEY
Definition: CellValueSerialField.h:209
SpecsValueSerialFields.h
SWC::DB::Specs::Serial::Value::Fields
Definition: SpecsValueSerialFields.h:335
SWC::Error::get_text
const char * get_text(const int err) noexcept
Definition: Error.cc:173
SWC::Core::Encoder::Type
Type
Definition: Encoder.h:28
SWC::DB::Cell::Serial::Value::Field::fid
uint24_t fid
Definition: CellValueSerialField.h:72
SWC::Thrift::Converter::get_fields
CellValueSerial & get_fields(int32_t fid, CellValuesSerial &values)
Definition: Converter.h:650
SWC::DB::Specs::UpdateOP::SERIAL
static constexpr const uint8_t SERIAL
Definition: SpecsUpdateOp.h:26
SWC::DB::Specs::Flags::offset
uint64_t offset
Definition: SpecsFlags.h:142
SWC::Core::BufferDyn::ensure
SWC_CAN_INLINE void ensure(size_t len)
Definition: Buffer.h:212
SWC::DB::Types::Column
Column
Definition: Column.h:18
SWC::DB::Specs::Interval::range_begin
Cell::Key range_begin
Definition: SpecsInterval.h:238
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS::add_item
SWC_CAN_INLINE UpdateField_T & add_item(uint32_t i, ArgsT &&... args)
Definition: CellValueSerialFieldUpdate.h:582
SWC::Thrift::Converter::exception
void exception(int err, const std::string &msg="")
Definition: Converter.h:23
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH
Definition: CellValueSerialFieldUpdate.h:131
SWC::DB::Cells::TIMESTAMP_AUTO
constexpr const int64_t TIMESTAMP_AUTO
Definition: Cell.h:73
SWC::DB::Cells::Cell
Definition: Cell.h:92
SWC::DB::Cell::Serial::Value::Field_LIST_BYTES
Definition: CellValueSerialField.h:323
SWC::DB::Specs::Interval::ts_start
Timestamp ts_start
Definition: SpecsInterval.h:241
SWC::DB::Cell::Serial::Value::Field_BYTES::convert_to
void convert_to(T &item) const
Definition: CellValueSerialField.h:192
SWC::DB::Cell::Key
Definition: CellKey.h:24
SWC::Error::SERIALIZATION_INPUT_OVERRUN
@ SERIALIZATION_INPUT_OVERRUN
Definition: Error.h:61
SWC::DB::Specs::Key
Definition: SpecsKey.h:136
SWC::Core::Encoder::Type::DEFAULT
@ DEFAULT
SWC::DB::Cell::Serial::Value::FieldsWriter::add
SWC_CAN_INLINE void add(Field *field)
Definition: CellValueSerialFields.h:42
SWC::DB::Specs::Serial::Value::Field_KEY::make
static SWC_CAN_INLINE std::unique_ptr< Field_KEY > make(uint24_t fid, Types::KeySeq seq)
Definition: SpecsValueSerialFields.h:186
SWC::DB::Specs::UpdateOP::get_op
SWC_CAN_INLINE uint8_t get_op() const noexcept
Definition: SpecsUpdateOp.h:100
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::is_op_by_idx
SWC_CAN_INLINE bool is_op_by_idx() const noexcept
Definition: CellValueSerialFieldUpdate.h:287
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST
Definition: CellValueSerialFieldUpdate.h:243
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::OP
OP
Definition: CellValueSerialFieldUpdate.h:245
SWC::DB::Cell::Serial::Value::DOUBLE
@ DOUBLE
Definition: CellValueSerialField.h:36
SWC::DB::Types::KeySeq
KeySeq
Definition: KeySeq.h:13
SWC::DB::Cell::Serial::Value::BYTES
@ BYTES
Definition: CellValueSerialField.h:37
SWC::DB::Cell::Serial::Value::FieldUpdate::is_delete_field
SWC_CAN_INLINE bool is_delete_field() const noexcept
Definition: CellValueSerialFieldUpdate.h:89
SWC::DB::Cell::Key::convert_to
SWC_CAN_INLINE void convert_to(T &key) const
Definition: CellKey.h:199
SWC::Condition::Comp
Comp
Definition: Comparators.h:27
SWC::LOG_DEBUG
@ LOG_DEBUG
Definition: Logger.h:36
SWC::DB::Specs::IntervalUpdate
Definition: SpecsIntervalUpdate.h:17
SWC::Core::Buffer::base
value_type * base
Definition: Buffer.h:131
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::DB::Cell::Serial::Value::Field_LIST_INT64::convert_to
void convert_to(T &items) const
Definition: CellValueSerialField.h:292
SWC::DB::Cell::Serial::Value::INT64
@ INT64
Definition: CellValueSerialField.h:35
SWC::Core::Buffer
Definition: Buffer.h:18
SWC::DB::Specs::Timestamp
Definition: SpecsTimestamp.h:18
SWC::Core::Buffer::size
size_t size
Definition: Buffer.h:130
SWC::DB::Specs::Serial::Value::Field_INT64::make
static SWC_CAN_INLINE Field::Ptr make(uint24_t fid, Condition::Comp comp, int64_t value)
Definition: SpecsValueSerialFields.h:81
SWC::DB::Cells::Cell::get_value
Types::Encoder get_value(StaticBuffer &v, bool owner) const
Definition: Cell.cc:77
SWC::DB::Specs::Interval::ts_finish
Timestamp ts_finish
Definition: SpecsInterval.h:241
SWC::DB::Cells::Cell::value
uint8_t * value
Definition: Cell.h:362
SWC::DB::Specs::Value::set_counter
void set_counter(int64_t count, Condition::Comp comp_n)
Definition: SpecsValue.h:278
SWC::DB::Specs::Serial::Value::Field_LIST_BYTES::make
static SWC_CAN_INLINE std::unique_ptr< Field_LIST_BYTES > make(uint24_t fid, Condition::Comp comp)
Definition: SpecsValueSerialFields.h:297
SWC::DB::Specs::Flags::options
uint8_t options
Definition: SpecsFlags.h:145
SWC::DB::Cell::Serial::Value::Field_DOUBLE::value
long double value
Definition: CellValueSerialField.h:145
SWC::Error::CLIENT_STOPPING
@ CLIENT_STOPPING
Definition: Error.h:127
SWC::DB::Cell::Serial::Value::Field_LIST_BYTES::convert_to
void convert_to(T &items) const
Definition: CellValueSerialField.h:374
SWC::DB::Specs::Interval::flags
Flags flags
Definition: SpecsInterval.h:242
SWC::DB::Cell::Serial::Value::LIST_INT64
@ LIST_INT64
Definition: CellValueSerialField.h:39
SWC::DB::Specs::Value
Definition: SpecsValue.h:17
SWC::DB::Specs::Serial::Value::Field_LIST_INT64::make
static SWC_CAN_INLINE std::unique_ptr< Field_LIST_INT64 > make(uint24_t fid, Condition::Comp comp)
Definition: SpecsValueSerialFields.h:238
SWC::DB::Cell::Serial::Value::FieldsWriter
Definition: CellValueSerialFields.h:34
SWC::DB::Cell::Serial::Value::read_type
SWC_CAN_INLINE Type read_type(const uint8_t **bufp, size_t *remainp)
Definition: CellValueSerialField.h:51
SWC::DB::Specs::Interval::range_end
Cell::Key range_end
Definition: SpecsInterval.h:238
SWC::DB::Cell::Serial::Value::Field_LIST_INT64
Definition: CellValueSerialField.h:241
SWC::DB::Specs::Flags
Definition: SpecsFlags.h:18
SWC::DB::Cells::Cell::vlen
uint32_t vlen
Definition: Cell.h:361
SWC::Core::Vector< int64_t >
SWC::DB::Specs::Interval::set_opt__updating
constexpr SWC_CAN_INLINE void set_opt__updating() noexcept
Definition: SpecsInterval.h:158
SWC::DB::Cell::Serial::Value::Field_DOUBLE
Definition: CellValueSerialField.h:143
SWC::DB::Types::Encoder
Core::Encoder::Type Encoder
Definition: Encoder.h:15
SWC::Core::BufferDyn::fill
constexpr SWC_CAN_INLINE size_t fill() const noexcept
Definition: Buffer.h:192
SWC::DB::Specs::Interval::updating
IntervalUpdate::Ptr updating
Definition: SpecsInterval.h:249
SWC::DB::Specs::Key::add
Fraction & add(Fraction &&other)
Definition: SpecsKey.cc:64
SWC::DB::Specs::Interval
Definition: SpecsInterval.h:25
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::is_op_by_unique
SWC_CAN_INLINE bool is_op_by_unique() const noexcept
Definition: CellValueSerialFieldUpdate.h:279
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST::is_op_by_cond
SWC_CAN_INLINE bool is_op_by_cond() const noexcept
Definition: CellValueSerialFieldUpdate.h:283
SWC::DB::Cell::Key::read
SWC_CAN_INLINE void read(const T &key)
Definition: CellKey.h:144
SWC::DB::Specs::Values::add
Value & add(Condition::Comp comp=Condition::EQ)
Definition: SpecsValues.cc:24
SWC::DB::Specs::Interval::offset_rev
int64_t offset_rev
Definition: SpecsInterval.h:245
SWC::DB::Cell::Serial::Value::Field_BYTES
Definition: CellValueSerialField.h:172
SWC::Condition::to_string
const char *SWC_CONST_FUNC to_string(Comp comp) noexcept
Definition: Comparators.cc:174
SWC::DB::Specs::Interval::offset_key
Cell::Key offset_key
Definition: SpecsInterval.h:244
SWC::DB::Specs::UpdateOP::has_pos
SWC_CAN_INLINE bool has_pos() const noexcept
Definition: SpecsUpdateOp.h:115
SWC::DB::Specs::Interval::set_opt__deleting
constexpr SWC_CAN_INLINE void set_opt__deleting() noexcept
Definition: SpecsInterval.h:163
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS
Definition: CellValueSerialFieldUpdate.h:551
SWC::DB::Cell::Serial::Value::LIST_BYTES
@ LIST_BYTES
Definition: CellValueSerialField.h:40
SWC::DB::Specs::Flags::max_buffer
uint32_t max_buffer
Definition: SpecsFlags.h:144
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH::OP
OP
Definition: CellValueSerialFieldUpdate.h:133
flags
uint8_t flags
Flags.
Definition: Header.h:55
SWC::Core::Vector::push_back
SWC_CAN_INLINE void push_back(ArgsT &&... args)
Definition: Vector.h:331
SWC::DB::Specs::Flags::limit
uint64_t limit
Definition: SpecsFlags.h:142
SWC::DB::Cell::Serial::Value::Field_INT64::value
int64_t value
Definition: CellValueSerialField.h:116
SWC::DB::Specs::UpdateOP::set_op
SWC_CAN_INLINE void set_op(uint8_t a_op) noexcept
Definition: SpecsUpdateOp.h:95
SWC::DB::Specs::Values::col_type
Types::Column col_type
Definition: SpecsValues.h:26
SWC::DB::Specs::Values
Definition: SpecsValues.h:17
SWC::DB::Specs::UpdateOP
Definition: SpecsUpdateOp.h:18
SWC::Thrift::Converter::set
void set(const SpecFlags &flags, DB::Specs::Flags &dbspec)
Definition: Converter.h:34
SWC::DB::Specs::Serial::Value::Field_BYTES::make
static SWC_CAN_INLINE Field::Ptr make(uint24_t fid, Condition::Comp comp, const uint8_t *ptr, size_t len)
Definition: SpecsValueSerialFields.h:144
SWC::DB::Cell::Serial::Value::Field_INT64
Definition: CellValueSerialField.h:114
SWC::DB::Cell::Serial::Value::KEY
@ KEY
Definition: CellValueSerialField.h:38
SWC::DB::Specs::Timestamp::set
constexpr SWC_CAN_INLINE void set(int64_t timestamp, Condition::Comp comperator) noexcept
Definition: SpecsTimestamp.h:54
SWC::Core::Vector::reserve
SWC_CAN_INLINE void reserve(size_type cap)
Definition: Vector.h:288
SWC::Error::INCOMPATIBLE_OPTIONS
@ INCOMPATIBLE_OPTIONS
Definition: Error.h:59
SWC::DB::Specs::Value::comp
Condition::Comp comp
Definition: SpecsValue.h:250
SWC::DB::Specs::Serial::Value::Fields::encode
void encode(Specs::Value &value) const
Definition: SpecsValueSerialFields.cc:735