SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Base.cc
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 
11 
12 
13 namespace SWC { namespace client { namespace Query { namespace Select {
14 namespace Handlers {
15 
16 
17 
19  const DB::Specs::Interval& intval) {
21  switch(executor) {
22  case Clients::DEFAULT:
24  shared_from_this(), key_seq, cid, intval);
25  case Clients::BROKER:
27  shared_from_this(), cid, intval);
28  default:
29  break;
30  }
31  SWC_THROWF(Error::INVALID_ARGUMENT, "Bad Executor=%d", int(executor));
32 }
33 
35  DB::Specs::Interval&& intval) {
37  switch(executor) {
38  case Clients::DEFAULT:
40  shared_from_this(), key_seq, cid, std::move(intval));
41  case Clients::BROKER:
43  shared_from_this(), cid, std::move(intval));
44  default:
45  break;
46  }
47  SWC_THROWF(Error::INVALID_ARGUMENT, "Bad Executor=%d", int(executor));
48 }
49 
50 void Base::default_executor(int& err, const DB::Specs::Scan& specs) {
51  auto hdlr = shared_from_this();
52  switch(executor) {
53 
54  case Clients::DEFAULT: {
55  DB::SchemasVec schemas(specs.columns.size());
56  auto it_seq = schemas.begin();
57  size_t count = 0;
58  for(auto& col : specs.columns) {
59  auto schema = clients->get_schema(err, col.cid);
60  if(err)
61  return;
62  *it_seq++ = schema;
63  count += col.size();
64  }
65  completion.increment(count);
66 
67  it_seq = schemas.begin();
68  for(auto& col : specs.columns) {
69  for(auto& intval : col) {
70  if(!intval->flags.max_buffer)
71  intval->flags.max_buffer = buff_sz;
72  if(!intval->values.empty())
73  intval->values.col_type = (*it_seq)->col_type;
75  hdlr, (*it_seq)->col_seq, col.cid, *intval.get());
76  }
77  ++it_seq;
78  }
79  return;
80  }
81 
82  case Clients::BROKER: {
83  size_t count = 0;
84  for(auto& col : specs.columns)
85  count += col.size();
86  completion.increment(count);
87 
88  for(auto& col : specs.columns) {
89  for(auto& intval : col) {
90  if(!intval->flags.max_buffer)
91  intval->flags.max_buffer = buff_sz;
93  hdlr, col.cid, *intval.get());
94  }
95  }
96  return;
97  }
98 
99  default:
100  break;
101  }
102  SWC_THROWF(Error::INVALID_ARGUMENT, "Bad Executor=%d", int(executor));
103 }
104 
105 void Base::default_executor(int& err, DB::Specs::Scan&& specs) {
106  auto hdlr = shared_from_this();
107  switch(executor) {
108 
109  case Clients::DEFAULT: {
110  DB::SchemasVec schemas(specs.columns.size());
111  auto it_seq = schemas.begin();
112  size_t count = 0;
113  for(auto& col : specs.columns) {
114  auto schema = clients->get_schema(err, col.cid);
115  if(err)
116  return;
117  *it_seq++ = schema;
118  count += col.size();
119  }
120  completion.increment(count);
121 
122  it_seq = schemas.begin();
123  for(auto& col : specs.columns) {
124  for(auto& intval : col) {
125  if(!intval->flags.max_buffer)
126  intval->flags.max_buffer = buff_sz;
127  if(!intval->values.empty())
128  intval->values.col_type = (*it_seq)->col_type;
130  hdlr, (*it_seq)->col_seq, col.cid, std::move(*intval.get()));
131  }
132  ++it_seq;
133  }
134  return;
135  }
136 
137  case Clients::BROKER: {
138  size_t count = 0;
139  for(auto& col : specs.columns)
140  count += col.size();
141  completion.increment(count);
142 
143  for(auto& col : specs.columns) {
144  for(auto& intval : col) {
145  if(!intval->flags.max_buffer)
146  intval->flags.max_buffer = buff_sz;
148  hdlr, col.cid, std::move(*intval.get()));
149  }
150  }
151  return;
152  }
153 
154  default:
155  break;
156  }
157  SWC_THROWF(Error::INVALID_ARGUMENT, "Bad Executor=%d", int(executor));
158 }
159 
160 
161 }}}}}
Base.h
SWC::DB::Specs::Scan
Definition: SpecsScan.h:21
SWC::client::Clients::DEFAULT
@ DEFAULT
Definition: Clients.h:61
SWC::client::Query::Select::Handlers::Base::buff_sz
Core::Atomic< uint32_t > buff_sz
Definition: Base.h:36
SWC::client::Query::Select::Handlers::Base::clients
Clients::Ptr clients
Definition: Base.h:30
SWC::DB::Types::KeySeq
KeySeq
Definition: KeySeq.h:13
Scanner.h
SWC::DB::Specs::Scan::columns
Columns columns
Definition: SpecsScan.h:101
SWC::client::Query::Select::Scanner::execute
static SWC_CAN_INLINE void execute(const Handlers::Base::Ptr &hdlr, DB::Types::KeySeq key_seq, cid_t cid, const DB::Specs::Interval &intval)
Definition: Scanner.h:29
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
BrokerScanner.h
SWC::client::Query::Select::Handlers::Base::completion
Core::CompletionCounter< uint64_t > completion
Definition: Base.h:33
SWC_THROWF
#define SWC_THROWF(_code_, _fmt_,...)
Definition: Exception.h:136
SWC::cid_t
uint64_t cid_t
Definition: Identifiers.h:16
SWC::Core::Vector< Schema::Ptr >
SWC::DB::Specs::Interval
Definition: SpecsInterval.h:25
SWC::client::Query::Select::Handlers::Base::executor
const Clients::Flag executor
Definition: Base.h:38
SWC::Core::CompletionCounter::increment
constexpr SWC_CAN_INLINE void increment(CountT v=1) noexcept
Definition: CompletionCounter.h:32
SWC::client::Clients::BROKER
@ BROKER
Definition: Clients.h:62
SWC::client::Query::Select::Handlers::Base::default_executor
void default_executor(DB::Types::KeySeq key_seq, cid_t cid, const DB::Specs::Interval &intval)
Definition: Base.cc:18
SWC::client::Query::Select::BrokerScanner::execute
static SWC_CAN_INLINE void execute(const Handlers::Base::Ptr &hdlr, cid_t cid, const DB::Specs::Interval &intval)
Definition: BrokerScanner.h:22
SWC::Error::INVALID_ARGUMENT
@ INVALID_ARGUMENT
Definition: Error.h:58
SWC::Core::Vector::size
constexpr SWC_CAN_INLINE size_type size() const noexcept
Definition: Vector.h:189
SWC::Core::Vector::begin
constexpr SWC_CAN_INLINE iterator begin() noexcept
Definition: Vector.h:211