OmniSciDB  1dac507f6e
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CalciteDeserializerUtils.cpp File Reference
#include "CalciteDeserializerUtils.h"
#include "../Analyzer/Analyzer.h"
#include "Shared/Logger.h"
#include <boost/algorithm/string.hpp>
+ Include dependency graph for CalciteDeserializerUtils.cpp:

Go to the source code of this file.

Functions

SQLTypeInfo get_agg_type (const SQLAgg agg_kind, const Analyzer::Expr *arg_expr)
 
ExtractField to_datepart_field (const std::string &field)
 
DateaddField to_dateadd_field (const std::string &field)
 
DatetruncField to_datediff_field (const std::string &field)
 
std::shared_ptr
< Analyzer::Constant
make_fp_constant (const int64_t val, const SQLTypeInfo &ti)
 

Variables

bool g_bigint_count
 

Function Documentation

SQLTypeInfo get_agg_type ( const SQLAgg  agg_kind,
const Analyzer::Expr arg_expr 
)

Definition at line 26 of file CalciteDeserializerUtils.cpp.

References CHECK(), g_bigint_count, Analyzer::Expr::get_type_info(), SQLTypeInfoCore< TYPE_FACET_PACK >::is_integer(), kAPPROX_COUNT_DISTINCT, kAVG, kBIGINT, kCOUNT, kDOUBLE, kINT, kMAX, kMIN, kSAMPLE, and kSUM.

Referenced by anonymous_namespace{RelAlgExecutor.cpp}::decide_approx_count_distinct_implementation(), anonymous_namespace{CalciteAdapter.cpp}::CalciteAdapter::translateAggregate(), and RelAlgTranslator::translateAggregateRex().

26  {
27  switch (agg_kind) {
28  case kCOUNT:
29  return SQLTypeInfo(g_bigint_count ? kBIGINT : kINT, false);
30  case kMIN:
31  case kMAX:
32  return arg_expr->get_type_info();
33  case kSUM:
34  return arg_expr->get_type_info().is_integer() ? SQLTypeInfo(kBIGINT, false)
35  : arg_expr->get_type_info();
36  case kAVG:
37  return SQLTypeInfo(kDOUBLE, false);
39  return SQLTypeInfo(kBIGINT, false);
40  case kSAMPLE:
41  return arg_expr->get_type_info();
42  default:
43  CHECK(false);
44  }
45  CHECK(false);
46  return SQLTypeInfo();
47 }
Definition: sqldefs.h:71
CHECK(cgen_state)
bool g_bigint_count
Definition: sqldefs.h:71
SQLTypeInfoCore< ArrayContextTypeSizer, ExecutorTypePackaging, DateTimeFacilities > SQLTypeInfo
Definition: sqltypes.h:852
const SQLTypeInfo & get_type_info() const
Definition: Analyzer.h:78
bool is_integer() const
Definition: sqltypes.h:479
Definition: sqldefs.h:71
Definition: sqltypes.h:48
Definition: sqldefs.h:71
Definition: sqldefs.h:71

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

std::shared_ptr<Analyzer::Constant> make_fp_constant ( const int64_t  val,
const SQLTypeInfo ti 
)

Definition at line 172 of file CalciteDeserializerUtils.cpp.

References CHECK(), Datum::doubleval, Datum::floatval, SQLTypeInfoCore< TYPE_FACET_PACK >::get_type(), kDOUBLE, and kFLOAT.

Referenced by RelAlgTranslator::translateLiteral(), and anonymous_namespace{CalciteAdapter.cpp}::CalciteAdapter::translateTypedLiteral().

173  {
174  Datum d;
175  switch (ti.get_type()) {
176  case kFLOAT:
177  d.floatval = val;
178  break;
179  case kDOUBLE:
180  d.doubleval = val;
181  break;
182  default:
183  CHECK(false);
184  }
185  return makeExpr<Analyzer::Constant>(ti, false, d);
186 }
float floatval
Definition: sqltypes.h:130
CHECK(cgen_state)
HOST DEVICE SQLTypes get_type() const
Definition: sqltypes.h:326
double doubleval
Definition: sqltypes.h:131

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

DateaddField to_dateadd_field ( const std::string &  field)

Definition at line 90 of file CalciteDeserializerUtils.cpp.

References daDAY, daDECADE, daHOUR, daMICROSECOND, daMILLISECOND, daMINUTE, daMONTH, daNANOSECOND, daQUARTER, daSECOND, daWEEK, daWEEKDAY, and daYEAR.

Referenced by RelAlgTranslator::translateDateadd(), and anonymous_namespace{CalciteAdapter.cpp}::CalciteAdapter::translateDateadd().

90  {
91  DateaddField fieldno;
92  if (boost::iequals(field, "year") || boost::iequals(field, "yy") ||
93  boost::iequals(field, "yyyy") || boost::iequals(field, "sql_tsi_year")) {
94  fieldno = daYEAR;
95  } else if (boost::iequals(field, "quarter") || boost::iequals(field, "qq") ||
96  boost::iequals(field, "q") || boost::iequals(field, "sql_tsi_quarter")) {
97  fieldno = daQUARTER;
98  } else if (boost::iequals(field, "month") || boost::iequals(field, "mm") ||
99  boost::iequals(field, "m") || boost::iequals(field, "sql_tsi_month")) {
100  fieldno = daMONTH;
101  } else if (boost::iequals(field, "day") || boost::iequals(field, "dd") ||
102  boost::iequals(field, "d") || boost::iequals(field, "sql_tsi_day")) {
103  fieldno = daDAY;
104  } else if (boost::iequals(field, "week") || boost::iequals(field, "ww") ||
105  boost::iequals(field, "w") || boost::iequals(field, "sql_tsi_week")) {
106  fieldno = daWEEK;
107  } else if (boost::iequals(field, "hour") || boost::iequals(field, "hh") ||
108  boost::iequals(field, "sql_tsi_hour")) {
109  fieldno = daHOUR;
110  } else if (boost::iequals(field, "minute") || boost::iequals(field, "mi") ||
111  boost::iequals(field, "n") || boost::iequals(field, "sql_tsi_minute")) {
112  fieldno = daMINUTE;
113  } else if (boost::iequals(field, "second") || boost::iequals(field, "ss") ||
114  boost::iequals(field, "s") || boost::iequals(field, "sql_tsi_second")) {
115  fieldno = daSECOND;
116  } else if (boost::iequals(field, "millisecond") || boost::iequals(field, "ms")) {
117  fieldno = daMILLISECOND;
118  } else if (boost::iequals(field, "microsecond") || boost::iequals(field, "us") ||
119  boost::iequals(field, "sql_tsi_microsecond") ||
120  boost::iequals(field, "frac_second")) {
121  fieldno = daMICROSECOND;
122  } else if (boost::iequals(field, "nanosecond") || boost::iequals(field, "ns") ||
123  boost::iequals(field, "sql_tsi_frac_second")) {
124  fieldno = daNANOSECOND;
125  } else if (boost::iequals(field, "weekday") || boost::iequals(field, "dw")) {
126  fieldno = daWEEKDAY;
127  } else if (boost::iequals(field, "decade") || boost::iequals(field, "dc")) {
128  fieldno = daDECADE;
129  } else {
130  throw std::runtime_error("Unsupported field in DATEADD function: " + field);
131  }
132  return fieldno;
133 }
Definition: DateAdd.h:47
const rapidjson::Value & field(const rapidjson::Value &obj, const char field[]) noexcept
Definition: JsonAccessors.h:31
Definition: DateAdd.h:43
DateaddField
Definition: DateAdd.h:42
Definition: DateAdd.h:56
Definition: DateAdd.h:46

+ Here is the caller graph for this function:

DatetruncField to_datediff_field ( const std::string &  field)

Definition at line 135 of file CalciteDeserializerUtils.cpp.

References dtDAY, dtHOUR, dtMICROSECOND, dtMILLISECOND, dtMINUTE, dtMONTH, dtNANOSECOND, dtQUARTER, dtSECOND, dtWEEK, and dtYEAR.

Referenced by RelAlgTranslator::translateDatediff(), and anonymous_namespace{CalciteAdapter.cpp}::CalciteAdapter::translateDatediff().

135  {
136  DatetruncField fieldno;
137  if (boost::iequals(field, "year") || boost::iequals(field, "yy") ||
138  boost::iequals(field, "yyyy")) {
139  fieldno = dtYEAR;
140  } else if (boost::iequals(field, "quarter") || boost::iequals(field, "qq") ||
141  boost::iequals(field, "q")) {
142  fieldno = dtQUARTER;
143  } else if (boost::iequals(field, "month") || boost::iequals(field, "mm") ||
144  boost::iequals(field, "m")) {
145  fieldno = dtMONTH;
146  } else if (boost::iequals(field, "week") || boost::iequals(field, "ww") ||
147  boost::iequals(field, "w")) {
148  fieldno = dtWEEK;
149  } else if (boost::iequals(field, "day") || boost::iequals(field, "dd") ||
150  boost::iequals(field, "d")) {
151  fieldno = dtDAY;
152  } else if (boost::iequals(field, "hour") || boost::iequals(field, "hh")) {
153  fieldno = dtHOUR;
154  } else if (boost::iequals(field, "minute") || boost::iequals(field, "mi") ||
155  boost::iequals(field, "n")) {
156  fieldno = dtMINUTE;
157  } else if (boost::iequals(field, "second") || boost::iequals(field, "ss") ||
158  boost::iequals(field, "s")) {
159  fieldno = dtSECOND;
160  } else if (boost::iequals(field, "millisecond") || boost::iequals(field, "ms")) {
161  fieldno = dtMILLISECOND;
162  } else if (boost::iequals(field, "microsecond") || boost::iequals(field, "us")) {
163  fieldno = dtMICROSECOND;
164  } else if (boost::iequals(field, "nanosecond") || boost::iequals(field, "ns")) {
165  fieldno = dtNANOSECOND;
166  } else {
167  throw std::runtime_error("Unsupported field in DATEDIFF function: " + field);
168  }
169  return fieldno;
170 }
const rapidjson::Value & field(const rapidjson::Value &obj, const char field[]) noexcept
Definition: JsonAccessors.h:31
DatetruncField
Definition: DateTruncate.h:42

+ Here is the caller graph for this function:

ExtractField to_datepart_field ( const std::string &  field)

Definition at line 49 of file CalciteDeserializerUtils.cpp.

References kDAY, kDOY, kHOUR, kISODOW, kMICROSECOND, kMILLISECOND, kMINUTE, kMONTH, kNANOSECOND, kQUARTER, kQUARTERDAY, kSECOND, and kYEAR.

Referenced by RelAlgTranslator::translateDatepart(), and anonymous_namespace{CalciteAdapter.cpp}::CalciteAdapter::translateDatepart().

49  {
50  ExtractField fieldno;
51  if (boost::iequals(field, "year") || boost::iequals(field, "yy") ||
52  boost::iequals(field, "yyyy")) {
53  fieldno = kYEAR;
54  } else if (boost::iequals(field, "quarter") || boost::iequals(field, "qq") ||
55  boost::iequals(field, "q")) {
56  fieldno = kQUARTER;
57  } else if (boost::iequals(field, "month") || boost::iequals(field, "mm") ||
58  boost::iequals(field, "m")) {
59  fieldno = kMONTH;
60  } else if (boost::iequals(field, "dayofyear") || boost::iequals(field, "dy") ||
61  boost::iequals(field, "y")) {
62  fieldno = kDOY;
63  } else if (boost::iequals(field, "day") || boost::iequals(field, "dd") ||
64  boost::iequals(field, "d")) {
65  fieldno = kDAY;
66  } else if (boost::iequals(field, "hour") || boost::iequals(field, "hh")) {
67  fieldno = kHOUR;
68  } else if (boost::iequals(field, "minute") || boost::iequals(field, "mi") ||
69  boost::iequals(field, "n")) {
70  fieldno = kMINUTE;
71  } else if (boost::iequals(field, "second") || boost::iequals(field, "ss") ||
72  boost::iequals(field, "s")) {
73  fieldno = kSECOND;
74  } else if (boost::iequals(field, "millisecond") || boost::iequals(field, "ms")) {
75  fieldno = kMILLISECOND;
76  } else if (boost::iequals(field, "microsecond") || boost::iequals(field, "us")) {
77  fieldno = kMICROSECOND;
78  } else if (boost::iequals(field, "nanosecond") || boost::iequals(field, "ns")) {
79  fieldno = kNANOSECOND;
80  } else if (boost::iequals(field, "weekday") || boost::iequals(field, "dw")) {
81  fieldno = kISODOW;
82  } else if (boost::iequals(field, "quarterday") || boost::iequals(field, "dq")) {
83  fieldno = kQUARTERDAY;
84  } else {
85  throw std::runtime_error("Unsupported field in DATEPART function: " + field);
86  }
87  return fieldno;
88 }
const rapidjson::Value & field(const rapidjson::Value &obj, const char field[]) noexcept
Definition: JsonAccessors.h:31
ExtractField

+ Here is the caller graph for this function:

Variable Documentation