SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
RangeQuerySelectUpdating_Serial.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_ranger_callbacks_RangeQuerySelectUpdating_Serial_h
7 #define swcdb_ranger_callbacks_RangeQuerySelectUpdating_Serial_h
8 
9 
11 
12 
13 namespace SWC { namespace Ranger { namespace Callback {
14 
15 
17  : public RangeQuerySelectUpdating {
18  public:
19 
20  typedef std::shared_ptr<RangeQuerySelectUpdating_Serial> Ptr;
21 
24  const Comm::Event::Ptr& ev,
25  DB::Specs::Interval&& req_spec,
26  const RangePtr& a_range)
28  conn,
29  ev,
30  std::move(req_spec),
31  a_range
32  ),
33  u_fields(
34  spec.updating->value,
35  spec.updating->vlen,
36  false
37  ),
39  only_keys = false;
42  }
43 
44  virtual ~RangeQuerySelectUpdating_Serial() noexcept { }
45 
46  void update_cell_value(DB::Cells::Cell& cell) override {
47  StaticBuffer v;
48  DB::Types::Encoder encoder = cell.get_value(v, false);
49  const uint8_t* ptr = v.base;
50  size_t remain = v.size;
51 
53  wfields.ensure(remain + spec.updating->vlen);
54 
55  while(remain) {
56  switch(DB::Cell::Serial::Value::read_type(&ptr, &remain)) {
58  DB::Cell::Serial::Value::Field_INT64 field(&ptr, &remain);
59  auto opfield = u_fields.find_matching_type_and_id(&field);
60  if(opfield) {
61  opfields_found.push_back(opfield);
62  if(opfield->ufield->is_delete_field())
63  break;
65  (opfield->ufield)->apply(opfield->field, field);
66  }
67  wfields.add(&field);
68  break;
69  }
71  DB::Cell::Serial::Value::Field_DOUBLE field(&ptr, &remain);
72  auto opfield = u_fields.find_matching_type_and_id(&field);
73  if(opfield) {
74  opfields_found.push_back(opfield);
75  if(opfield->ufield->is_delete_field())
76  break;
78  (opfield->ufield)->apply(opfield->field, field);
79  }
80  wfields.add(&field);
81  break;
82  }
84  DB::Cell::Serial::Value::Field_BYTES field(&ptr, &remain, false);
85  auto opfield = u_fields.find_matching_type_and_id(&field);
86  if(opfield) {
87  opfields_found.push_back(opfield);
88  if(opfield->ufield->is_delete_field())
89  break;
91  (opfield->ufield)->apply(opfield->field, field);
92  }
93  wfields.add(&field);
94  break;
95  }
97  DB::Cell::Serial::Value::Field_KEY field(&ptr, &remain, false);
98  auto opfield = u_fields.find_matching_type_and_id(&field);
99  if(opfield) {
100  opfields_found.push_back(opfield);
101  if(opfield->ufield->is_delete_field())
102  break;
103 
104  }
105  wfields.add(&field);
106  break;
107  }
109  DB::Cell::Serial::Value::Field_LIST_INT64 field(&ptr, &remain, false);
110  auto opfield = u_fields.find_matching_type_and_id(&field);
111  if(opfield) {
112  opfields_found.push_back(opfield);
113  if(opfield->ufield->is_delete_field())
114  break;
116  (opfield->ufield)->apply(opfield->field, field);
117  }
118  wfields.add(&field);
119  break;
120  }
122  DB::Cell::Serial::Value::Field_LIST_BYTES field(&ptr, &remain, false);
123  auto opfield = u_fields.find_matching_type_and_id(&field);
124  if(opfield) {
125  opfields_found.push_back(opfield);
126  if(opfield->ufield->is_delete_field())
127  break;
129  (opfield->ufield)->apply(opfield->field, field);
130  }
131  wfields.add(&field);
132  break;
133  }
134  default:
135  continue;
136  }
137  }
138 
140  for(auto opfield : opfields_missing) {
141  if(!opfield->ufield->is_no_add_field() &&
142  !opfield->ufield->is_delete_field())
143  wfields.add(opfield->field);
144  }
145 
147  encoder = spec.updating->encoder;
149  ? cell.set_value(wfields.base, wfields.fill(), true)
150  : cell.set_value(encoder, wfields.base, wfields.fill());
151 
154  }
155 
156  private:
160 
161 };
162 
163 
164 }}}
165 #endif // swcdb_ranger_callbacks_RangeQuerySelectUpdating_Serial_h
SWC::DB::Cells::Cell::set_value
SWC_CAN_INLINE void set_value(uint8_t *v, uint32_t len, bool owner)
Definition: Cell.h:223
SWC::DB::Cell::Serial::Value::FieldsUpdaterMap::get_not_in
void get_not_in(const FieldUpdateOpPtrs &opfields, FieldUpdateOpPtrs &not_in) const
Definition: CellValueSerialFields.h:285
SWC::Core::Vector::clear
SWC_CAN_INLINE void clear() noexcept(_NoExceptDestructor)
Definition: Vector.h:120
SWC::DB::Cell::Serial::Value::Field_KEY
Definition: CellValueSerialField.h:209
SWC::Core::Encoder::Type
Type
Definition: Encoder.h:28
SWC::Ranger::Callback::RangeQuerySelectUpdating_Serial::u_fields
const DB::Cell::Serial::Value::FieldsUpdaterMap u_fields
Definition: RangeQuerySelectUpdating_Serial.h:157
SWC::Core::BufferDyn::ensure
SWC_CAN_INLINE void ensure(size_t len)
Definition: Buffer.h:212
SWC::DB::Cell::Serial::Value::FieldsUpdaterMap::find_matching_type_and_id
FieldUpdateOP * find_matching_type_and_id(const Field *field) const noexcept
Definition: CellValueSerialFields.h:274
SWC::DB::Cell::Serial::Value::FieldUpdate_MATH
Definition: CellValueSerialFieldUpdate.h:131
SWC::DB::Cells::Cell
Definition: Cell.h:92
SWC::DB::Cell::Serial::Value::Field_LIST_BYTES
Definition: CellValueSerialField.h:323
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::Cell::Serial::Value::FieldUpdate_LIST
Definition: CellValueSerialFieldUpdate.h:243
SWC::DB::Cell::Serial::Value::DOUBLE
@ DOUBLE
Definition: CellValueSerialField.h:36
encoder
Core::Encoder::Type encoder
Buffer Encoder.
Definition: HeaderBufferInfo.h:50
SWC::DB::Cell::Serial::Value::BYTES
@ BYTES
Definition: CellValueSerialField.h:37
RangeQuerySelectUpdating.h
SWC::Ranger::RangePtr
std::shared_ptr< Range > RangePtr
Definition: Columns.h:15
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::Ranger::Callback::RangeQuerySelectUpdating_Serial::opfields_missing
DB::Cell::Serial::Value::FieldUpdateOpPtrs opfields_missing
Definition: RangeQuerySelectUpdating_Serial.h:159
SWC::Ranger::Callback::RangeQuerySelectUpdating_Serial::Ptr
std::shared_ptr< RangeQuerySelectUpdating_Serial > Ptr
Definition: RangeQuerySelectUpdating_Serial.h:20
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::FieldsUpdaterMap
Definition: CellValueSerialFields.h:196
SWC::DB::Cell::Serial::Value::INT64
@ INT64
Definition: CellValueSerialField.h:35
SWC::Core::Buffer
Definition: Buffer.h:18
SWC::Core::Buffer::size
size_t size
Definition: Buffer.h:130
SWC::DB::Cells::Cell::get_value
Types::Encoder get_value(StaticBuffer &v, bool owner) const
Definition: Cell.cc:77
SWC::Ranger::Callback::RangeQuerySelectUpdating_Serial::update_cell_value
void update_cell_value(DB::Cells::Cell &cell) override
Definition: RangeQuerySelectUpdating_Serial.h:46
SWC::DB::Cells::ReqScan::only_keys
bool only_keys
Definition: ReqScan.h:107
SWC::DB::Cell::Serial::Value::LIST_INT64
@ LIST_INT64
Definition: CellValueSerialField.h:39
SWC::Comm::ConnHandlerPtr
std::shared_ptr< ConnHandler > ConnHandlerPtr
Definition: AppContext.h:17
SWC::DB::Cell::Serial::Value::FieldsWriter
Definition: CellValueSerialFields.h:34
SWC::DB::Cell::Serial::Value::FieldsUpdaterMap::count
uint24_t count
Definition: CellValueSerialFields.h:199
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::Cell::Serial::Value::Field_LIST_INT64
Definition: CellValueSerialField.h:241
SWC::Core::Vector< const FieldUpdateOP * >
SWC::DB::Cells::ReqScan::spec
DB::Specs::Interval spec
Definition: ReqScan.h:106
SWC::DB::Cell::Serial::Value::Field_DOUBLE
Definition: CellValueSerialField.h:143
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::Interval
Definition: SpecsInterval.h:25
SWC::Ranger::Callback::RangeQuerySelectUpdating_Serial::opfields_found
DB::Cell::Serial::Value::FieldUpdateOpPtrs opfields_found
Definition: RangeQuerySelectUpdating_Serial.h:158
SWC::Ranger::Callback::RangeQuerySelectUpdating_Serial::RangeQuerySelectUpdating_Serial
SWC_CAN_INLINE RangeQuerySelectUpdating_Serial(const Comm::ConnHandlerPtr &conn, const Comm::Event::Ptr &ev, DB::Specs::Interval &&req_spec, const RangePtr &a_range)
Definition: RangeQuerySelectUpdating_Serial.h:23
SWC::DB::Cell::Serial::Value::Field_BYTES
Definition: CellValueSerialField.h:172
SWC::DB::Cell::Serial::Value::FieldUpdate_LIST_ITEMS
Definition: CellValueSerialFieldUpdate.h:551
SWC::Comm::Event::Ptr
std::shared_ptr< Event > Ptr
Definition: Event.h:33
SWC::DB::Cell::Serial::Value::LIST_BYTES
@ LIST_BYTES
Definition: CellValueSerialField.h:40
SWC::Ranger::Callback::RangeQuerySelectUpdating
Definition: RangeQuerySelectUpdating.h:16
SWC::Core::Vector::push_back
SWC_CAN_INLINE void push_back(ArgsT &&... args)
Definition: Vector.h:331
SWC::Ranger::Callback::RangeQuerySelectUpdating_Serial::~RangeQuerySelectUpdating_Serial
virtual ~RangeQuerySelectUpdating_Serial() noexcept
Definition: RangeQuerySelectUpdating_Serial.h:44
SWC::DB::Cell::Serial::Value::Field_INT64
Definition: CellValueSerialField.h:114
SWC::DB::Cell::Serial::Value::KEY
@ KEY
Definition: CellValueSerialField.h:38
SWC::Ranger::Callback::RangeQuerySelectUpdating_Serial
Definition: RangeQuerySelectUpdating_Serial.h:17
SWC::Core::Vector::reserve
SWC_CAN_INLINE void reserve(size_type cap)
Definition: Vector.h:288