SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
RangeQuerySelect.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_ranger_Protocol_handlers_RangeQuerySelect_h
8 #define swcdb_ranger_Protocol_handlers_RangeQuerySelect_h
9 
19 
20 
21 namespace SWC { namespace Comm { namespace Protocol {
22 namespace Rgr { namespace Handler {
23 
24 
28 
31  const Comm::Event::Ptr& a_ev) noexcept
32  : conn(a_conn), ev(a_ev) {
33  }
34 
37  : conn(std::move(other.conn)),
38  ev(std::move(other.ev)) {
39  }
40 
44 
45  ~RangeQuerySelect() noexcept { }
46 
47  void operator()() {
48  if(ev->expired())
49  return;
50 
51  int err = Error::OK;
53  Ranger::RangePtr range;
54 
55  try {
56  const uint8_t *ptr = ev->data.base;
57  size_t remain = ev->data.size;
58  params.decode(&ptr, &remain);
59 
60  range = Env::Rgr::columns()->get_range(err, params.cid, params.rid);
61 
62  if(!err) {
63  if(!range || !range->is_loaded()) {
65 
66  } else if(range->cfg->range_type == DB::Types::Range::DATA &&
70  }
71  }
72 
73  } catch(...) {
76  SWC_LOG_OSTREAM << e;
77  ev->print(SWC_LOG_OSTREAM << "\n\t");
78  );
79  err = e.code();
80  }
81 
82  if(err) {
84  conn->send_response(Buffers::make(ev, rsp));
85 
86  } else if(params.interval.has_opt__updating()) {
87  uint8_t op = params.interval.updating->operation.get_op();
88  if(range->cfg->col_type == DB::Types::Column::SERIAL) {
89  if(params.interval.updating->operation.has_pos())
91  } else if(DB::Types::is_counter(range->cfg->col_type) ||
94  }
95 
96  switch(op) {
100  conn, ev, std::move(params.interval), range)
101  ));
102  break;
103  }
107  conn, ev, std::move(params.interval), range)
108  ));
109  break;
110  }
114  conn, ev, std::move(params.interval), range)
115  ));
116  break;
117  }
121  conn, ev, std::move(params.interval), range)
122  ));
123  break;
124  }
128  conn, ev, std::move(params.interval), range)
129  ));
130  break;
131  }
135  conn, ev, std::move(params.interval), range)
136  ));
137  break;
138  }
139  default: {
141  conn->send_response(Buffers::make(ev, rsp));
142  break;
143  }
144  }
145 
146  } else if(params.interval.has_opt__deleting()) {
149  conn, ev, std::move(params.interval), range)
150  ));
151 
152  } else {
155  conn, ev, std::move(params.interval), range)
156  ));
157  }
158 
159  }
160 
161 };
162 
163 
164 }}}}}
165 
166 #endif // swcdb_ranger_Protocol_handlers_RangeQuerySelect_h
SWC::Env::Rgr::res
static SWC_CAN_INLINE System::Resources & res() noexcept
Definition: RangerEnv.h:131
SWC::Error::RGR_NOT_LOADED_RANGE
@ RGR_NOT_LOADED_RANGE
Definition: Error.h:91
SWC::Error::Exception::code
constexpr SWC_CAN_INLINE int code() const noexcept
Definition: Exception.h:51
SWC::Ranger::Columns::get_range
RangePtr get_range(int &err, const cid_t cid, const rid_t rid)
Definition: Columns.cc:21
SWC_LOG_OSTREAM
#define SWC_LOG_OSTREAM
Definition: Logger.h:44
SWC::Comm::Protocol::Rgr::Handler::RangeQuerySelect
Definition: RangeQuerySelect.h:25
SWC::Ranger::Callback::RangeQuerySelectUpdating_Overwrite::Ptr
std::shared_ptr< RangeQuerySelectUpdating_Overwrite > Ptr
Definition: RangeQuerySelectUpdating_Overwrite.h:20
SWC::Comm::Protocol::Rgr::Handler::RangeQuerySelect::conn
Comm::ConnHandlerPtr conn
Definition: RangeQuerySelect.h:26
SWC::Ranger::Callback::RangeQuerySelectUpdating_Prepend
Definition: RangeQuerySelectUpdating_Prepend.h:17
SWC_LOG_OUT
#define SWC_LOG_OUT(pr, _code_)
Definition: Logger.h:178
SWC::Comm::Protocol::Rgr::Handler::RangeQuerySelect::operator=
RangeQuerySelect & operator=(const RangeQuerySelect &)=delete
SWC::DB::Specs::UpdateOP::REPLACE
static constexpr const uint8_t REPLACE
Definition: SpecsUpdateOp.h:20
SWC::Comm::Protocol::Rgr::Params::RangeQuerySelectReq::interval
DB::Specs::Interval interval
Definition: RangeQuerySelect.h:37
SWC::DB::Specs::Interval::has_opt__deleting
constexpr SWC_CAN_INLINE bool has_opt__deleting() const noexcept
Definition: SpecsInterval.h:183
RangeQuerySelectUpdating_Overwrite.h
SWC::Env::Rgr::columns
static SWC_CAN_INLINE Ranger::Columns * columns() noexcept
Definition: RangerEnv.h:144
SWC::DB::Specs::UpdateOP::INSERT
static constexpr const uint8_t INSERT
Definition: SpecsUpdateOp.h:23
SWC::DB::Specs::UpdateOP::SERIAL
static constexpr const uint8_t SERIAL
Definition: SpecsUpdateOp.h:26
SWC::Ranger::Callback::RangeQuerySelect::Ptr
std::shared_ptr< RangeQuerySelect > Ptr
Definition: RangeQuerySelect.h:17
SWC::Comm::Protocol::Rgr::Handler::RangeQuerySelect::~RangeQuerySelect
~RangeQuerySelect() noexcept
Definition: RangeQuerySelect.h:45
RangeQuerySelect.h
SWC::Comm::Protocol::Rgr::Handler::RangeQuerySelect::ev
Comm::Event::Ptr ev
Definition: RangeQuerySelect.h:27
RangeQuerySelect.h
SWC::Comm::Protocol::Rgr::Handler::RangeQuerySelect::RangeQuerySelect
SWC_CAN_INLINE RangeQuerySelect(RangeQuerySelect &&other) noexcept
Definition: RangeQuerySelect.h:36
SWC::Comm::Protocol::Rgr::Handler::RangeQuerySelect::RangeQuerySelect
RangeQuerySelect(const RangeQuerySelect &)=delete
SWC::Ranger::Callback::RangeQuerySelectDeleting::Ptr
std::shared_ptr< RangeQuerySelectDeleting > Ptr
Definition: RangeQuerySelectDeleting.h:19
RangeQuerySelectUpdating_Insert.h
SWC::Error::OK
@ OK
Definition: Error.h:45
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::Ptr
std::shared_ptr< RangeQuerySelectUpdating_Serial > Ptr
Definition: RangeQuerySelectUpdating_Serial.h:20
SWC_CURRENT_EXCEPTION
#define SWC_CURRENT_EXCEPTION(_msg_)
Definition: Exception.h:119
SWC::Ranger::Callback::RangeQuerySelectDeleting
Definition: RangeQuerySelectDeleting.h:16
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Comm::Protocol::Rgr::Params::RangeQuerySelectReq::rid
rid_t rid
Definition: RangeQuerySelect.h:36
SWC::Error::SERVER_MEMORY_LOW
@ SERVER_MEMORY_LOW
Definition: Error.h:85
SWC::DB::Types::is_counter
bool SWC_CONST_FUNC is_counter(const Column typ) noexcept
Definition: Column.cc:26
SWC::Ranger::Callback::RangeQuerySelect
Definition: RangeQuerySelect.h:14
SWC::Comm::Protocol::Rgr::Params::RangeQuerySelectReq::cid
cid_t cid
Definition: RangeQuerySelect.h:35
SWC::DB::Specs::UpdateOP::OVERWRITE
static constexpr const uint8_t OVERWRITE
Definition: SpecsUpdateOp.h:24
RangeQuerySelectUpdating_Prepend.h
SWC::Ranger::Callback::RangeQuerySelectUpdating_Prepend::Ptr
std::shared_ptr< RangeQuerySelectUpdating_Prepend > Ptr
Definition: RangeQuerySelectUpdating_Prepend.h:20
SWC::DB::Types::Range::MASTER
@ MASTER
SWC::Ranger::Callback::RangeQuerySelectUpdating_Append::Ptr
std::shared_ptr< RangeQuerySelectUpdating_Append > Ptr
Definition: RangeQuerySelectUpdating_Append.h:20
RangeQuerySelectUpdating_Serial.h
SWC::Ranger::Callback::RangeQuerySelectUpdating_Overwrite
Definition: RangeQuerySelectUpdating_Overwrite.h:17
SWC::LOG_ERROR
@ LOG_ERROR
Definition: Logger.h:32
SWC::Comm::ConnHandlerPtr
std::shared_ptr< ConnHandler > ConnHandlerPtr
Definition: AppContext.h:17
SWC::Ranger::Callback::RangeQuerySelectUpdating_Insert
Definition: RangeQuerySelectUpdating_Insert.h:17
SWC::Comm::Protocol::Rgr::Handler::RangeQuerySelect::RangeQuerySelect
SWC_CAN_INLINE RangeQuerySelect(const Comm::ConnHandlerPtr &a_conn, const Comm::Event::Ptr &a_ev) noexcept
Definition: RangeQuerySelect.h:30
SWC::DB::Specs::UpdateOP::APPEND
static constexpr const uint8_t APPEND
Definition: SpecsUpdateOp.h:21
SWC::DB::Specs::Interval::updating
IntervalUpdate::Ptr updating
Definition: SpecsInterval.h:249
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(uint32_t reserve=0)
Definition: Buffers.h:27
SWC::System::Resources::is_low_mem_state
SWC_CAN_INLINE bool is_low_mem_state() const noexcept
Definition: Resources.h:84
SWC::Comm::Protocol::Rgr::Params::RangeQuerySelectReq
Definition: RangeQuerySelect.h:18
SWC::Ranger::Callback::RangeQuerySelectUpdating::Ptr
std::shared_ptr< RangeQuerySelectUpdating > Ptr
Definition: RangeQuerySelectUpdating.h:19
SWC::Comm::Protocol::Rgr::Handler::RangeQuerySelect::operator()
void operator()()
Definition: RangeQuerySelect.h:47
SWC::DB::Specs::Interval::has_opt__updating
constexpr SWC_CAN_INLINE bool has_opt__updating() const noexcept
Definition: SpecsInterval.h:178
SWC::Comm::Protocol::Rgr::Handler::RangeQuerySelect::operator=
RangeQuerySelect & operator=(RangeQuerySelect &&)=delete
SWC::Comm::Serializable::decode
void decode(const uint8_t **bufp, size_t *remainp)
Definition: Serializable.h:59
RangeQuerySelectDeleting.h
SWC::DB::Specs::UpdateOP::PREPEND
static constexpr const uint8_t PREPEND
Definition: SpecsUpdateOp.h:22
SWC::Env::Rgr::scan_reserved_bytes
static SWC_CAN_INLINE size_t scan_reserved_bytes() noexcept
Definition: RangerEnv.h:83
SWC::Comm::Event::Ptr
std::shared_ptr< Event > Ptr
Definition: Event.h:33
SWC::Ranger::Callback::RangeQuerySelectUpdating_Insert::Ptr
std::shared_ptr< RangeQuerySelectUpdating_Insert > Ptr
Definition: RangeQuerySelectUpdating_Insert.h:20
SWC::Comm::Protocol::Rgr::Params::RangeQuerySelectRsp
Definition: RangeQuerySelect.h:81
SWC::Ranger::Callback::RangeQuerySelectUpdating
Definition: RangeQuerySelectUpdating.h:16
SWC::DB::Types::Column::SERIAL
@ SERIAL
SWC::Error::INVALID_ARGUMENT
@ INVALID_ARGUMENT
Definition: Error.h:58
SWC::Ranger::Callback::RangeQuerySelectUpdating_Append
Definition: RangeQuerySelectUpdating_Append.h:17
SWC::Error::Exception
Definition: Exception.h:21
SWC::Ranger::Callback::RangeQuerySelectUpdating_Serial
Definition: RangeQuerySelectUpdating_Serial.h:17
RangeQuerySelectUpdating_Append.h