SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
ColumnGet.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_broker_Protocol_handlers_ColumnGet_h
8 #define swcdb_broker_Protocol_handlers_ColumnGet_h
9 
10 
12 
13 
14 namespace SWC { namespace Comm { namespace Protocol {
15 namespace Bkr { namespace Handler {
16 
17 
18 struct ColumnGet {
19 
23 
25  ColumnGet(const ConnHandlerPtr& a_conn,
26  const Event::Ptr& a_ev,
28  : conn(a_conn), ev(a_ev), flag(a_flag) {
29  }
30 
31  ~ColumnGet() noexcept { }
32 
35  return Env::Clients::get();
36  }
37 
39  bool valid() {
40  return !ev->expired() && conn->is_open() && Env::Bkr::is_accepting();
41  }
42 
45  int err, const Mngr::Params::ColumnGetRsp& rsp) {
46  if(!ev->expired() && conn->is_open()) {
49  auto cbp = err
50  ? Buffers::make(ev, 4)
52  cbp->append_i32(err);
53  conn->send_response(cbp);
54  }
55  if(!err)
56  Env::Clients::get()->schemas.set(rsp.schema);
58  }
59 
60 };
61 
62 
65  const Mngr::Params::ColumnGetReq& params) {
66  switch(params.flag) {
67  case Mngr::Params::ColumnGetReq::Flag::SCHEMA_BY_ID:
68  return Env::Clients::get()->schemas.get(params.cid);
69  case Mngr::Params::ColumnGetReq::Flag::SCHEMA_BY_NAME:
70  case Mngr::Params::ColumnGetReq::Flag::ID_BY_NAME:
71  return Env::Clients::get()->schemas.get(params.name);
72  default:
74  return nullptr;
75  }
76 }
77 
78 
79 void column_get(const ConnHandlerPtr& conn, const Event::Ptr& ev) {
80  int err = Error::OK;
81  try {
82  const uint8_t *ptr = ev->data.base;
83  size_t remain = ev->data.size;
84 
86  params.decode(&ptr, &remain);
87 
88  auto schema = get_schema(err, params);
89  if(err)
90  goto _send_error;
91 
92  if(schema) {
93  auto cbp = Buffers::make(
94  ev, Mngr::Params::ColumnGetRsp(params.flag, schema), 4);
95  cbp->append_i32(Error::OK);
96  conn->send_response(cbp);
98 
99  } else {
100  auto flag = params.flag;
101  if(flag == Mngr::Params::ColumnGetReq::Flag::ID_BY_NAME)
102  params.flag = Mngr::Params::ColumnGetReq::Flag::SCHEMA_BY_NAME;
103 
105  params, ev->header.timeout_ms, conn, ev, flag);
106  }
107  return;
108 
109  } catch(...) {
112  err = e.code();
113  }
114 
115  _send_error:
116  auto cbp = Buffers::make(ev, 4);
117  cbp->append_i32(err);
118  conn->send_response(cbp);
120 }
121 
122 
123 
124 }}}}}
125 
126 #endif // swcdb_broker_Protocol_handlers_ColumnGet_h
SWC::Comm::Protocol::Mngr::Params::ColumnGetReq
Definition: ColumnGet.h:18
SWC::Error::Exception::code
constexpr SWC_CAN_INLINE int code() const noexcept
Definition: Exception.h:51
SWC_LOG_OSTREAM
#define SWC_LOG_OSTREAM
Definition: Logger.h:44
SWC::Comm::Protocol::Mngr::Params::ColumnGetReq::cid
cid_t cid
Definition: ColumnGet.h:45
SWC::Comm::Protocol::Bkr::Handler::ColumnGet::callback
SWC_CAN_INLINE void callback(const client::ConnQueue::ReqBase::Ptr &, int err, const Mngr::Params::ColumnGetRsp &rsp)
Definition: ColumnGet.h:44
SWC::Error::SERVER_SHUTTING_DOWN
@ SERVER_SHUTTING_DOWN
Definition: Error.h:84
SWC::Env::Clients::get
static SWC_CAN_INLINE client::Clients::Ptr & get() noexcept
Definition: Clients.h:299
SWC::DB::Schema::Ptr
std::shared_ptr< Schema > Ptr
Definition: Schema.h:185
SWC_LOG_OUT
#define SWC_LOG_OUT(pr, _code_)
Definition: Logger.h:178
SWC::Comm::Protocol::Mngr::Params::ColumnGetReq::Flag
Flag
Definition: ColumnGet.h:21
SWC::Comm::Protocol::Bkr::Handler::column_get
void column_get(const ConnHandlerPtr &conn, const Event::Ptr &ev)
Definition: ColumnGet.h:79
SWC::client::Clients::Ptr
ClientsPtr Ptr
Definition: Clients.h:58
SWC::Comm::Protocol::Bkr::Handler::ColumnGet::conn
ConnHandlerPtr conn
Definition: ColumnGet.h:20
SWC::Comm::Protocol::Mngr::Req::ColumnGet::request
static SWC_CAN_INLINE void request(const Params::ColumnGetReq &params, const uint32_t timeout, DataArgsT &&... args)
Definition: ColumnGet.h:36
SWC::Env::Bkr::is_accepting
static SWC_CAN_INLINE bool is_accepting() noexcept
Definition: BrokerEnv.h:37
SWC::Comm::Protocol::Bkr::Handler::ColumnGet::~ColumnGet
~ColumnGet() noexcept
Definition: ColumnGet.h:31
SWC::Error::OK
@ OK
Definition: Error.h:45
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::Comm::Protocol::Bkr::Handler::ColumnGet::ColumnGet
SWC_CAN_INLINE ColumnGet(const ConnHandlerPtr &a_conn, const Event::Ptr &a_ev, Mngr::Params::ColumnGetReq::Flag a_flag)
Definition: ColumnGet.h:25
SWC_CURRENT_EXCEPTION
#define SWC_CURRENT_EXCEPTION(_msg_)
Definition: Exception.h:119
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
ColumnGet.h
SWC::Comm::Protocol::Mngr::Params::ColumnGetReq::name
std::string name
Definition: ColumnGet.h:44
SWC::Comm::Protocol::Bkr::Handler::ColumnGet::ev
Event::Ptr ev
Definition: ColumnGet.h:21
SWC::Error::CLIENT_STOPPING
@ CLIENT_STOPPING
Definition: Error.h:127
SWC::LOG_ERROR
@ LOG_ERROR
Definition: Logger.h:32
SWC::Comm::ConnHandlerPtr
std::shared_ptr< ConnHandler > ConnHandlerPtr
Definition: AppContext.h:17
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(uint32_t reserve=0)
Definition: Buffers.h:27
SWC::Comm::Protocol::Mngr::Params::ColumnGetRsp
Definition: ColumnGet.h:59
SWC::Comm::Protocol::Bkr::Handler::ColumnGet
Definition: ColumnGet.h:18
SWC::Comm::Serializable::decode
void decode(const uint8_t **bufp, size_t *remainp)
Definition: Serializable.h:59
SWC::Comm::Protocol::Bkr::Handler::ColumnGet::flag
Mngr::Params::ColumnGetReq::Flag flag
Definition: ColumnGet.h:22
SWC::Comm::Event::Ptr
std::shared_ptr< Event > Ptr
Definition: Event.h:33
SWC::Error::COLUMN_UNKNOWN_GET_FLAG
@ COLUMN_UNKNOWN_GET_FLAG
Definition: Error.h:103
SWC::Comm::Protocol::Mngr::Params::ColumnGetRsp::schema
DB::Schema::Ptr schema
Definition: ColumnGet.h:74
SWC::Comm::client::ConnQueueReqBase::Ptr
std::shared_ptr< ConnQueueReqBase > Ptr
Definition: ClientConnQueue.h:25
SWC::Comm::Protocol::Bkr::Handler::get_schema
SWC_CAN_INLINE DB::Schema::Ptr get_schema(int &err, const Mngr::Params::ColumnGetReq &params)
Definition: ColumnGet.h:64
SWC::Comm::Protocol::Bkr::Handler::ColumnGet::get_clients
SWC_CAN_INLINE SWC::client::Clients::Ptr & get_clients() noexcept
Definition: ColumnGet.h:34
SWC::Env::Bkr::processed
static SWC_CAN_INLINE void processed() noexcept
Definition: BrokerEnv.h:55
SWC::Error::Exception
Definition: Exception.h:21
SWC::Comm::Protocol::Mngr::Params::ColumnGetReq::flag
Flag flag
Definition: ColumnGet.h:43
SWC::Comm::Protocol::Bkr::Handler::ColumnGet::valid
SWC_CAN_INLINE bool valid()
Definition: ColumnGet.h:39