OmniSciDB  c1a53651b2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
sqldefs.h
Go to the documentation of this file.
1 /*
2  * Copyright 2022 HEAVY.AI, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
23 #ifndef SQLDEFS_H
24 #define SQLDEFS_H
25 
26 // must not change the order without keeping the array in OperExpr::to_string
27 // in sync.
28 enum SQLOps {
29  kEQ = 0,
31  kNE,
32  kLT,
33  kGT,
34  kLE,
35  kGE,
37  kOR,
52  kIN,
56 };
57 
58 #define IS_COMPARISON(X) \
59  ((X) == kEQ || (X) == kBW_EQ || (X) == kOVERLAPS || (X) == kNE || (X) == kLT || \
60  (X) == kGT || (X) == kLE || (X) == kGE)
61 #define IS_LOGIC(X) ((X) == kAND || (X) == kOR)
62 #define IS_ARITHMETIC(X) \
63  ((X) == kMINUS || (X) == kPLUS || (X) == kMULTIPLY || (X) == kDIVIDE || (X) == kMODULO)
64 #define COMMUTE_COMPARISON(X) \
65  ((X) == kLT ? kGT : (X) == kLE ? kGE : (X) == kGT ? kLT : (X) == kGE ? kLE : (X))
66 #define IS_UNARY(X) \
67  ((X) == kNOT || (X) == kUMINUS || (X) == kISNULL || (X) == kEXISTS || (X) == kCAST || \
68  (X) == kENCODE_TEXT)
69 #define IS_EQUIVALENCE(X) ((X) == kEQ || (X) == kBW_EQ || (X) == kOVERLAPS)
70 
72 
73 enum SQLAgg {
87 };
88 
89 enum class SqlStringOpKind {
90  /* Unary */
91  LOWER = 1,
92  UPPER,
93  INITCAP,
94  REVERSE,
95  /* Binary */
96  REPEAT,
97  CONCAT,
98  RCONCAT,
99  /* Ternary */
100  LPAD,
101  RPAD,
102  TRIM,
103  LTRIM,
104  RTRIM,
105  SUBSTRING,
106  OVERLAY,
107  REPLACE,
108  SPLIT_PART,
109  /* 6 args */
112  JSON_VALUE,
115  TRY_STRING_CAST, // string-to-numeric
116  POSITION, // string-to-numeric
117  INVALID
118 };
119 
121  // set MIN's enum val as one, and we use window function kind's enum vals
122  // to classify a behavior of our runtime code for window framing
123  // i.e., aggregate_##value_type##_values functions
124  MIN = 1,
125  MAX,
126  AVG,
127  SUM,
128  COUNT,
129  ROW_NUMBER,
130  RANK,
131  DENSE_RANK,
132  PERCENT_RANK,
133  CUME_DIST,
134  NTILE,
135  LAG,
136  LAG_IN_FRAME,
137  LEAD,
139  FIRST_VALUE,
140  LAST_VALUE,
141  NTH_VALUE,
143  COUNT_IF,
144  SUM_IF,
145  SUM_INTERNAL, // For deserialization from Calcite only. Gets rewritten to a regular
146  // SUM.
147  INVALID
148 };
149 
153  CURRENT_ROW,
156  UNKNOWN
157 };
158 
160 
161 enum StorageOption { kDISK = 0, kGPU = 1, kCPU = 2 };
162 
163 enum ViewRefreshOption { kMANUAL = 0, kAUTO = 1, kIMMEDIATE = 2 };
164 
165 enum class JoinType {
166  INNER,
167  LEFT,
168  SEMI,
169  ANTI,
172  INVALID
173 };
174 
175 #if !(defined(__CUDACC__) || defined(NO_BOOST))
176 
177 #include <sstream>
178 #include <string>
179 #include "Logger/Logger.h"
180 
181 inline std::string toString(const JoinType& join_type) {
182  switch (join_type) {
183  case JoinType::INNER:
184  return "INNER";
185  case JoinType::LEFT:
186  return "LEFT";
187  case JoinType::SEMI:
188  return "SEMI";
189  case JoinType::ANTI:
190  return "ANTI";
192  return "WINDOW_FUNCTION";
194  return "WINDOW_FUNCTION_FRAMING";
195  default:
196  return "INVALID";
197  }
198 }
199 
200 inline std::string toString(const SQLQualifier& qualifier) {
201  switch (qualifier) {
202  case kONE:
203  return "ONE";
204  case kANY:
205  return "ANY";
206  case kALL:
207  return "ALL";
208  }
209  LOG(FATAL) << "Invalid SQLQualifier: " << qualifier;
210  return "";
211 }
212 
213 inline std::string toString(const SQLAgg& kind) {
214  switch (kind) {
215  case kAVG:
216  return "AVG";
217  case kMIN:
218  return "MIN";
219  case kMAX:
220  return "MAX";
221  case kSUM:
222  return "SUM";
223  case kCOUNT:
224  return "COUNT";
226  return "APPROX_COUNT_DISTINCT";
227  case kAPPROX_QUANTILE:
228  return "APPROX_PERCENTILE";
229  case kSAMPLE:
230  return "SAMPLE";
231  case kSINGLE_VALUE:
232  return "SINGLE_VALUE";
233  case kMODE:
234  return "MODE";
235  case kCOUNT_IF:
236  return "COUNT_IF";
237  case kSUM_IF:
238  return "SUM_IF";
239  case kINVALID_AGG:
240  return "INVALID";
241  default:
242  UNREACHABLE() << "Invalid aggregate kind: " << kind;
243  return {};
244  }
245 }
246 
248  switch (agg_type) {
249  case kCOUNT_IF:
250  return kCOUNT;
251  case kSUM_IF:
252  return kSUM;
253  default:
254  return agg_type;
255  }
256 }
257 
258 inline std::string toString(const SQLOps& op) {
259  switch (op) {
260  case kEQ:
261  return "EQ";
262  case kBW_EQ:
263  return "BW_EQ";
264  case kNE:
265  return "NE";
266  case kLT:
267  return "LT";
268  case kGT:
269  return "GT";
270  case kLE:
271  return "LE";
272  case kGE:
273  return "GE";
274  case kAND:
275  return "AND";
276  case kOR:
277  return "OR";
278  case kNOT:
279  return "NOT";
280  case kMINUS:
281  return "MINUS";
282  case kPLUS:
283  return "PLUS";
284  case kMULTIPLY:
285  return "MULTIPLY";
286  case kDIVIDE:
287  return "DIVIDE";
288  case kMODULO:
289  return "MODULO";
290  case kUMINUS:
291  return "UMINUS";
292  case kISNULL:
293  return "ISNULL";
294  case kISNOTNULL:
295  return "ISNOTNULL";
296  case kEXISTS:
297  return "EXISTS";
298  case kCAST:
299  return "CAST";
300  case kARRAY_AT:
301  return "ARRAY_AT";
302  case kUNNEST:
303  return "UNNEST";
304  case kFUNCTION:
305  return "FUNCTION";
306  case kIN:
307  return "IN";
308  case kOVERLAPS:
309  return "OVERLAPS";
310  case kENCODE_TEXT:
311  return "ENCODE_TEXT";
312  case kINVALID_OP:
313  return "INVALID_OP";
314  }
315  LOG(FATAL) << "Invalid operation kind: " << op;
316  return "";
317 }
318 
319 inline std::ostream& operator<<(std::ostream& os, const SqlStringOpKind kind) {
320  switch (kind) {
322  return os << "LOWER";
324  return os << "UPPER";
326  return os << "INITCAP";
328  return os << "REVERSE";
330  return os << "REPEAT";
332  return os << "CONCAT";
334  return os << "RCONCAT";
336  return os << "LPAD";
338  return os << "RPAD";
340  return os << "TRIM";
342  return os << "LTRIM";
344  return os << "RTRIM";
346  return os << "SUBSTRING";
348  return os << "OVERLAY";
350  return os << "REPLACE";
352  return os << "SPLIT_PART";
354  return os << "REGEXP_REPLACE";
356  return os << "REGEXP_SUBSTR";
358  return os << "JSON_VALUE";
360  return os << "BASE64_ENCODE";
362  return os << "BASE64_DECODE";
364  return os << "TRY_STRING_CAST";
366  return os << "POSITION";
368  return os << "INVALID";
369  }
370  LOG(FATAL) << "Invalid string operation";
371  // Make compiler happy
372  return os << "INVALID";
373 }
374 
375 inline SqlStringOpKind name_to_string_op_kind(const std::string& func_name) {
376  if (func_name == "LOWER") {
377  return SqlStringOpKind::LOWER;
378  }
379  if (func_name == "UPPER") {
380  return SqlStringOpKind::UPPER;
381  }
382  if (func_name == "INITCAP") {
384  }
385  if (func_name == "REVERSE") {
387  }
388  if (func_name == "REPEAT") {
390  }
391  if (func_name == "||") {
393  }
394  if (func_name == "LPAD") {
395  return SqlStringOpKind::LPAD;
396  }
397  if (func_name == "RPAD") {
398  return SqlStringOpKind::RPAD;
399  }
400  if (func_name == "TRIM") {
401  return SqlStringOpKind::TRIM;
402  }
403  if (func_name == "LTRIM") {
404  return SqlStringOpKind::LTRIM;
405  }
406  if (func_name == "RTRIM") {
407  return SqlStringOpKind::RTRIM;
408  }
409  if (func_name == "SUBSTRING") {
411  }
412  if (func_name == "OVERLAY") {
414  }
415  if (func_name == "REPLACE") {
417  }
418  if (func_name == "SPLIT_PART") {
420  }
421  if (func_name == "REGEXP_REPLACE") {
423  }
424  if (func_name == "REGEXP_SUBSTR") {
426  }
427  if (func_name == "REGEXP_MATCH") {
429  }
430  if (func_name == "JSON_VALUE") {
432  }
433  if (func_name == "BASE64_ENCODE") {
435  }
436  if (func_name == "BASE64_DECODE") {
438  }
439  if (func_name == "TRY_CAST") {
441  }
442  if (func_name == "POSITION") {
444  }
445  LOG(FATAL) << "Invalid string function " << func_name << ".";
447 }
448 
449 inline bool string_op_returns_string(const SqlStringOpKind kind) {
450  switch (kind) {
453  return false;
454  default:
455  return true;
456  }
457 }
458 
459 inline std::string toString(const SqlWindowFunctionKind& kind) {
460  switch (kind) {
462  return "ROW_NUMBER";
464  return "RANK";
466  return "DENSE_RANK";
468  return "PERCENT_RANK";
470  return "CUME_DIST";
472  return "NTILE";
474  return "LAG";
476  return "LEAD";
478  return "FIRST_VALUE";
480  return "LAST_VALUE";
482  return "NTH_VALUE";
484  return "NTH_VALUE_IN_FRAME";
486  return "AVG";
488  return "MIN";
490  return "MAX";
492  return "SUM";
494  return "COUNT";
496  return "SUM_INTERNAL";
498  return "LEAD_IN_FRAME";
500  return "LAG_IN_FRAME";
502  return "COUNT_IF";
504  return "SUM_IF";
506  return "INVALID";
507  }
508  LOG(FATAL) << "Invalid window function kind.";
509  return "";
510 }
511 
512 inline std::string toString(const SqlWindowFrameBoundType& kind) {
513  switch (kind) {
515  return "UNBOUNDED_PRECEDING";
517  return "EXPR_PRECEDING";
519  return "CURRENT_ROW";
521  return "EXPR_FOLLOWING";
523  return "UNBOUNDED_FOLLOWING";
525  return "UNKNOWN";
526  }
527  LOG(FATAL) << "Invalid window function bound type.";
528  return "";
529 }
530 
531 #endif // #if !(defined(__CUDACC__) || defined(NO_BOOST))
532 
533 #endif // SQLDEFS_H
Definition: sqldefs.h:71
SqlWindowFrameBoundType
Definition: sqldefs.h:150
SQLAgg
Definition: sqldefs.h:73
ViewRefreshOption
Definition: sqldefs.h:163
SqlStringOpKind name_to_string_op_kind(const std::string &func_name)
Definition: sqldefs.h:375
Definition: sqldefs.h:161
JoinType
Definition: sqldefs.h:165
SQLQualifier
Definition: sqldefs.h:71
#define LOG(tag)
Definition: Logger.h:285
std::ostream & operator<<(std::ostream &os, const SessionInfo &session_info)
Definition: SessionInfo.cpp:57
SQLOps
Definition: sqldefs.h:28
Definition: sqldefs.h:34
Definition: sqldefs.h:35
Definition: sqldefs.h:37
#define UNREACHABLE()
Definition: Logger.h:337
SqlStringOpKind
Definition: sqldefs.h:89
Definition: sqldefs.h:48
Definition: sqldefs.h:29
Definition: sqldefs.h:40
Definition: sqldefs.h:75
Definition: sqldefs.h:36
Definition: sqldefs.h:77
Definition: sqldefs.h:71
std::string toString(const ExecutorDeviceType &device_type)
StorageOption
Definition: sqldefs.h:161
SQLStmtType
Definition: sqldefs.h:159
Definition: sqldefs.h:33
Definition: sqldefs.h:39
bool string_op_returns_string(const SqlStringOpKind kind)
Definition: sqldefs.h:449
Definition: sqldefs.h:71
Definition: sqldefs.h:161
Definition: sqldefs.h:31
Definition: sqldefs.h:78
Definition: sqldefs.h:163
SqlWindowFunctionKind
Definition: sqldefs.h:120
Definition: sqldefs.h:52
Definition: sqldefs.h:30
Definition: sqldefs.h:32
Definition: sqldefs.h:76
Definition: sqldefs.h:74
Definition: sqldefs.h:38
Definition: sqldefs.h:83
SQLAgg get_non_conditional_agg_type(SQLAgg const agg_type)
Definition: sqldefs.h:247
Definition: sqldefs.h:161