SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
SQL.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 
8 
9 
10 namespace SWC { namespace client { namespace SQL {
11 
12 
13 
14 Cmd recognize_cmd(int& err, const std::string& sql, std::string& message) {
15  std::string cmd;
16  int words = 1;
17  bool word = true;
18  for(auto chr : sql) {
19  if(isspace(chr)) {
20  if(word) {
21  if(words == 2)
22  break;
23  if(!cmd.empty()) {
24  ++words;
25  cmd.append(" ");
26  }
27  word = false;
28  }
29  } else {
30  word = true;
31  cmd += std::tolower(chr);
32  }
33  }
34 
35  if(cmd.empty())
36  return Cmd::UNKNOWN;
37 
38  if(Condition::str_eq(cmd.data(), "add", 3) ||
39  Condition::str_eq(cmd.data(), "create", 6)) {
40  return Cmd::CREATE_COLUMN;
41  }
42  if(Condition::str_eq(cmd.data(), "modify", 6) ||
43  Condition::str_eq(cmd.data(), "change", 6) ||
44  Condition::str_eq(cmd.data(), "update column", 13) ||
45  Condition::str_eq(cmd.data(), "update schema", 13)) {
46  return Cmd::MODIFY_COLUMN;
47  }
48  if(Condition::str_eq(cmd.data(), "delete", 6) ||
49  Condition::str_eq(cmd.data(), "remove", 6)) {
50  return Cmd::REMOVE_COLUMN;
51  }
52  if(Condition::str_eq(cmd.data(), "get", 3) ||
53  Condition::str_eq(cmd.data(), "list", 4)) {
54  return Cmd::GET_COLUMNS;
55  }
56  if(Condition::str_eq(cmd.data(), "compact", 7)) {
57  return Cmd::COMPACT_COLUMNS;
58  }
59  if(Condition::str_eq(cmd.data(), "select", 6)) {
60  return Cmd::SELECT;
61  }
62  if(Condition::str_eq(cmd.data(), "update", 6)) {
63  return Cmd::UPDATE;
64  }
65 
67  message.append("Unrecognized Command begin with '");
68  message.append(cmd);
69  message += "'";
70  return Cmd::UNKNOWN;
71 }
72 
73 void parse_select(int& err, const Clients::Ptr& clients,
74  const std::string& sql,
75  DB::Specs::Scan& specs,
76  uint8_t& display_flags, std::string& message) {
77  QuerySelect parser(clients, sql, specs, message);
78  err = parser.parse_select();
79  if(!err)
80  parser.parse_display_flags(display_flags);
81 }
82 
83 void parse_update(int& err, const std::string& sql,
85  uint8_t& display_flags, std::string& message) {
86  QueryUpdate parser(sql, hdlr, message);
87  err = parser.parse_update();
88  if(!err)
89  parser.parse_display_flags(display_flags);
90 }
91 
92 void parse_list_columns(int& err, const Clients::Ptr& clients,
93  const std::string& sql,
94  DB::SchemasVec& schemas,
95  std::string& message, const char* expect_cmd) {
96  ColumnList parser(clients, sql, schemas, message);
97  err = parser.parse_list_columns(expect_cmd);
98 }
99 
100 void parse_list_columns(int& err, const Clients::Ptr& clients,
101  const std::string& sql,
102  DB::SchemasVec& schemas,
104  std::string& message, const char* expect_cmd) {
105  ColumnList parser(clients, sql, schemas, message);
106  err = parser.parse_list_columns(expect_cmd);
107  if(!parser.patterns.names.empty() ||
108  parser.patterns.tags.comp != Condition::NONE)
109  params.patterns = std::move(parser.patterns);
110 }
111 
112 void parse_list_columns(int& err, const Clients::Ptr& clients,
113  const std::string& sql,
114  DB::SchemasVec& schemas,
116  uint8_t& output_flags,
117  std::string& message, const char* expect_cmd) {
118  ColumnList parser(clients, sql, schemas, message);
119  err = parser.parse_list_columns(expect_cmd, output_flags);
120  if(!parser.patterns.names.empty() ||
121  parser.patterns.tags.comp != Condition::NONE)
122  params.patterns = std::move(parser.patterns);
123 }
124 
125 
127  int& err, const std::string& sql,
129  DB::Schema::Ptr& schema, std::string& message) {
130  ColumnSchema parser(sql, schema, message);
131  err = parser.parse(func);
132 }
133 
135  int& err, const std::string& sql,
137  DB::Schema::Ptr& schema, std::string& message) {
138  ColumnSchema parser(sql, schema, message);
139  err = parser.parse(func);
140 }
141 
142 void parse_dump(int& err, const Clients::Ptr& clients,
143  const std::string& sql,
144  std::string& fs, std::string& filepath,
145  uint64_t& split_size, std::string& ext, int& level,
146  DB::Specs::Scan& specs,
147  uint8_t& output_flags, uint8_t& display_flags,
148  std::string& message) {
149  QuerySelect parser(clients, sql, specs, message);
150  err = parser.parse_dump(fs, filepath, split_size, ext, level);
151  if(!err)
152  parser.parse_output_flags(output_flags);
153  if(!err)
154  parser.parse_display_flags(display_flags);
155 }
156 
157 void parse_load(int& err,
158  const std::string& sql,
160  std::string& fs, std::string& filepath, cid_t& cid,
161  uint8_t& display_flags, std::string& message) {
162  QueryUpdate parser(sql, hdlr, message);
163  err = parser.parse_load(fs, filepath, cid);
164  if(!err)
165  parser.parse_display_flags(display_flags);
166 }
167 
168 
169 
170 
171 }}} // SWC::client:SQL namespace
SWC::client::SQL::MODIFY_COLUMN
@ MODIFY_COLUMN
Definition: SQL.h:36
SWC::Error::SQL_PARSE_ERROR
@ SQL_PARSE_ERROR
Definition: Error.h:122
SWC::Comm::Protocol::Mngr::Params::ColumnListReq
Definition: ColumnList.h:18
SWC::DB::Schemas::TagsPattern::comp
Condition::Comp comp
Definition: Schemas.h:87
SWC::DB::Specs::Scan
Definition: SpecsScan.h:21
SWC::client::SQL::ColumnList::parse_list_columns
int parse_list_columns(const char *expect_cmd, uint8_t &output_flags)
Definition: ColumnList.cc:22
SWC::client::SQL::REMOVE_COLUMN
@ REMOVE_COLUMN
Definition: SQL.h:37
SWC::DB::Schema::Ptr
std::shared_ptr< Schema > Ptr
Definition: Schema.h:185
SWC::client::SQL::UPDATE
@ UPDATE
Definition: SQL.h:41
SWC::client::SQL::QuerySelect
Definition: QuerySelect.h:15
SWC::Comm::Protocol::Mngr::Params::ColumnListReq::patterns
DB::Schemas::SelectorPatterns patterns
Definition: ColumnList.h:32
SWC::client::Clients::Ptr
ClientsPtr Ptr
Definition: Clients.h:58
SWC::client::SQL::ColumnList::patterns
DB::Schemas::SelectorPatterns patterns
Definition: ColumnList.h:26
SWC::client::SQL::recognize_cmd
Cmd recognize_cmd(int &err, const std::string &sql, std::string &message)
Definition: SQL.cc:14
SWC::DB::Schemas::SelectorPatterns::names
NamePatterns names
Definition: Schemas.h:101
SWC::client::SQL::QueryUpdate
Definition: QueryUpdate.h:17
SWC::Condition::str_eq
bool str_eq(const char *s1, const char *s2) noexcept SWC_ATTRIBS((SWC_ATTRIB_O3))
Definition: Comparators_basic.h:237
SWC::client::SQL::GET_COLUMNS
@ GET_COLUMNS
Definition: SQL.h:38
SWC::Core::Vector::empty
constexpr SWC_CAN_INLINE bool empty() const noexcept
Definition: Vector.h:168
SWC::DB::Cell::Serial::Value::UNKNOWN
@ UNKNOWN
Definition: CellValueSerialField.h:34
SWC::client::SQL::SELECT
@ SELECT
Definition: SQL.h:40
SWC::client::SQL::parse_select
void parse_select(int &err, const Clients::Ptr &clients, const std::string &sql, DB::Specs::Scan &specs, uint8_t &display_flags, std::string &message)
Definition: SQL.cc:73
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::client::SQL::COMPACT_COLUMNS
@ COMPACT_COLUMNS
Definition: SQL.h:39
SWC::client::SQL::parse_load
void parse_load(int &err, const std::string &sql, const Query::Update::Handlers::BaseUnorderedMap::Ptr &hdlr, std::string &fs, std::string &filepath, cid_t &cid, uint8_t &display_flags, std::string &message)
Definition: SQL.cc:157
SWC::client::SQL::QuerySelect::parse_display_flags
void parse_display_flags(uint8_t &display_flags)
Definition: QuerySelect.cc:251
SWC::client::SQL::ColumnSchema
Definition: ColumnSchema.h:16
SWC::Comm::Protocol::Mngr::Params::ColumnMng::Function
Function
Definition: ColumnMng.h:21
SWC::Condition::NONE
@ NONE
Definition: Comparators.h:28
SWC::client::SQL::QueryUpdate::parse_update
int parse_update()
Definition: QueryUpdate.cc:30
SWC::cid_t
uint64_t cid_t
Definition: Identifiers.h:16
SWC::client::SQL::ColumnSchema::parse
int parse(Func *func)
Definition: ColumnSchema.cc:21
SWC::Core::Vector
Definition: Vector.h:14
SWC::DB::Schemas::SelectorPatterns::tags
TagsPattern tags
Definition: Schemas.h:102
SWC::client::SQL::parse_column_schema
void parse_column_schema(int &err, const std::string &sql, Comm::Protocol::Mngr::Params::ColumnMng::Function func, DB::Schema::Ptr &schema, std::string &message)
Definition: SQL.cc:126
SWC::client::SQL::QueryUpdate::parse_load
int parse_load(std::string &fs, std::string &filepath, cid_t &cid)
Definition: QueryUpdate.cc:46
SWC::client::SQL::parse_update
void parse_update(int &err, const std::string &sql, const Query::Update::Handlers::BaseUnorderedMap::Ptr &hdlr, uint8_t &display_flags, std::string &message)
Definition: SQL.cc:83
SWC::Common::Files::Schema::filepath
std::string filepath(cid_t cid)
Definition: Schema.h:34
SWC::client::SQL::QuerySelect::parse_select
int parse_select()
Definition: QuerySelect.cc:69
SWC::client::SQL::CREATE_COLUMN
@ CREATE_COLUMN
Definition: SQL.h:35
SQL.h
SWC::client::SQL::Cmd
Cmd
Definition: SQL.h:33
SWC::client::SQL::QueryUpdate::parse_display_flags
void parse_display_flags(uint8_t &display_flags)
Definition: QueryUpdate.cc:114
SWC::client::SQL::QuerySelect::parse_dump
int parse_dump(std::string &fs, std::string &filepath, uint64_t &split_size, std::string &ext, int &level)
Definition: QuerySelect.cc:105
SWC::client::SQL::parse_dump
void parse_dump(int &err, const Clients::Ptr &clients, const std::string &sql, std::string &fs, std::string &filepath, uint64_t &split_size, std::string &ext, int &level, DB::Specs::Scan &specs, uint8_t &output_flags, uint8_t &display_flags, std::string &message)
Definition: SQL.cc:142
SWC::client::SQL::parse_list_columns
void parse_list_columns(int &err, const Clients::Ptr &clients, const std::string &sql, DB::SchemasVec &schemas, std::string &message, const char *expect_cmd)
Definition: SQL.cc:92
SWC::client::Query::Update::Handlers::BaseUnorderedMap::Ptr
std::shared_ptr< BaseUnorderedMap > Ptr
Definition: BaseUnorderedMap.h:22
SWC::client::SQL::ColumnList
Definition: ColumnList.h:22
SWC::client::SQL::QuerySelect::parse_output_flags
void parse_output_flags(uint8_t &output_flags)
Definition: QuerySelect.cc:230