62 for (
const auto& column :
tuple_) {
63 column->collect_rte_idx(rte_idx_set);
68 std::vector<std::shared_ptr<Expr>> tuple_deep_copy;
69 for (
const auto& column :
tuple_) {
70 const auto column_deep_copy =
72 CHECK(column_deep_copy);
73 tuple_deep_copy.push_back(column_deep_copy);
75 return makeExpr<ExpressionTuple>(tuple_deep_copy);
113 std::list<std::shared_ptr<Analyzer::Expr>> new_value_list;
115 new_value_list.push_back(p->deep_copy());
117 return makeExpr<InValues>(
arg->deep_copy(), new_value_list);
125 return makeExpr<KeyForStringExpr>(
arg->deep_copy());
129 return makeExpr<SampleRatioExpr>(
arg->deep_copy());
133 return makeExpr<LowerExpr>(
arg->deep_copy());
137 return makeExpr<CardinalityExpr>(
arg->deep_copy());
141 return makeExpr<LikeExpr>(
arg->deep_copy(),
149 return makeExpr<RegexpExpr>(
arg->deep_copy(),
155 return makeExpr<LikelihoodExpr>(
arg->deep_copy(),
likelihood);
160 arg ==
nullptr ?
nullptr : arg->deep_copy(),
166 std::list<std::pair<std::shared_ptr<Analyzer::Expr>, std::shared_ptr<Analyzer::Expr>>>
169 new_list.emplace_back(p.first->deep_copy(), p.second->deep_copy());
174 else_expr ==
nullptr ?
nullptr : else_expr->deep_copy());
182 return makeExpr<DateaddExpr>(
187 return makeExpr<DatediffExpr>(
192 return makeExpr<DatetruncExpr>(
197 return makeExpr<OffsetInFragment>();
201 return makeExpr<WindowFunction>(
206 return makeExpr<Analyzer::ArrayExpr>(
228 *new_left_type = left_type;
229 *new_right_type = right_type;
232 throw std::runtime_error(
233 "non-boolean operands cannot be used in logic operations.");
237 if (left_type != right_type) {
240 *new_left_type = common_type;
242 *new_right_type = common_type;
249 throw std::runtime_error(
"Cannont compare between TIMESTAMP and TIME.");
256 *new_right_type = *new_left_type;
278 throw std::runtime_error(
"Cannont compare between TIME and TIMESTAMP.");
281 throw std::runtime_error(
"Cannont compare between TIME and DATE.");
306 *new_right_type = *new_left_type;
314 *new_right_type = *new_left_type;
318 throw std::runtime_error(
"Cannont compare between DATE and TIME.");
328 *new_left_type = right_type;
330 *new_right_type = right_type;
332 *new_left_type = left_type;
333 *new_right_type = left_type;
336 *new_left_type = left_type;
337 *new_right_type = right_type;
341 *new_left_type = common_type;
342 *new_right_type = common_type;
344 throw std::runtime_error(
"Cannot compare between " + left_type.
get_type_name() +
349 }
else if (op ==
kMINUS &&
352 *new_left_type = left_type;
353 *new_right_type = right_type;
354 result_type = left_type;
358 throw std::runtime_error(
"non-numeric operands in arithmetic operations.");
361 throw std::runtime_error(
"non-integer operands in modulo operation.");
380 *new_left_type = common_type;
382 *new_right_type = common_type;
388 result_type = common_type;
390 throw std::runtime_error(
"invalid binary operator type.");
450 std::string timeinterval_op_error{
451 "Operator type not supported for time interval arithmetic: "};
454 throw std::runtime_error(timeinterval_op_error + type2.
get_type_name());
460 throw std::runtime_error(timeinterval_op_error + type1.
get_type_name());
675 return shared_from_this();
689 return shared_from_this();
696 return shared_from_this();
707 throw std::runtime_error(
708 "Cannot group by string columns which are not dictionary encoded.");
710 throw std::runtime_error(
711 "Internal error: Cannot apply transient dictionary encoding to non-literal "
728 auto truncated_ti = ti;
730 auto truncated_dec = dec;
731 for (
int i = 0; i < ti.
get_scale() - 18; ++i) {
736 int64_t integral_part = dec;
738 for (
int i = 0; i < ti.
get_scale(); i++) {
742 return {integral_part, dec - integral_part * scale, scale};
747 if (v > std::numeric_limits<T>::max() || v < std::numeric_limits<T>::min()) {
748 throw std::runtime_error(
"Overflow or underflow");
750 return static_cast<T>(v);
779 for (
int i = 0; i < new_type_info.
get_scale(); i++) {
809 for (
int i = 0; i < new_type_info.
get_scale(); i++) {
839 for (
int i = 0; i < new_type_info.
get_scale(); i++) {
868 for (
int i = 0; i < new_type_info.
get_scale(); i++) {
897 for (
int i = 0; i < new_type_info.
get_scale(); i++) {
927 for (
int i = 0; i < new_type_info.
get_scale(); i++) {
965 static_cast<double>(int_frac.fractional) / int_frac.scale;
971 static_cast<double>(int_frac.fractional) / int_frac.scale;
1005 for (
int i = 0; i < new_type_info.
get_scale(); i++) {
1014 switch (new_type_info.
get_type()) {
1036 for (
int i = 0; i < new_type_info.
get_scale(); i++) {
1053 static_cast<size_t>(new_type_info.
get_dimension()) < s->length()) {
1120 return constval.
arrayval ==
nullptr;
1186 throw std::runtime_error(
"Invalid array cast.");
1188 c->do_cast(new_sub_ti);
1263 return shared_from_this();
1275 const auto is_integral_type =
1282 return shared_from_this();
1313 std::list<std::pair<std::shared_ptr<Analyzer::Expr>, std::shared_ptr<Analyzer::Expr>>>
1316 new_expr_pair_list.emplace_back(
1317 std::make_pair(p.first, p.second->deep_copy()->add_cast(ti)));
1324 expr_pair_list = new_expr_pair_list;
1327 return shared_from_this();
1339 if (rte->get_rangevar() ==
name) {
1352 const std::list<std::shared_ptr<Analyzer::Expr>>& groupby)
const {
1353 if (!groupby.empty()) {
1354 for (
auto e : groupby) {
1355 auto c = std::dynamic_pointer_cast<
ColumnVar>(e);
1361 throw std::runtime_error(
1362 "expressions in the SELECT or HAVING clause must be an aggregate function or an "
1364 "over GROUP BY columns.");
1368 const std::list<std::shared_ptr<Analyzer::Expr>>& groupby)
const {
1370 throw std::runtime_error(
"Internal error: invalid VAR in GROUP BY or HAVING.");
1375 const std::list<std::shared_ptr<Analyzer::Expr>>& groupby)
const {
1376 operand->check_group_by(groupby);
1380 const std::list<std::shared_ptr<Analyzer::Expr>>& groupby)
const {
1388 bool expr_is(
const std::shared_ptr<Analyzer::Expr>& expr) {
1389 return std::dynamic_pointer_cast<
T>(expr) !=
nullptr;
1395 const std::shared_ptr<Analyzer::Expr> cast_operand,
1396 const std::shared_ptr<Analyzer::Expr> const_operand) {
1397 if (expr_is<UOper>(cast_operand) && expr_is<Constant>(const_operand)) {
1398 auto u_expr = std::dynamic_pointer_cast<
UOper>(cast_operand);
1399 if (u_expr->get_optype() !=
kCAST) {
1402 if (!(expr_is<Analyzer::ColumnVar>(u_expr->get_own_operand()) &&
1403 !expr_is<Analyzer::Var>(u_expr->get_own_operand()))) {
1407 if (ti.is_time() && u_expr->get_operand()->get_type_info().is_time()) {
1410 }
else if (ti.is_integer() && u_expr->get_operand()->get_type_info().is_integer()) {
1426 auto cv = std::dynamic_pointer_cast<
ColumnVar>(uo->get_own_operand());
1433 auto cv = std::dynamic_pointer_cast<
ColumnVar>(uo->get_own_operand());
1462 std::list<const Expr*>& join_predicates,
1463 std::list<const Expr*>& const_predicates)
const {
1465 scan_predicates.push_back(
this);
1470 std::list<const Expr*>& join_predicates,
1471 std::list<const Expr*>& const_predicates)
const {
1472 std::set<int> rte_idx_set;
1473 operand->collect_rte_idx(rte_idx_set);
1474 if (rte_idx_set.size() > 1) {
1475 join_predicates.push_back(
this);
1476 }
else if (rte_idx_set.size() == 1) {
1477 scan_predicates.push_back(
this);
1479 const_predicates.push_back(
this);
1484 std::list<const Expr*>& join_predicates,
1485 std::list<const Expr*>& const_predicates)
const {
1487 left_operand->group_predicates(scan_predicates, join_predicates, const_predicates);
1488 right_operand->group_predicates(scan_predicates, join_predicates, const_predicates);
1491 std::set<int> rte_idx_set;
1494 if (rte_idx_set.size() > 1) {
1495 join_predicates.push_back(
this);
1496 }
else if (rte_idx_set.size() == 1) {
1497 scan_predicates.push_back(
this);
1499 const_predicates.push_back(
this);
1515 const std::list<std::shared_ptr<Analyzer::Expr>>& l) {
1519 for (
const auto& v : l) {
1530 const std::list<std::shared_ptr<Analyzer::Expr>>& l)
1534 std::list<const Expr*>& join_predicates,
1535 std::list<const Expr*>& const_predicates)
const {
1536 std::set<int> rte_idx_set;
1537 arg->collect_rte_idx(rte_idx_set);
1538 if (rte_idx_set.size() > 1) {
1539 join_predicates.push_back(
this);
1540 }
else if (rte_idx_set.size() == 1) {
1541 scan_predicates.push_back(
this);
1543 const_predicates.push_back(
this);
1548 const std::vector<int64_t>& l,
1549 const bool not_null)
1553 std::list<const Expr*>& join_predicates,
1554 std::list<const Expr*>& const_predicates)
const {
1555 std::set<int> rte_idx_set;
1556 arg->collect_rte_idx(rte_idx_set);
1557 if (rte_idx_set.size() > 1) {
1558 join_predicates.push_back(
this);
1559 }
else if (rte_idx_set.size() == 1) {
1560 scan_predicates.push_back(
this);
1562 const_predicates.push_back(
this);
1567 std::list<const Expr*>& join_predicates,
1568 std::list<const Expr*>& const_predicates)
const {
1569 std::set<int> rte_idx_set;
1570 arg->collect_rte_idx(rte_idx_set);
1571 if (rte_idx_set.size() > 1) {
1572 join_predicates.push_back(
this);
1573 }
else if (rte_idx_set.size() == 1) {
1574 scan_predicates.push_back(
this);
1576 const_predicates.push_back(
this);
1581 std::list<const Expr*>& join_predicates,
1582 std::list<const Expr*>& const_predicates)
const {
1583 std::set<int> rte_idx_set;
1584 arg->collect_rte_idx(rte_idx_set);
1585 if (rte_idx_set.size() > 1) {
1586 join_predicates.push_back(
this);
1587 }
else if (rte_idx_set.size() == 1) {
1588 scan_predicates.push_back(
this);
1590 const_predicates.push_back(
this);
1595 std::list<const Expr*>& join_predicates,
1596 std::list<const Expr*>& const_predicates)
const {
1597 std::set<int> rte_idx_set;
1598 arg->collect_rte_idx(rte_idx_set);
1599 if (rte_idx_set.size() > 1) {
1600 join_predicates.push_back(
this);
1601 }
else if (rte_idx_set.size() == 1) {
1602 scan_predicates.push_back(
this);
1604 const_predicates.push_back(
this);
1609 std::list<const Expr*>& join_predicates,
1610 std::list<const Expr*>& const_predicates)
const {
1611 std::set<int> rte_idx_set;
1612 arg->collect_rte_idx(rte_idx_set);
1613 if (rte_idx_set.size() > 1) {
1614 join_predicates.push_back(
this);
1615 }
else if (rte_idx_set.size() == 1) {
1616 scan_predicates.push_back(
this);
1618 const_predicates.push_back(
this);
1623 std::list<const Expr*>& join_predicates,
1624 std::list<const Expr*>& const_predicates)
const {
1625 std::set<int> rte_idx_set;
1626 arg->collect_rte_idx(rte_idx_set);
1627 if (rte_idx_set.size() > 1) {
1628 join_predicates.push_back(
this);
1629 }
else if (rte_idx_set.size() == 1) {
1630 scan_predicates.push_back(
this);
1632 const_predicates.push_back(
this);
1637 std::list<const Expr*>& join_predicates,
1638 std::list<const Expr*>& const_predicates)
const {
1639 std::set<int> rte_idx_set;
1640 arg->collect_rte_idx(rte_idx_set);
1641 if (rte_idx_set.size() > 1) {
1642 join_predicates.push_back(
this);
1643 }
else if (rte_idx_set.size() == 1) {
1644 scan_predicates.push_back(
this);
1646 const_predicates.push_back(
this);
1651 std::list<const Expr*>& join_predicates,
1652 std::list<const Expr*>& const_predicates)
const {
1653 std::set<int> rte_idx_set;
1654 arg->collect_rte_idx(rte_idx_set);
1655 if (rte_idx_set.size() > 1) {
1656 join_predicates.push_back(
this);
1657 }
else if (rte_idx_set.size() == 1) {
1658 scan_predicates.push_back(
this);
1660 const_predicates.push_back(
this);
1665 std::list<const Expr*>& join_predicates,
1666 std::list<const Expr*>& const_predicates)
const {
1667 std::set<int> rte_idx_set;
1668 arg->collect_rte_idx(rte_idx_set);
1669 if (rte_idx_set.size() > 1) {
1670 join_predicates.push_back(
this);
1671 }
else if (rte_idx_set.size() == 1) {
1672 scan_predicates.push_back(
this);
1674 const_predicates.push_back(
this);
1679 std::list<const Expr*>& join_predicates,
1680 std::list<const Expr*>& const_predicates)
const {
1681 std::set<int> rte_idx_set;
1683 p.first->collect_rte_idx(rte_idx_set);
1684 p.second->collect_rte_idx(rte_idx_set);
1687 else_expr->collect_rte_idx(rte_idx_set);
1689 if (rte_idx_set.size() > 1) {
1690 join_predicates.push_back(
this);
1691 }
else if (rte_idx_set.size() == 1) {
1692 scan_predicates.push_back(
this);
1694 const_predicates.push_back(
this);
1699 std::list<const Expr*>& join_predicates,
1700 std::list<const Expr*>& const_predicates)
const {
1701 std::set<int> rte_idx_set;
1703 if (rte_idx_set.size() > 1) {
1704 join_predicates.push_back(
this);
1705 }
else if (rte_idx_set.size() == 1) {
1706 scan_predicates.push_back(
this);
1708 const_predicates.push_back(
this);
1713 std::list<const Expr*>& join_predicates,
1714 std::list<const Expr*>& const_predicates)
const {
1715 std::set<int> rte_idx_set;
1716 number_->collect_rte_idx(rte_idx_set);
1717 datetime_->collect_rte_idx(rte_idx_set);
1718 if (rte_idx_set.size() > 1) {
1719 join_predicates.push_back(
this);
1720 }
else if (rte_idx_set.size() == 1) {
1721 scan_predicates.push_back(
this);
1723 const_predicates.push_back(
this);
1728 std::list<const Expr*>& join_predicates,
1729 std::list<const Expr*>& const_predicates)
const {
1730 std::set<int> rte_idx_set;
1731 start_->collect_rte_idx(rte_idx_set);
1732 end_->collect_rte_idx(rte_idx_set);
1733 if (rte_idx_set.size() > 1) {
1734 join_predicates.push_back(
this);
1735 }
else if (rte_idx_set.size() == 1) {
1736 scan_predicates.push_back(
this);
1738 const_predicates.push_back(
this);
1743 std::list<const Expr*>& join_predicates,
1744 std::list<const Expr*>& const_predicates)
const {
1745 std::set<int> rte_idx_set;
1747 if (rte_idx_set.size() > 1) {
1748 join_predicates.push_back(
this);
1749 }
else if (rte_idx_set.size() == 1) {
1750 scan_predicates.push_back(
this);
1752 const_predicates.push_back(
this);
1757 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1758 for (
auto tle : tlist) {
1759 const Expr* e = tle->get_expr();
1761 if (colvar !=
nullptr) {
1767 throw std::runtime_error(
"Internal error: cannot find ColumnVar in targetlist.");
1771 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1773 for (
auto tle : tlist) {
1774 const Expr* e = tle->get_expr();
1776 if (colvar ==
nullptr) {
1777 throw std::runtime_error(
1778 "Internal Error: targetlist in rewrite_with_child_targetlist is not all "
1791 throw std::runtime_error(
"Internal error: cannot find ColumnVar in child targetlist.");
1795 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1797 for (
auto tle : tlist) {
1798 const Expr* e = tle->get_expr();
1799 if (
typeid(*e) !=
typeid(
AggExpr)) {
1801 if (colvar ==
nullptr) {
1802 throw std::runtime_error(
1803 "Internal Error: targetlist in rewrite_agg_to_var is not all columns and "
1817 throw std::runtime_error(
1818 "Internal error: cannot find ColumnVar from having clause in targetlist.");
1822 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1824 for (
auto tle : tlist) {
1825 const Expr* e = tle->get_expr();
1831 throw std::runtime_error(
1832 "Internal error: cannot find Var from having clause in targetlist.");
1836 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1837 std::list<std::shared_ptr<Analyzer::Expr>> new_value_list;
1839 new_value_list.push_back(v->deep_copy());
1841 return makeExpr<InValues>(
arg->rewrite_with_targetlist(tlist), new_value_list);
1845 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1846 std::list<std::shared_ptr<Analyzer::Expr>> new_value_list;
1848 new_value_list.push_back(v->deep_copy());
1850 return makeExpr<InValues>(
arg->rewrite_with_child_targetlist(tlist), new_value_list);
1854 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1855 std::list<std::shared_ptr<Analyzer::Expr>> new_value_list;
1857 new_value_list.push_back(v->rewrite_agg_to_var(tlist));
1859 return makeExpr<InValues>(
arg->rewrite_agg_to_var(tlist), new_value_list);
1863 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1864 for (
auto tle : tlist) {
1865 const Expr* e = tle->get_expr();
1866 if (
typeid(*e) ==
typeid(
AggExpr)) {
1868 if (*
this == *agg) {
1873 throw std::runtime_error(
"Internal error: cannot find AggExpr in targetlist.");
1877 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1880 arg ?
arg->rewrite_with_child_targetlist(tlist) :
nullptr,
1886 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1888 for (
auto tle : tlist) {
1889 const Expr* e = tle->get_expr();
1890 if (
typeid(*e) ==
typeid(
AggExpr)) {
1892 if (*
this == *agg_expr) {
1898 throw std::runtime_error(
1899 "Internal error: cannot find AggExpr from having clause in targetlist.");
1903 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1904 std::list<std::pair<std::shared_ptr<Analyzer::Expr>, std::shared_ptr<Analyzer::Expr>>>
1907 epair_list.emplace_back(p.first->rewrite_with_targetlist(tlist),
1908 p.second->rewrite_with_targetlist(tlist));
1910 return makeExpr<CaseExpr>(
1918 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1919 return makeExpr<ExtractExpr>(
1924 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1927 number_->rewrite_with_targetlist(tlist),
1928 datetime_->rewrite_with_targetlist(tlist));
1932 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1933 return makeExpr<DatediffExpr>(
type_info,
1935 start_->rewrite_with_targetlist(tlist),
1936 end_->rewrite_with_targetlist(tlist));
1940 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1941 return makeExpr<DatetruncExpr>(
1946 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1947 std::list<std::pair<std::shared_ptr<Analyzer::Expr>, std::shared_ptr<Analyzer::Expr>>>
1950 epair_list.emplace_back(p.first->rewrite_with_child_targetlist(tlist),
1951 p.second->rewrite_with_child_targetlist(tlist));
1953 return makeExpr<CaseExpr>(
1961 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1962 return makeExpr<ExtractExpr>(
1967 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1970 number_->rewrite_with_child_targetlist(tlist),
1971 datetime_->rewrite_with_child_targetlist(tlist));
1975 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1976 return makeExpr<DatediffExpr>(
type_info,
1978 start_->rewrite_with_child_targetlist(tlist),
1979 end_->rewrite_with_child_targetlist(tlist));
1983 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1984 return makeExpr<DatetruncExpr>(
1989 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
1990 std::list<std::pair<std::shared_ptr<Analyzer::Expr>, std::shared_ptr<Analyzer::Expr>>>
1993 epair_list.emplace_back(p.first->rewrite_agg_to_var(tlist),
1994 p.second->rewrite_agg_to_var(tlist));
2003 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
2004 return makeExpr<ExtractExpr>(
2009 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
2012 number_->rewrite_agg_to_var(tlist),
2017 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
2018 return makeExpr<DatediffExpr>(
type_info,
2020 start_->rewrite_agg_to_var(tlist),
2021 end_->rewrite_agg_to_var(tlist));
2025 const std::vector<std::shared_ptr<TargetEntry>>& tlist)
const {
2026 return makeExpr<DatetruncExpr>(
2031 if (
typeid(rhs) !=
typeid(
ColumnVar) &&
typeid(rhs) !=
typeid(
Var)) {
2039 const Var* v =
dynamic_cast<const Var*
>(
this);
2043 const Var* rv =
dynamic_cast<const Var*
>(&rhs);
2044 if (rv ==
nullptr) {
2056 const auto& rhs_tuple_cols = rhs_tuple->
getTuple();
2094 throw std::runtime_error(
"Unrecognized type for Constant Datum equality: " +
2102 if (
typeid(rhs) !=
typeid(
Constant)) {
2119 if (
typeid(rhs) !=
typeid(
UOper)) {
2122 const UOper& rhs_uo =
dynamic_cast<const UOper&
>(rhs);
2127 if (
typeid(rhs) !=
typeid(
BinOper)) {
2189 if (
typeid(rhs) !=
typeid(
LikeExpr)) {
2240 if (
typeid(rhs) !=
typeid(
InValues)) {
2261 if (
typeid(rhs) !=
typeid(
AggExpr)) {
2271 if (
arg ==
nullptr || rhs_ae.
get_arg() ==
nullptr) {
2278 if (
typeid(rhs) !=
typeid(
CaseExpr)) {
2291 if (!(*p.first == *it->first) || !(*p.second == *it->second)) {
2339 const auto rhs_window =
dynamic_cast<const WindowFunction*
>(&rhs);
2343 if (
kind_ != rhs_window->kind_ ||
args_.size() != rhs_window->args_.size() ||
2345 order_keys_.size() != rhs_window->order_keys_.size()) {
2361 if (!(lhs_expr == rhs_expr)) {
2374 const auto rhs_geo =
dynamic_cast<const GeoUOper*
>(&rhs);
2378 if (
op_ != rhs_geo->getOp() ||
ti0_ != rhs_geo->getTypeInfo0() ||
2379 args0_.size() != rhs_geo->getArgs0().size()) {
2386 const auto rhs_geo =
dynamic_cast<const GeoBinOper*
>(&rhs);
2390 if (
op_ != rhs_geo->getOp() ||
ti0_ != rhs_geo->getTypeInfo0() ||
2391 args0_.size() != rhs_geo->getArgs0().size()) {
2394 if (
ti1_ != rhs_geo->getTypeInfo1() ||
args1_.size() != rhs_geo->getArgs1().size()) {
2408 std::string str{
"< "};
2409 for (
const auto& column :
tuple_) {
2410 str += column->toString();
2424 std::string str{
"(Const "};
2465 return "(" + op +
operand->toString() +
") ";
2519 std::string str{
"("};
2533 return "(Subquery ) ";
2537 std::string str{
"(IN "};
2538 str +=
arg->toString();
2541 str += e->toString();
2552 if (!dynamic_cast<const InIntegerSet*>(&rhs)) {
2555 const auto& rhs_in_integer_set =
static_cast<const InIntegerSet&
>(rhs);
2556 return *
arg == *rhs_in_integer_set.arg &&
value_list == rhs_in_integer_set.value_list;
2560 std::string str{
"(IN_INTEGER_SET "};
2561 str +=
arg->toString();
2573 str +=
"CHAR_LENGTH(";
2577 str +=
arg->toString();
2583 std::string str{
"KEY_FOR_STRING("};
2584 str +=
arg->toString();
2590 std::string str{
"SAMPLE_RATIO("};
2591 str +=
arg->toString();
2597 return "LOWER(" +
arg->toString() +
") ";
2601 std::string str{
"CARDINALITY("};
2602 str +=
arg->toString();
2608 std::string str{
"(LIKE "};
2609 str +=
arg->toString();
2619 std::string str{
"(REGEXP "};
2620 str +=
arg->toString();
2630 std::string str{
"(LIKELIHOOD "};
2631 str +=
arg->toString();
2654 agg =
"APPROX_COUNT_DISTINCT";
2657 agg =
"APPROX_MEDIAN";
2660 agg =
"SINGLE_VALUE";
2666 std::string str{
"(" + agg};
2671 str +=
arg->toString();
2679 std::string str{
"CASE "};
2682 str += p.first->toString();
2684 str += p.second->toString();
2701 " DATETIME " +
datetime_->toString() +
") ";
2706 end_->toString() +
") ";
2714 return "(OffsetInFragment) ";
2719 for (
const auto& arg :
args_) {
2720 result +=
" " + arg->toString();
2722 return result +
") ";
2726 std::string str{
"ARRAY["};
2730 str += (*iter)->toString();
2756 std::string
result = fn +
"(";
2757 for (
const auto& arg :
args0_) {
2758 result +=
" " + arg->toString();
2760 return result +
" ) ";
2767 fn =
"ST_Intersection";
2770 fn =
"ST_Difference";
2782 std::string
result = fn +
"(";
2784 for (
const auto& arg :
args0_) {
2785 result +=
" " + arg->toString();
2787 for (
const auto& arg :
args1_) {
2788 result +=
" " + arg->toString();
2790 return result +
" ) ";
2794 std::string str{
"(" +
resname +
" "};
2795 str +=
expr->toString();
2809 str +=
" nulls first";
2817 for (
auto e : expr_list) {
2822 expr_list.push_back(
this);
2839 operand->find_expr(f, expr_list);
2843 std::list<const Expr*>& expr_list)
const {
2848 arg->find_expr(f, expr_list);
2850 e->find_expr(f, expr_list);
2855 std::list<const Expr*>& expr_list)
const {
2860 arg->find_expr(f, expr_list);
2864 std::list<const Expr*>& expr_list)
const {
2869 arg->find_expr(f, expr_list);
2873 std::list<const Expr*>& expr_list)
const {
2878 arg->find_expr(f, expr_list);
2882 std::list<const Expr*>& expr_list)
const {
2886 arg->find_expr(f, expr_list);
2891 std::list<const Expr*>& expr_list)
const {
2896 arg->find_expr(f, expr_list);
2900 std::list<const Expr*>& expr_list)
const {
2905 arg->find_expr(f, expr_list);
2913 std::list<const Expr*>& expr_list)
const {
2918 arg->find_expr(f, expr_list);
2926 std::list<const Expr*>& expr_list)
const {
2931 arg->find_expr(f, expr_list);
2939 if (
arg !=
nullptr) {
2940 arg->find_expr(f, expr_list);
2945 std::list<const Expr*>& expr_list)
const {
2951 p.first->find_expr(f, expr_list);
2952 p.second->find_expr(f, expr_list);
2960 std::list<const Expr*>& expr_list)
const {
2969 std::list<const Expr*>& expr_list)
const {
2974 number_->find_expr(f, expr_list);
2979 std::list<const Expr*>& expr_list)
const {
2984 start_->find_expr(f, expr_list);
2985 end_->find_expr(f, expr_list);
2989 std::list<const Expr*>& expr_list)
const {
2999 p.first->collect_rte_idx(rte_idx_set);
3000 p.second->collect_rte_idx(rte_idx_set);
3003 else_expr->collect_rte_idx(rte_idx_set);
3012 number_->collect_rte_idx(rte_idx_set);
3013 datetime_->collect_rte_idx(rte_idx_set);
3017 start_->collect_rte_idx(rte_idx_set);
3018 end_->collect_rte_idx(rte_idx_set);
3027 bool include_agg)
const {
3029 p.first->collect_column_var(colvar_set, include_agg);
3030 p.second->collect_column_var(colvar_set, include_agg);
3033 else_expr->collect_column_var(colvar_set, include_agg);
3039 bool include_agg)
const {
3040 from_expr_->collect_column_var(colvar_set, include_agg);
3045 bool include_agg)
const {
3046 number_->collect_column_var(colvar_set, include_agg);
3047 datetime_->collect_column_var(colvar_set, include_agg);
3052 bool include_agg)
const {
3053 start_->collect_column_var(colvar_set, include_agg);
3054 end_->collect_column_var(colvar_set, include_agg);
3059 bool include_agg)
const {
3060 from_expr_->collect_column_var(colvar_set, include_agg);
3064 const std::list<std::shared_ptr<Analyzer::Expr>>& groupby)
const {
3066 p.first->check_group_by(groupby);
3067 p.second->check_group_by(groupby);
3075 const std::list<std::shared_ptr<Analyzer::Expr>>& groupby)
const {
3080 const std::list<std::shared_ptr<Analyzer::Expr>>& groupby)
const {
3081 number_->check_group_by(groupby);
3086 const std::list<std::shared_ptr<Analyzer::Expr>>& groupby)
const {
3087 start_->check_group_by(groupby);
3088 end_->check_group_by(groupby);
3092 const std::list<std::shared_ptr<Analyzer::Expr>>& groupby)
const {
3098 const auto c = std::dynamic_pointer_cast<
const Constant>(p.second);
3102 const auto v = std::dynamic_pointer_cast<
const ColumnVar>(p.second);
3106 const auto cast = std::dynamic_pointer_cast<
const UOper>(p.second);
3107 if (cast !=
nullptr && cast->get_optype() ==
kCAST) {
3113 const auto v = std::dynamic_pointer_cast<
const ColumnVar>(p.second);
3120 p.second->get_domain(domain_set);
3121 if (domain_set.empty()) {
3136 const auto cast = std::dynamic_pointer_cast<
const UOper>(
else_expr);
3137 if (cast !=
nullptr && cast->get_optype() ==
kCAST) {
3156 std::vector<std::shared_ptr<Analyzer::Expr>> args_copy;
3157 for (
size_t i = 0; i <
getArity(); ++i) {
3167 const auto rhs_func_oper =
dynamic_cast<const FunctionOper*
>(&rhs);
3168 if (!rhs_func_oper) {
3171 if (
getName() != rhs_func_oper->getName()) {
3174 if (
getArity() != rhs_func_oper->getArity()) {
3177 for (
size_t i = 0; i <
getArity(); ++i) {
3178 if (!(*
getArg(i) == *(rhs_func_oper->getArg(i)))) {
3186 std::string str{
"(" +
name_ +
" "};
3187 for (
const auto& arg :
args_) {
3188 str += arg->toString();
3195 std::vector<std::shared_ptr<Analyzer::Expr>> args_copy;
3196 for (
size_t i = 0; i <
getArity(); ++i) {
3199 return makeExpr<Analyzer::FunctionOperWithCustomTypeHandling>(
3207 const auto rhs_func_oper =
3209 if (!rhs_func_oper) {
3212 if (
getName() != rhs_func_oper->getName()) {
3215 if (
getArity() != rhs_func_oper->getArity()) {
3218 for (
size_t i = 0; i <
getArity(); ++i) {
3219 if (!(*
getArg(i) == *(rhs_func_oper->getArg(i)))) {
3229 const std::vector<std::shared_ptr<Analyzer::Expr>>& rhs) {
3230 if (lhs.size() != rhs.size()) {
3233 for (
size_t i = 0; i < lhs.size(); ++i) {
3234 if (!(*lhs[i] == *rhs[i])) {
3241 std::shared_ptr<Analyzer::Expr>
remove_cast(
const std::shared_ptr<Analyzer::Expr>& expr) {
3243 if (!uoper || uoper->get_optype() !=
kCAST) {
std::shared_ptr< Analyzer::Expr > arg
std::shared_ptr< Analyzer::Expr > deep_copy() const override
std::shared_ptr< Analyzer::Expr > arg
Defines data structures for the semantic analysis phase of query processing.
InIntegerSet(const std::shared_ptr< const Analyzer::Expr > a, const std::vector< int64_t > &values, const bool not_null)
std::shared_ptr< Analyzer::Expr > rewrite_agg_to_var(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
HOST DEVICE SQLTypes get_subtype() const
void set_compression(EncodingType c)
T safe_narrow(const int64_t v)
float get_likelihood() const
std::shared_ptr< Analyzer::Expr > expr
std::string toString() const override
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
InValues(std::shared_ptr< Analyzer::Expr > a, const std::list< std::shared_ptr< Analyzer::Expr >> &l)
static bool simple_predicate_has_simple_cast(const std::shared_ptr< Analyzer::Expr > cast_operand, const std::shared_ptr< Analyzer::Expr > const_operand)
bool operator==(const Expr &rhs) const override
std::string toString() const override
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
void get_domain(DomainSet &domain_set) const override
std::shared_ptr< Analyzer::Expr > rewrite_agg_to_var(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
bool operator==(const Expr &rhs) const override
const Expr * get_else_expr() const
std::shared_ptr< Analyzer::Expr > deep_copy() const override
bool operator==(const Expr &rhs) const override
bool Datum_equal(const SQLTypeInfo &ti, Datum val1, Datum val2)
std::string DatumToString(Datum d, const SQLTypeInfo &ti)
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
bool operator==(const Expr &rhs) const override
const Expr * get_escape_expr() const
std::shared_ptr< Analyzer::Expr > arg
std::shared_ptr< Analyzer::Expr > rewrite_with_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
std::shared_ptr< Analyzer::Expr > decompress()
std::shared_ptr< Analyzer::Expr > remove_cast(const std::shared_ptr< Analyzer::Expr > &expr)
int64_t DateTruncate(DatetruncField field, const int64_t timeval)
bool is_null_value(const SQLTypeInfo &ti, const Datum &constval)
void add_rte(RangeTableEntry *rte)
std::shared_ptr< Analyzer::Expr > operand
std::shared_ptr< Analyzer::Expr > arg
std::list< std::pair< std::shared_ptr< Analyzer::Expr >, std::shared_ptr< Analyzer::Expr > > > expr_pair_list
std::shared_ptr< Analyzer::Expr > rewrite_agg_to_var(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
bool operator==(const Expr &rhs) const override
std::shared_ptr< Analyzer::Expr > rewrite_with_child_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
bool operator==(const Expr &rhs) const override
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
virtual void add_unique(std::list< const Expr * > &expr_list) const
std::shared_ptr< Analyzer::Expr > right_operand
std::shared_ptr< Analyzer::Expr > escape_expr
bool operator==(Expr const &rhs) const override
std::shared_ptr< Analyzer::Constant > error_rate
std::shared_ptr< Analyzer::Expr > rewrite_agg_to_var(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
const Expr * get_escape_expr() const
HOST DEVICE int get_scale() const
const Expr * get_right_operand() const
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
void collect_rte_idx(std::set< int > &rte_idx_set) const override
std::string toString() const override
std::string get_compression_name() const
std::shared_ptr< Analyzer::Expr > arg
std::shared_ptr< Analyzer::Expr > deep_copy() const override
const std::vector< std::shared_ptr< Analyzer::Expr > > args0_
std::shared_ptr< Analyzer::Expr > like_expr
const std::vector< std::shared_ptr< Analyzer::Expr > > args0_
std::string toString() const override
void collect_column_var(std::set< const ColumnVar *, bool(*)(const ColumnVar *, const ColumnVar *)> &colvar_set, bool include_agg) const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
const std::shared_ptr< const Analyzer::Expr > arg
const std::shared_ptr< Analyzer::Expr > get_own_operand() const
std::shared_ptr< Analyzer::Expr > deep_copy() const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
void cast_from_string(const SQLTypeInfo &new_type_info)
void check_group_by(const std::list< std::shared_ptr< Analyzer::Expr >> &groupby) const override
std::string toString() const override
std::shared_ptr< Analyzer::Expr > add_cast(const SQLTypeInfo &new_type_info) override
std::shared_ptr< Analyzer::Expr > ExpressionPtr
const Geospatial::GeoBase::GeoOp op_
const Expr * get_arg() const
const std::vector< std::shared_ptr< Analyzer::Expr > > order_keys_
std::shared_ptr< Analyzer::Expr > rewrite_with_child_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
bool operator==(const Expr &rhs) const override
DatetruncField get_field() const
const Expr * get_arg() const
bool is_expr_nullable(const Analyzer::Expr *expr)
Constants for Builtin SQL Types supported by OmniSci.
std::shared_ptr< Analyzer::Expr > add_cast(const SQLTypeInfo &new_type_info) override
std::shared_ptr< Analyzer::Expr > arg
bool operator==(const Expr &rhs) const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
const std::vector< std::shared_ptr< Analyzer::Expr > > args_
const std::vector< std::shared_ptr< Analyzer::Expr > > partition_keys_
bool operator==(const Expr &rhs) const override
HOST DEVICE SQLTypes get_type() const
bool operator==(const Expr &rhs) const override
std::string toString() const override
constexpr int64_t get_datetime_scaled_epoch(const ScalingType direction, const int64_t epoch, const int32_t dimen)
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
std::string toString() const override
std::list< const Expr * > DomainSet
const Expr * get_arg() const
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
std::string toString() const override
void check_group_by(const std::list< std::shared_ptr< Analyzer::Expr >> &groupby) const override
bool operator==(const Expr &rhs) const override
int get_rte_idx(const std::string &range_var_name) const
void cast_string(const SQLTypeInfo &new_type_info)
const std::vector< std::shared_ptr< Analyzer::Expr > > args_
std::string toString() const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
std::string toString() const override
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
bool operator==(const Expr &rhs) const override
std::string toString() const override
std::string toString() const override
std::string toString() const override
bool get_calc_encoded_length() const
std::shared_ptr< Analyzer::Expr > rewrite_with_child_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
std::string toString() const override
const Geospatial::GeoBase::GeoOp op_
std::string toString() const override
SQLOps get_optype() const
std::shared_ptr< Analyzer::Expr > left_operand
This file contains the class specification and related data structures for Catalog.
bool operator==(const Expr &rhs) const override
const std::vector< std::shared_ptr< Analyzer::Expr > > args1_
std::string toString() const
std::shared_ptr< Analyzer::Expr > normalize_simple_predicate(int &rte_idx) const override
const std::list< std::shared_ptr< Analyzer::Expr > > value_list
std::shared_ptr< Analyzer::Expr > deep_copy() const override
static SQLTypeInfo common_string_type(const SQLTypeInfo &type1, const SQLTypeInfo &type2)
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
std::shared_ptr< Analyzer::Expr > rewrite_agg_to_var(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
const DatetruncField field_
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
const std::vector< std::shared_ptr< Analyzer::Expr > > & getTuple() const
void collect_rte_idx(std::set< int > &rte_idx_set) const override
std::shared_ptr< Analyzer::Expr > rewrite_agg_to_var(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
bool is_castable(const SQLTypeInfo &new_type_info) const
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
std::string toString() const override
const DateaddField field_
std::shared_ptr< Analyzer::Expr > deep_copy() const override
std::shared_ptr< Analyzer::Expr > from_expr_
bool expr_list_match(const std::vector< std::shared_ptr< Analyzer::Expr >> &lhs, const std::vector< std::shared_ptr< Analyzer::Expr >> &rhs)
std::shared_ptr< Analyzer::Expr > arg
bool operator==(const Expr &rhs) const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
std::string toString() const override
void check_group_by(const std::list< std::shared_ptr< Analyzer::Expr >> &groupby) const override
const std::shared_ptr< Analyzer::Expr > end_
std::string toString() const override
WhichRow get_which_row() const
void check_group_by(const std::list< std::shared_ptr< Analyzer::Expr >> &groupby) const override
bool operator==(const Expr &rhs) const override
const std::shared_ptr< Analyzer::Expr > number_
const std::list< std::shared_ptr< Analyzer::Expr > > value_list
bool is_timeinterval() const
std::shared_ptr< Analyzer::Expr > deep_copy() const override
bool operator==(const Expr &rhs) const override
std::string toString() const override
static SQLTypeInfo common_numeric_type(const SQLTypeInfo &type1, const SQLTypeInfo &type2)
void collect_rte_idx(std::set< int > &rte_idx_set) const override
std::shared_ptr< Analyzer::Expr > rewrite_with_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
bool operator==(const Expr &rhs) const override
const std::shared_ptr< Analyzer::Expr > start_
std::string toString() const
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
void collect_column_var(std::set< const ColumnVar *, bool(*)(const ColumnVar *, const ColumnVar *)> &colvar_set, bool include_agg) const override
Datum StringToDatum(std::string_view s, SQLTypeInfo &ti)
bool get_is_distinct() const
bool operator==(const Expr &rhs) const override
const std::vector< OrderEntry > collation_
const Expr * get_start_expr() const
void do_cast(const SQLTypeInfo &new_type_info)
std::string toString() const override
IntFracRepr decimal_to_int_frac(const int64_t dec, const SQLTypeInfo &ti)
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
bool operator==(const Expr &rhs) const override
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
const SQLTypeInfo & get_type_info() const
std::shared_ptr< Analyzer::Expr > rewrite_with_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
void collect_column_var(std::set< const ColumnVar *, bool(*)(const ColumnVar *, const ColumnVar *)> &colvar_set, bool include_agg) const override
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
int get_precision() const
std::shared_ptr< Analyzer::Expr > deep_copy() const override
std::shared_ptr< Analyzer::Expr > arg
const std::vector< std::shared_ptr< Analyzer::Expr > > tuple_
void set_comp_param(int p)
const std::vector< int64_t > value_list
void collect_rte_idx(std::set< int > &rte_idx_set) const override
const Expr * get_pattern_expr() const
ExpressionPtrVector contained_expressions_
std::shared_ptr< Analyzer::Expr > rewrite_with_child_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
const Expr * get_from_expr() const
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
#define TRANSIENT_DICT_ID
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
bool is_in_values_nullable(const std::shared_ptr< Analyzer::Expr > &a, const std::list< std::shared_ptr< Analyzer::Expr >> &l)
const Expr * get_datetime_expr() const
HOST DEVICE EncodingType get_compression() const
std::shared_ptr< Analyzer::Expr > deep_copy() const override
const Expr * get_like_expr() const
int64_t convert_decimal_value_to_scale(const int64_t decimal_value, const SQLTypeInfo &type_info, const SQLTypeInfo &new_type_info)
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
std::shared_ptr< Analyzer::Expr > rewrite_with_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
const Analyzer::Expr * getArg(const size_t i) const
void set_dimension(int d)
std::string toString() const override
const Expr * get_operand() const
Analyzer::ExpressionPtr deep_copy() const override
Datum get_constval() const
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
bool operator==(const Expr &rhs) const override
const Expr * get_arg() const
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
std::shared_ptr< Analyzer::Expr > add_cast(const SQLTypeInfo &new_type_info) override
const Expr * get_arg() const
HOST DEVICE int get_dimension() const
const std::list< std::shared_ptr< Analyzer::Expr > > & get_value_list() const
std::string toString() const override
std::vector< RangeTableEntry * > rangetable
std::string get_type_name() const
std::string toString() const override
std::shared_ptr< Analyzer::Expr > rewrite_agg_to_var(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
Expression class for the LOWER (lowercase) string function. The "arg" constructor parameter must be a...
virtual std::shared_ptr< Analyzer::Expr > add_cast(const SQLTypeInfo &new_type_info)
void check_group_by(const std::list< std::shared_ptr< Analyzer::Expr >> &groupby) const override
void cast_number(const SQLTypeInfo &new_type_info)
std::shared_ptr< Analyzer::Expr > arg
void collect_rte_idx(std::set< int > &rte_idx_set) const override
HOST DEVICE int get_comp_param() const
DateaddField get_field() const
SQLAgg get_aggtype() const
std::string toString() const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
const std::shared_ptr< Analyzer::Expr > datetime_
const Expr * get_arg() const
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
std::shared_ptr< Analyzer::Expr > arg
std::shared_ptr< Analyzer::Expr > rewrite_with_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
const Expr * get_end_expr() const
bool operator==(const Expr &rhs) const override
std::shared_ptr< Analyzer::Expr > rewrite_with_child_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
std::string toString() const override
std::shared_ptr< Analyzer::Expr > add_cast(const SQLTypeInfo &new_type_info) override
constexpr int64_t get_timestamp_precision_scale(const int32_t dimen)
bool is_high_precision_timestamp() const
bool operator==(const Expr &rhs) const override
void cast_to_string(const SQLTypeInfo &new_type_info)
#define COMMUTE_COMPARISON(X)
std::shared_ptr< Analyzer::Expr > deep_copy() const override
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
std::shared_ptr< Analyzer::Expr > escape_expr
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
const Expr * get_left_operand() const
std::shared_ptr< Analyzer::Expr > deep_copy() const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
std::shared_ptr< Analyzer::Expr > rewrite_with_child_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
const SqlWindowFunctionKind kind_
void check_group_by(const std::list< std::shared_ptr< Analyzer::Expr >> &groupby) const override
int get_column_id() const
std::string toString() const override
std::string getName() const
bool operator==(const Expr &rhs) const override
bool expr_is(const std::shared_ptr< Analyzer::Expr > &expr)
ALWAYS_INLINE DEVICE int64_t DateTruncateHighPrecisionToDate(const int64_t timeval, const int64_t scale)
HOST DEVICE bool get_notnull() const
bool operator==(const Expr &rhs) const override
std::string toString() const override
void group_predicates(std::list< const Expr * > &scan_predicates, std::list< const Expr * > &join_predicates, std::list< const Expr * > &const_predicates) const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
SQLTypeInfo get_elem_type() const
const Expr * get_arg() const
DatetruncField get_field() const
void find_expr(bool(*f)(const Expr *), std::list< const Expr * > &expr_list) const override
std::list< OrderEntry > * order_by
std::shared_ptr< Analyzer::Expr > deep_copy() const override
std::shared_ptr< Analyzer::Expr > pattern_expr
#define TRANSIENT_DICT(ID)
std::string toString() const override
void check_group_by(const std::list< std::shared_ptr< Analyzer::Expr >> &groupby) const override
std::shared_ptr< Analyzer::Expr > else_expr
const Expr * get_arg() const
std::shared_ptr< Analyzer::Expr > deep_copy() const override
static SQLTypeInfo analyze_type_info(SQLOps op, const SQLTypeInfo &left_type, const SQLTypeInfo &right_type, SQLTypeInfo *new_left_type, SQLTypeInfo *new_right_type)
SQLOps get_optype() const
const std::list< std::pair< std::shared_ptr< Analyzer::Expr >, std::shared_ptr< Analyzer::Expr > > > & get_expr_pair_list() const
const Expr * get_arg() const
void collect_column_var(std::set< const ColumnVar *, bool(*)(const ColumnVar *, const ColumnVar *)> &colvar_set, bool include_agg) const override
void check_group_by(const std::list< std::shared_ptr< Analyzer::Expr >> &groupby) const override
std::shared_ptr< Analyzer::Expr > rewrite_with_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
std::shared_ptr< Analyzer::Expr > deep_copy() const override
bool operator==(const Expr &rhs) const override
bool operator==(const Expr &rhs) const override
SQLTypeInfo get_nullable_type_info(const SQLTypeInfo &type_info)
std::shared_ptr< Analyzer::Expr > rewrite_agg_to_var(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
const Expr * get_number_expr() const
bool get_is_ilike() const
std::shared_ptr< Analyzer::Expr > rewrite_with_child_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override
std::shared_ptr< Analyzer::Expr > rewrite_with_targetlist(const std::vector< std::shared_ptr< TargetEntry >> &tlist) const override