6 #ifndef swcdb_thrift_utils_Converter_h
7 #define swcdb_thrift_utils_Converter_h
13 namespace SWC {
namespace Thrift {
21 void exception(
int err,
const std::string& msg =
"");
35 if(
flags.__isset.limit)
37 if(
flags.__isset.offset)
39 if(
flags.__isset.max_versions)
41 if(
flags.__isset.max_buffer)
43 if(
flags.__isset.options)
51 void set(
const CellValuesSerial& value,
54 for(
auto& fields : value) {
55 if(fields.__isset.v_int64)
57 if(fields.__isset.v_double)
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)
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);
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);
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);
92 void set(
const CellValuesSerialOp& value,
95 for(
auto& fields : value) {
96 if(fields.__isset.v_int64) {
99 if(fields.__isset.v_double) {
102 if(fields.__isset.v_bytes) {
103 len += fields.v_bytes.v.size() + 16;
105 if(fields.__isset.v_key) {
106 len += fields.v_key.size() + 16;
108 if(fields.__isset.v_li) {
109 len += fields.v_li.v.size() * 16;
111 if(fields.__isset.v_lb) {
112 for(
auto& u : fields.v_lb.v)
113 len += u.v.size() + 16;
118 for(
auto& fields : value) {
119 if(fields.__isset.v_int64) {
122 uint8_t(fields.v_int64.op)
126 wfields.
add(fields.field_id, fields.v_int64.v);
127 wfields.
add(&ufield);
129 if(fields.__isset.v_double) {
132 uint8_t(fields.v_double.op)
136 long double v(fields.v_double.v);
137 wfields.
add(fields.field_id, v);
138 wfields.
add(&ufield);
140 if(fields.__isset.v_bytes) {
143 uint8_t(fields.v_bytes.op)
160 wfields.
add(&ufield);
162 if(fields.__isset.v_key) {
164 field.
fid = fields.field_id;
165 set(fields.v_key, field.
key);
168 if(fields.__isset.v_li) {
171 uint8_t(fields.v_li.op)
179 items.
reserve(fields.v_li.v.size());
180 for(
auto& u : fields.v_li.v) {
209 wfields.
add(fields.field_id, items);
210 wfields.
add(&ufield);
212 if(fields.__isset.v_lb) {
215 uint8_t(fields.v_lb.op)
223 items.
reserve(fields.v_lb.v.size());
224 for(
auto& u : fields.v_lb.v) {
256 wfields.
add(fields.field_id, items);
257 wfields.
add(&ufield);
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(");
280 dbspec.
set_op(uint8_t(spec.op));
281 if(spec.__isset.pos && dbspec.
has_pos())
293 for(
const auto& value : spec)
298 if(!intval.range_begin.empty())
301 if(!intval.range_end.empty())
304 if(!intval.offset_key.empty())
307 if(intval.__isset.offset_rev)
312 for(
const auto& key_intval : intval.key_intervals) {
313 if(!key_intval.start.empty())
315 if(!key_intval.finish.empty())
320 if(intval.__isset.ts_start)
323 if(intval.__isset.ts_finish)
326 if(intval.__isset.flags)
329 if(!intval.values.empty())
332 if(intval.options & SpecIntervalOptions::type::UPDATING) {
333 if(intval.__isset.updating) {
337 if(intval.updating.__isset.update_op)
338 set(intval.updating.update_op, update_op);
341 intval.updating.__isset.encoder
345 intval.updating.__isset.ts
351 }
else if(intval.options & SpecIntervalOptions::type::DELETING) {
364 for(
const auto& value : spec)
369 if(!intval.range_begin.empty())
372 if(!intval.range_end.empty())
375 if(!intval.offset_key.empty())
378 if(intval.__isset.offset_rev)
383 for(
const auto& key_intval : intval.key_intervals) {
384 if(!key_intval.start.empty())
386 if(!key_intval.finish.empty())
391 if(intval.__isset.ts_start)
394 if(intval.__isset.ts_finish)
397 if(intval.__isset.flags)
400 if(!intval.values.empty())
403 if(intval.options & SpecIntervalOptions::type::UPDATING) {
404 if(intval.__isset.updating) {
408 uint8_t(intval.updating.op),
414 if(intval.updating.__isset.update_op)
415 set(intval.updating.update_op, update_op);
420 intval.updating.__isset.ts
426 dbcell.
value =
nullptr;
429 }
else if(intval.options & SpecIntervalOptions::type::DELETING) {
441 for(
const auto& fields : spec.fields) {
442 if(fields.__isset.spec_int64) {
447 fields.spec_int64.v));
449 if(fields.__isset.spec_double) {
454 fields.spec_double.v));
456 if(!fields.spec_bytes.v.empty()) {
461 fields.spec_bytes.v));
463 if(!fields.spec_key.v.empty()) {
467 dbfields.
add(std::move(field));
469 if(!fields.spec_li.v.empty()) {
472 field->items.resize(fields.spec_li.v.size());
474 for(
const auto&
data : fields.spec_li.v) {
475 auto& f = field->items[i];
480 dbfields.
add(std::move(field));
482 if(!fields.spec_lb.v.empty()) {
485 field->items.resize(fields.spec_lb.v.size());
487 for(
const auto&
data : fields.spec_lb.v) {
488 auto& f = field->items[i];
493 dbfields.
add(std::move(field));
502 for(
const auto& value : spec)
507 if(!intval.range_begin.empty())
510 if(!intval.range_end.empty())
513 if(!intval.offset_key.empty())
516 if(intval.__isset.offset_rev)
521 for(
const auto& key_intval : intval.key_intervals) {
522 if(!key_intval.start.empty())
524 if(!key_intval.finish.empty())
529 if(intval.__isset.ts_start)
532 if(intval.__isset.ts_finish)
535 if(intval.__isset.flags)
538 if(!intval.values.empty())
541 if(intval.options & SpecIntervalOptions::type::UPDATING) {
542 if(intval.__isset.updating) {
546 if(intval.updating.__isset.update_op)
547 set(intval.updating.update_op, update_op);
551 set(intval.updating.v_op, wfields);
553 set(intval.updating.v, wfields);
556 intval.updating.__isset.encoder
561 intval.updating.__isset.ts
568 }
else if(intval.options & SpecIntervalOptions::type::DELETING) {
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());
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)));
584 schema.__set_cell_versions(dbschema->cell_versions);
585 schema.__set_cell_ttl(dbschema->cell_ttl);
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);
592 schema.__set_cs_replication(dbschema->cs_replication);
593 schema.__set_cs_size(dbschema->cs_size);
594 schema.__set_cs_max(dbschema->cs_max);
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);
600 schema.__set_compact_percent(dbschema->compact_percent);
602 schema.__set_revision(dbschema->revision);
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());
612 if(schema.__isset.col_seq)
614 if(schema.__isset.col_type)
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;
622 if(schema.__isset.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;
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;
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;
643 if(schema.__isset.compact_percent)
644 dbschema->compact_percent = schema.compact_percent;
646 if(schema.__isset.revision)
647 dbschema->revision = schema.revision;
650 CellValueSerial&
get_fields(int32_t fid, CellValuesSerial& values) {
651 for(
auto& fields : values) {
652 if(fid == fields.field_id)
655 auto& fields = values.emplace_back();
656 fields.field_id = fid;
666 const uint8_t* ptr = v.
base;
667 size_t remain = v.
size;
675 fields.__set_v_int64(dbfield.
value);
681 fields.__set_v_double(dbfield.
value);
687 fields.__isset.v_bytes =
true;
694 fields.__isset.v_key =
true;
701 fields.__isset.v_li =
true;
708 fields.__isset.v_lb =
true;
728 #endif // swcdb_thrift_utils_Converter_h