SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
ColumnList.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_manager_Protocol_handlers_ColumnList_h
8 #define swcdb_manager_Protocol_handlers_ColumnList_h
9 
11 
12 namespace SWC { namespace Comm { namespace Protocol {
13 namespace Mngr { namespace Handler {
14 
15 
16 void column_list(const ConnHandlerPtr& conn, const Event::Ptr& ev) {
17 
18  int err = Error::OK;
19  DB::SchemasVec schemas;
20  try {
21  const uint8_t *ptr = ev->data.base;
22  size_t remain = ev->data.size;
23 
24  Params::ColumnListReq req_params;
25  req_params.decode(&ptr, &remain); // opt for list cid range
26 
27  if(Env::Mngr::mngd_columns()->is_schemas_mngr(err) && !err)
28  req_params.patterns.names.empty() &&
29  req_params.patterns.tags.comp == Condition::NONE
30  ? Env::Mngr::schemas()->all(schemas)
31  : Env::Mngr::schemas()->matching(req_params.patterns, schemas);
32  else if(!err)
34 
35  } catch(...) {
38  err = e.code();
39  }
40 
41  if(err) {
42  auto cbp = Buffers::make(ev, 4);
43  cbp->append_i32(err);
44  conn->send_response(cbp);
45 
46  } else if(schemas.size() <= 1000) {
48  rsp.schemas = std::move(schemas);
49  auto cbp = Buffers::make(ev, rsp, 4);
50  cbp->append_i32(err);
51  conn->send_response(cbp);
52 
53  } else {
54  size_t i = 0;
55  bool more;
56  do {
58  rsp.expected = schemas.size();
59  auto it = schemas.cbegin() + i;
60  more = (i += 1000) < rsp.expected;
61  rsp.schemas.assign(it, (more ? (it + 1000) : schemas.cend()));
62  auto cbp = Buffers::make(ev, rsp, 4);
63  if(more)
64  cbp->header.flags |= Comm::Header::FLAG_RESPONSE_PARTIAL_BIT;
65  cbp->append_i32(err);
66  if(cbp->expired() || !conn->send_response(cbp))
67  break;
68  } while(more);
69  }
70 
71 }
72 
73 
74 
75 }}}}}
76 
77 #endif // swcdb_manager_Protocol_handlers_ColumnList_h
SWC::Comm::Protocol::Mngr::Params::ColumnListReq
Definition: ColumnList.h:18
SWC::DB::Schemas::TagsPattern::comp
Condition::Comp comp
Definition: Schemas.h:87
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_LOG_OUT
#define SWC_LOG_OUT(pr, _code_)
Definition: Logger.h:178
SWC::Comm::Protocol::Mngr::Params::ColumnListReq::patterns
DB::Schemas::SelectorPatterns patterns
Definition: ColumnList.h:32
SWC::DB::Schemas::SelectorPatterns::names
NamePatterns names
Definition: Schemas.h:101
SWC::Comm::Header::FLAG_RESPONSE_PARTIAL_BIT
static const uint8_t FLAG_RESPONSE_PARTIAL_BIT
Definition: Header.h:29
SWC::Error::OK
@ OK
Definition: Error.h:45
SWC::Core::Vector::empty
constexpr SWC_CAN_INLINE bool empty() const noexcept
Definition: Vector.h:168
SWC::DB::Schemas::all
void all(SchemasVec &entries)
Definition: Schemas.cc:79
SWC_CURRENT_EXCEPTION
#define SWC_CURRENT_EXCEPTION(_msg_)
Definition: Exception.h:119
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Env::Mngr::mngd_columns
static SWC_CAN_INLINE Manager::MngdColumns * mngd_columns() noexcept
Definition: MngrEnv.h:74
SWC::LOG_ERROR
@ LOG_ERROR
Definition: Logger.h:32
SWC::Condition::NONE
@ NONE
Definition: Comparators.h:28
SWC::Comm::ConnHandlerPtr
std::shared_ptr< ConnHandler > ConnHandlerPtr
Definition: AppContext.h:17
SWC::Core::Vector::data
constexpr SWC_CAN_INLINE pointer data() noexcept
Definition: Vector.h:200
SWC::Core::Vector< Schema::Ptr >
SWC::DB::Schemas::SelectorPatterns::tags
TagsPattern tags
Definition: Schemas.h:102
SWC::Comm::Buffers::make
static SWC_CAN_INLINE Ptr make(uint32_t reserve=0)
Definition: Buffers.h:27
SWC::Env::Mngr::schemas
static SWC_CAN_INLINE Manager::Schemas * schemas() noexcept
Definition: MngrEnv.h:54
SWC::Core::Vector::cend
constexpr SWC_CAN_INLINE const_iterator cend() const noexcept
Definition: Vector.h:232
SWC::Comm::Protocol::Mngr::Handler::column_list
void column_list(const ConnHandlerPtr &conn, const Event::Ptr &ev)
Definition: ColumnList.h:16
ColumnList.h
SWC::Comm::Serializable::decode
void decode(const uint8_t **bufp, size_t *remainp)
Definition: Serializable.h:59
SWC::Comm::Event::Ptr
std::shared_ptr< Event > Ptr
Definition: Event.h:33
SWC::Error::MNGR_NOT_ACTIVE
@ MNGR_NOT_ACTIVE
Definition: Error.h:87
SWC::Core::Vector::assign
SWC_CAN_INLINE void assign(IteratorT first, IteratorT last)
Definition: Vector.h:452
SWC::Comm::Protocol::Mngr::Params::ColumnListRsp::expected
uint64_t expected
Definition: ColumnList.h:55
SWC::DB::Schemas::matching
void matching(const SelectorPatterns &patterns, SchemasVec &entries, bool no_sys=true)
Definition: Schemas.cc:94
SWC::Core::Vector::cbegin
constexpr SWC_CAN_INLINE const_iterator cbegin() const noexcept
Definition: Vector.h:216
SWC::Core::Vector::size
constexpr SWC_CAN_INLINE size_type size() const noexcept
Definition: Vector.h:189
SWC::Error::Exception
Definition: Exception.h:21
SWC::Comm::Protocol::Mngr::Params::ColumnListRsp
Definition: ColumnList.h:46
SWC::Comm::Protocol::Mngr::Params::ColumnListRsp::schemas
DB::SchemasVec schemas
Definition: ColumnList.h:56