27 #include <unordered_map>
29 #include <rapidjson/document.h>
30 #include <boost/core/noncopyable.hpp>
44 virtual std::string
toString()
const = 0;
74 const unsigned precision,
75 const unsigned type_scale,
76 const unsigned type_precision)
93 const unsigned precision,
94 const unsigned type_scale,
95 const unsigned type_precision)
109 const unsigned scale,
110 const unsigned precision,
111 const unsigned type_scale,
112 const unsigned type_precision)
126 const unsigned scale,
127 const unsigned precision,
128 const unsigned type_scale,
129 const unsigned type_precision)
151 const auto ptr = boost::get<T>(&
literal_);
169 return cat(::typeName(
this),
171 boost::lexical_cast<std::string>(
literal_),
182 int64_t val = getVal<int64_t>();
183 return std::make_unique<RexLiteral>(
187 double val = getVal<double>();
188 return std::make_unique<RexLiteral>(
192 auto val = getVal<std::string>();
193 return std::make_unique<RexLiteral>(
197 bool val = getVal<bool>();
198 return std::make_unique<RexLiteral>(
211 const boost::variant<int64_t, double, std::string, bool, void*>
literal_;
226 std::vector<std::unique_ptr<const RexScalar>>& operands,
231 std::vector<std::unique_ptr<const RexScalar>>& operands)
const {
252 return cat(::typeName(
this),
264 mutable std::vector<std::unique_ptr<const RexScalar>>
operands_;
282 std::shared_ptr<std::shared_ptr<const ExecutionResult>>
result,
283 const std::shared_ptr<const RelAlgNode> ra)
296 return *(
type_.get());
305 unsigned getId()
const;
309 std::string
toString()
const override;
311 std::unique_ptr<RexSubQuery>
deepCopy()
const;
317 std::shared_ptr<std::shared_ptr<const ExecutionResult>>
result_;
318 const std::shared_ptr<const RelAlgNode>
ra_;
339 std::string
toString()
const override;
355 return *
reinterpret_cast<const size_t*
>(may_alias_ptr(&addr)) ^ rex_in.
getIndex();
365 RexCase(std::vector<std::pair<std::unique_ptr<const RexScalar>,
366 std::unique_ptr<const RexScalar>>>& expr_pair_list,
367 std::unique_ptr<const RexScalar>& else_expr)
385 return cat(::typeName(
this),
395 std::pair<std::unique_ptr<const RexScalar>, std::unique_ptr<const RexScalar>>>
411 std::vector<std::unique_ptr<const RexScalar>>& operands)
const override {
412 return std::unique_ptr<const RexOperator>(
449 return cat(::typeName(
this),
480 const std::vector<SortField> collation,
520 const std::vector<SortField>& collation)
const {
521 return std::unique_ptr<const RexOperator>(
534 return cat(::typeName(
this),
568 std::unique_ptr<RexRef>
deepCopy()
const {
return std::make_unique<RexRef>(
index_); }
579 const std::vector<size_t>& operands)
583 return cat(::typeName(
this),
621 bool has_kv_type_options)
630 bool has_kv_type_options,
631 std::vector<std::string>& list_options)
641 bool has_kv_type_options,
642 std::unordered_map<std::string, std::string>& kv_options)
653 void setKVOptions(std::unordered_map<std::string, std::string>& kv_options) {
693 using Hints = std::unordered_map<std::string, HintExplained>;
749 for (
auto& input_ptr :
inputs_) {
750 if (input_ptr.get() == needle) {
758 std::shared_ptr<const RelAlgNode> input) {
759 for (
auto& input_ptr :
inputs_) {
760 if (input_ptr == old_input) {
771 virtual std::string
toString()
const = 0;
773 virtual size_t size()
const = 0;
775 virtual std::shared_ptr<RelAlgNode>
deepCopy()
const = 0;
817 std::shared_ptr<RelAlgNode>
deepCopy()
const override {
831 return hints_->find(candidate_hint_name) !=
hints_->end();
840 return hints_->at(hint_name);
857 bool const delete_via_select =
false,
858 bool const varlen_update_required =
false,
887 template <
typename VALIDATION_FUNCTOR>
890 if (validator(column_name) ==
false) {
912 RelProject(std::vector<std::unique_ptr<const RexScalar>>& scalar_exprs,
913 const std::vector<std::string>& fields,
914 std::shared_ptr<const RelAlgNode> input)
925 void setExpressions(std::vector<std::unique_ptr<const RexScalar>>& exprs)
const {
934 if (!dynamic_cast<const RexInput*>(expr.get())) {
967 std::shared_ptr<const RelAlgNode> input)
override {
972 std::shared_ptr<const RelAlgNode> old_input,
973 std::shared_ptr<const RelAlgNode> input,
974 std::optional<std::unordered_map<unsigned, unsigned>> old_to_new_index_map);
977 std::unique_ptr<const RexScalar> new_input);
984 std::shared_ptr<RelAlgNode>
deepCopy()
const override {
985 return std::make_shared<RelProject>(*this);
999 return hints_->find(candidate_hint_name) !=
hints_->end();
1008 return hints_->at(hint_name);
1016 template <
typename EXPR_VISITOR_FUNCTOR>
1025 scalar_exprs_.emplace_back(std::make_unique<RexFunctionOperator const>(
1026 std::string(
"OFFSET_IN_FRAGMENT"), transient_vector,
SQLTypeInfo(
kINT,
false)));
1027 fields_.emplace_back(
"EXPR$DELETE_OFFSET_IN_FRAGMENT");
1040 std::vector<std::unique_ptr<const RexAgg>>& agg_exprs,
1041 const std::vector<std::string>& fields,
1042 std::shared_ptr<const RelAlgNode> input)
1061 fields_ = std::move(new_fields);
1067 std::vector<const RexAgg*>
result;
1069 result.push_back(agg_expr.release());
1078 const std::vector<std::unique_ptr<const RexAgg>>&
getAggExprs()
const {
1082 void setAggExprs(std::vector<std::unique_ptr<const RexAgg>>& agg_exprs) {
1087 return cat(::typeName(
this),
1099 std::shared_ptr<RelAlgNode>
deepCopy()
const override {
1100 return std::make_shared<RelAggregate>(*this);
1112 return hints_->find(candidate_hint_name) !=
hints_->end();
1121 return hints_->at(hint_name);
1139 std::shared_ptr<const RelAlgNode> rhs,
1140 std::unique_ptr<const RexScalar>& condition,
1163 void replaceInput(std::shared_ptr<const RelAlgNode> old_input,
1164 std::shared_ptr<const RelAlgNode> input)
override;
1167 return cat(::typeName(
this),
1178 std::shared_ptr<RelAlgNode>
deepCopy()
const override {
1179 return std::make_shared<RelJoin>(*this);
1191 return hints_->find(candidate_hint_name) !=
hints_->end();
1200 return hints_->at(hint_name);
1217 std::shared_ptr<const RelAlgNode> input)
1218 :
filter_(std::move(filter)) {
1231 filter_ = std::move(condition);
1236 void replaceInput(std::shared_ptr<const RelAlgNode> old_input,
1237 std::shared_ptr<const RelAlgNode> input)
override;
1240 return cat(::typeName(
this),
1247 std::shared_ptr<RelAlgNode>
deepCopy()
const override {
1248 return std::make_shared<RelFilter>(*this);
1260 std::vector<std::shared_ptr<const RelJoin>>& original_joins);
1266 std::string
toString()
const override;
1268 size_t size()
const override;
1270 std::shared_ptr<RelAlgNode>
deepCopy()
const override;
1291 const std::vector<const Rex*>& target_exprs,
1292 const size_t groupby_count,
1293 const std::vector<const RexAgg*>& agg_exprs,
1294 const std::vector<std::string>& fields,
1295 std::vector<std::unique_ptr<const RexScalar>>& scalar_sources,
1297 bool update_disguised_as_select =
false,
1298 bool delete_disguised_as_select =
false,
1299 bool varlen_update_required =
false,
1303 delete_disguised_as_select,
1304 varlen_update_required,
1305 manipulation_target_table,
1315 CHECK_EQ(fields.size(), target_exprs.size());
1316 for (
auto agg_expr : agg_exprs) {
1323 void replaceInput(std::shared_ptr<const RelAlgNode> old_input,
1324 std::shared_ptr<const RelAlgNode> input)
override;
1355 std::string
toString()
const override;
1357 std::shared_ptr<RelAlgNode>
deepCopy()
const override {
1358 return std::make_shared<RelCompound>(*this);
1370 return hints_->find(candidate_hint_name) !=
hints_->end();
1379 return hints_->at(hint_name);
1392 std::vector<std::unique_ptr<const RexScalar>>
1404 const size_t offset,
1405 std::shared_ptr<const RelAlgNode> input)
1435 return cat(::typeName(
this),
1450 std::shared_ptr<RelAlgNode>
deepCopy()
const override {
1451 return std::make_shared<RelSort>(*this);
1480 throw std::runtime_error(
"Unexpected ModifyOperation enum encountered.");
1484 if (op_string ==
"INSERT") {
1486 }
else if (op_string ==
"DELETE") {
1488 }
else if (op_string ==
"UPDATE") {
1492 throw std::runtime_error(
1493 std::string(
"Unsupported logical modify operation encountered " + op_string));
1499 std::string
const& op_string,
1532 size_t size()
const override {
return 0; }
1533 std::shared_ptr<RelAlgNode>
deepCopy()
const override {
1534 return std::make_shared<RelModify>(*this);
1538 return cat(::typeName(
this),
1545 ", target_column_list=",
1555 CHECK(previous_project_node !=
nullptr);
1564 int target_update_column_expr_start = 0;
1566 CHECK(target_update_column_expr_start >= 0);
1567 CHECK(target_update_column_expr_end >= 0);
1569 bool varlen_update_required =
false;
1571 auto varlen_scan_visitor = [
this,
1572 &varlen_update_required,
1573 target_update_column_expr_start,
1574 target_update_column_expr_end](
int index) {
1575 if (index >= target_update_column_expr_start &&
1576 index <= target_update_column_expr_end) {
1577 auto target_index = index - target_update_column_expr_start;
1584 const auto shard_cd =
1587 if ((column_desc->columnName == shard_cd->columnName)) {
1588 throw std::runtime_error(
"UPDATE of a shard key is currently unsupported.");
1593 if (column_desc->columnType.is_varlen()) {
1594 varlen_update_required =
true;
1596 if (column_desc->columnType.is_geometry()) {
1597 throw std::runtime_error(
"UPDATE of a geo column is unsupported.");
1609 CHECK(previous_project_node !=
nullptr);
1626 std::vector<std::string>& fields,
1627 std::vector<const Rex*> col_inputs,
1628 std::vector<std::unique_ptr<const RexScalar>>& table_func_inputs,
1629 std::vector<std::unique_ptr<const RexScalar>>& target_exprs)
1635 for (
const auto& input : inputs) {
1642 void replaceInput(std::shared_ptr<const RelAlgNode> old_input,
1643 std::shared_ptr<const RelAlgNode> input)
override;
1672 std::shared_ptr<RelAlgNode>
deepCopy()
const override {
1673 return std::make_shared<RelTableFunction>(*this);
1677 return cat(::typeName(
this),
1685 ", table_func_inputs=",
1696 std::vector<const Rex*>
1701 std::vector<std::unique_ptr<const RexScalar>>
1708 using RowValues = std::vector<std::unique_ptr<const RexScalar>>;
1711 std::vector<RowValues>& values)
1719 std::string ret = ::typeName(
this) +
"(";
1720 for (
const auto& target_meta_info :
tuple_type_) {
1721 ret +=
" (" + target_meta_info.get_resname() +
" " +
1722 target_meta_info.get_type_info().get_type_name() +
")";
1730 const auto& row =
values_[row_idx];
1732 return row[col_idx].get();
1739 return values_.front().size();
1749 std::shared_ptr<RelAlgNode>
deepCopy()
const override {
1750 return std::make_shared<RelLogicalValues>(*this);
1761 std::shared_ptr<RelAlgNode>
deepCopy()
const override {
1762 return std::make_shared<RelLogicalUnion>(*this);
1764 size_t size()
const override;
1765 std::string
toString()
const override;
1819 const rapidjson::Value& query_ast,
1830 const auto& last_ptr =
nodes_.back();
1857 auto target = hints_delivered->find(kv.first);
1858 if (target != hints_delivered->end()) {
1859 int target_hint_num = kv.second;
1860 switch (target_hint_num) {
1864 VLOG(1) <<
"A user forces to run the query on the CPU execution mode";
1868 CHECK(target->second.getListOptions().size() == 1);
1869 double overlaps_bucket_threshold =
1870 std::stod(target->second.getListOptions()[0]);
1871 if (overlaps_bucket_threshold >= 0.0 && overlaps_bucket_threshold <= 90.0) {
1875 VLOG(1) <<
"Skip the given query hint \"overlaps_bucket_threshold\" ("
1876 << overlaps_bucket_threshold
1877 <<
") : the hint value should be within 0.0 ~ 1.0";
1882 CHECK(target->second.getListOptions().size() == 1);
1883 std::stringstream ss(target->second.getListOptions()[0]);
1884 int overlaps_max_size;
1885 ss >> overlaps_max_size;
1886 if (overlaps_max_size >= 0) {
1890 VLOG(1) <<
"Skip the query hint \"overlaps_max_size\" ("
1891 << overlaps_max_size
1892 <<
") : the hint value should be larger than or equal to zero";
1899 VLOG(1) <<
"Allowing GPU hash table build for overlaps join.";
1920 std::vector<std::shared_ptr<RelAlgNode>>
nodes_;
std::vector< std::shared_ptr< const RexScalar > > scalar_exprs_
DEVICE auto upper_bound(ARGS &&...args)
const size_t getGroupByCount() const
std::string toString() const override
std::string toString() const override
std::shared_ptr< const RelAlgNode > getRootNodeShPtr() const
bool is_agg(const Analyzer::Expr *expr)
void validate_non_foreign_table_write(const TableDescriptor *table_descriptor)
SortField getCollation(const size_t i) const
std::unique_ptr< const RexScalar > condition_
const RexScalar * getThen(const size_t idx) const
std::unique_ptr< const RexScalar > ConstRexScalarPtr
const std::unordered_map< std::string, std::string > & getKVOptions()
std::vector< std::unique_ptr< const RexScalar > > getExpressionsAndRelease()
void setFields(std::vector< std::string > &fields)
void setVarlenUpdateRequired(bool required) const
std::vector< std::unique_ptr< const RexScalar > > outer_conditions_per_level_
bool const isFlattened() const
std::unique_ptr< RexSubQuery > deepCopy() const
const HintExplained & getHintInfo(const std::string &hint_name) const
ConstRexScalarPtrVector getPartitionKeysAndRelease() const
const HintExplained & getHintInfo(const std::string &hint_name) const
void replaceInput(std::shared_ptr< const RelAlgNode > old_input, std::shared_ptr< const RelAlgNode > input) override
std::string toString() const override
std::shared_ptr< RelAlgNode > deepCopy() const override
int getUpdateColumnCount() const
ColumnNameList target_columns_
std::vector< std::unique_ptr< const RexScalar > > table_func_inputs_
std::string toString() const override
const Rex * getTargetExpr(const size_t i) const
RexLiteral(const std::string &val, const SQLTypes type, const SQLTypes target_type, const unsigned scale, const unsigned precision, const unsigned type_scale, const unsigned type_precision)
const bool hasHintEnabled(const std::string &candidate_hint_name) const
const std::shared_ptr< const RelAlgNode > ra_
RelAlgNode(RelAlgInputs inputs={})
size_t size() const override
class for a per-database catalog. also includes metadata for the current database and the current use...
Hints * getDeliveredHints()
size_t size() const override
std::shared_ptr< RelAlgNode > deepCopy() const override
std::vector< std::string > list_options_
bool coversOriginalNode(const RelAlgNode *node) const
const RexScalar * getFilterExpr() const
size_t size() const override
const unsigned type_scale_
size_t getOperand(size_t idx) const
std::string toString() const override
std::string toString() const override
const RexScalar * getElse() const
RexOperator(const SQLOps op, std::vector< std::unique_ptr< const RexScalar >> &operands, const SQLTypeInfo &type)
const QueryHint getQueryHints() const
RelCompound(std::unique_ptr< const RexScalar > &filter_expr, const std::vector< const Rex * > &target_exprs, const size_t groupby_count, const std::vector< const RexAgg * > &agg_exprs, const std::vector< std::string > &fields, std::vector< std::unique_ptr< const RexScalar >> &scalar_sources, const bool is_agg, bool update_disguised_as_select=false, bool delete_disguised_as_select=false, bool varlen_update_required=false, TableDescriptor const *manipulation_target_table=nullptr, ColumnNameList target_columns=ColumnNameList())
const HintExplained & getHintInfo(const std::string &hint_name) const
static thread_local unsigned crt_id_
void setCondition(std::unique_ptr< const RexScalar > &condition)
void setTargetColumns(ColumnNameList const &target_columns) const
std::string function_name_
const std::string getFieldName(const size_t i) const
std::unique_ptr< RexRef > deepCopy() const
void addHint(const HintExplained &hint_explained)
void setEmptyResult(bool emptyResult)
RexScalar const * copyAndRedirectSource(RexScalar const *, size_t input_idx) const
std::unique_ptr< const RexScalar > ConstRexScalarPtr
void replaceInput(std::shared_ptr< const RelAlgNode > old_input, std::shared_ptr< const RelAlgNode > input) override
const RexScalar * getOuterCondition(const size_t nesting_level) const
const JoinType join_type_
const HintExplained & getHintInfo(const std::string &hint_name) const
void applyDeleteModificationsToInputNode()
bool operator==(const SortField &that) const
std::vector< std::string > TargetColumnList
size_t size() const override
const SQLTypeInfo & getType() const
Hints * getDeliveredHints()
const RexScalar * getOperand(const size_t idx) const
const RexWindowBound upper_bound_
const SqlWindowFunctionKind kind_
std::string toString() const override
size_t size() const override
std::vector< const Rex * > col_inputs_
bool hasEquivCollationOf(const RelSort &that) const
const std::vector< SortField > & getCollation() const
const std::vector< std::string > fields_
SortDirection getSortDir() const
size_t getNumRows() const
const SQLTypeInfo & getType() const
std::string toString() const override
void applyUpdateModificationsToInputNode()
std::string toString() const override
const boost::variant< int64_t, double, std::string, bool, void * > literal_
std::unordered_map< std::string, std::string > kv_options_
std::string getFieldName(const size_t idx) const
void build(const rapidjson::Value &query_ast, RelAlgDagBuilder &root_dag_builder)
const RexScalar * getCondition() const
std::shared_ptr< std::shared_ptr< const ExecutionResult > > result_
const std::vector< std::shared_ptr< RexSubQuery > > & getSubqueries() const
RexSubQuery & operator=(const RexSubQuery &)=delete
std::unique_ptr< const RexScalar > else_expr_
const std::vector< TargetMetaInfo > getTupleType() const
void addManagedInput(std::shared_ptr< const RelAlgNode > input)
unsigned getScale() const
const std::vector< TargetMetaInfo > tuple_type_
RexSubQuery(std::shared_ptr< SQLTypeInfo > type, std::shared_ptr< std::shared_ptr< const ExecutionResult >> result, const std::shared_ptr< const RelAlgNode > ra)
std::vector< std::string > fields_
std::vector< std::unique_ptr< const RexAgg > > getAggExprsAndRelease()
std::shared_ptr< RelAlgNode > deepCopy() const override
const RexScalar * getWhen(const size_t idx) const
void addHint(const HintExplained &hint_explained)
const void * context_data_
void setFilterExpr(std::unique_ptr< const RexScalar > &new_expr)
void appendInput(std::string new_field_name, std::unique_ptr< const RexScalar > new_input)
const RexScalar * getCondition() const
std::shared_ptr< RelAlgNode > deepCopy() const override
std::vector< ConstRexScalarPtr > ConstRexScalarPtrVector
const TableDescriptor * td_
const Catalog_Namespace::Catalog & cat_
const RexScalar * getOperandAndRelease(const size_t idx) const
void checkForMatchingMetaInfoTypes() const
std::vector< std::unique_ptr< const RexScalar > > scalar_sources_
const ColumnDescriptor * getShardColumnMetadataForTable(const TableDescriptor *td) const
virtual std::shared_ptr< RelAlgNode > deepCopy() const =0
std::shared_ptr< const RelAlgNode > getAndOwnInput(const size_t idx) const
virtual std::unique_ptr< const RexOperator > getDisambiguated(std::vector< std::unique_ptr< const RexScalar >> &operands) const
HintExplained(std::string hint_name, bool query_hint, bool is_marker, bool has_kv_type_options, std::unordered_map< std::string, std::string > &kv_options)
const std::string getFieldName(const size_t i) const
void addHint(const HintExplained &hint_explained)
void clearContextData() const
TableDescriptor const *const getTableDescriptor() const
const size_t groupby_count_
std::string toString() const override
unsigned getTypePrecision() const
const std::string getFieldName(const size_t i) const
std::vector< SortField > collation_
std::string toString() const override
size_t getRowsSize() const
size_t getColInputsSize() const
void addHint(const HintExplained &hint_explained)
std::vector< RexLiteral > RexLiteralArray
void setDeleteViaSelectFlag() const
This file contains the class specification and related data structures for Catalog.
const size_t getScalarSourcesSize() const
std::vector< std::shared_ptr< RexSubQuery > > subqueries_
void setExpressions(std::vector< std::unique_ptr< const RexScalar >> &exprs) const
TargetColumnList const & getUpdateColumnNames()
const RenderInfo * render_info_
std::string to_string() const
RexLiteral(const double val, const SQLTypes type, const SQLTypes target_type, const unsigned scale, const unsigned precision, const unsigned type_scale, const unsigned type_precision)
const rapidjson::Value & field(const rapidjson::Value &obj, const char field[]) noexcept
const unsigned precision_
std::string toString() const override
bool is_delete_via_select_
SQLOps getOperator() const
std::vector< std::shared_ptr< RelAlgNode > > nodes_
std::shared_ptr< const RelAlgNode > RelAlgNodeInputPtr
void registerQueryHints(Hints *hints_delivered)
std::shared_ptr< RelAlgNode > deepCopy() const override
const RexScalar * getTableFuncInputAtAndRelease(const size_t idx)
const SQLTypeInfo & getType() const
ColumnNameList const & getTargetColumns() const
std::unique_ptr< const RexOperator > disambiguatedOperands(ConstRexScalarPtrVector &operands, ConstRexScalarPtrVector &partition_keys, ConstRexScalarPtrVector &order_keys, const std::vector< SortField > &collation) const
const NullSortedPosition nulls_pos_
const std::vector< RowValues > values_
RexCase(std::vector< std::pair< std::unique_ptr< const RexScalar >, std::unique_ptr< const RexScalar >>> &expr_pair_list, std::unique_ptr< const RexScalar > &else_expr)
NullSortedPosition getNullsPosition() const
void resetQueryExecutionState()
Hints * getDeliveredHints()
std::unique_ptr< Hints > hints_
const TableDescriptor * table_descriptor_
const std::vector< std::shared_ptr< const RelJoin > > original_joins_
std::shared_ptr< const RexScalar > offset
std::unique_ptr< Hints > hints_
std::vector< std::unique_ptr< const RexScalar > > scalar_exprs_
std::shared_ptr< RelAlgNode > deepCopy() const override
size_t size() const override
std::shared_ptr< SQLTypeInfo > type_
size_t size() const override
const RexScalar * getAndReleaseCondition()
const ColumnDescriptor * getMetadataForColumn(int tableId, const std::string &colName) const
size_t branchCount() const
const std::string & getHintName() const
RexSubQuery(const std::shared_ptr< const RelAlgNode > ra)
const RelAlgNode * getInput(const size_t idx) const
RelFilter(std::unique_ptr< const RexScalar > &filter, std::shared_ptr< const RelAlgNode > input)
bool varlen_update_required_
Catalog_Namespace::Catalog const & catalog_
const unsigned type_precision_
const RelAlgNode & getRootNode() const
RelAggregate(const size_t groupby_count, std::vector< std::unique_ptr< const RexAgg >> &agg_exprs, const std::vector< std::string > &fields, std::shared_ptr< const RelAlgNode > input)
std::unique_ptr< const RexScalar > filter_
void setCondition(std::unique_ptr< const RexScalar > &condition)
std::vector< std::unique_ptr< const RexScalar > > operands_
const size_t groupby_count_
const std::vector< std::string > & getListOptions()
std::vector< std::string > fields_
std::shared_ptr< RelAlgNode > deepCopy() const override
RelSort(const std::vector< SortField > &collation, const size_t limit, const size_t offset, std::shared_ptr< const RelAlgNode > input)
const RexScalar * getProjectAtAndRelease(const size_t idx) const
void visitScalarExprs(EXPR_VISITOR_FUNCTOR visitor_functor) const
std::shared_ptr< RelAlgNode > deepCopy() const override
std::unique_ptr< Hints > hints_
void setInheritPaths(std::vector< int > &interit_paths)
size_t getTableFuncInputsSize() const
std::unique_ptr< RexLiteral > deepCopy() const
virtual void replaceInput(std::shared_ptr< const RelAlgNode > old_input, std::shared_ptr< const RelAlgNode > input)
std::string toString() const
void eachNode(std::function< void(RelAlgNode const *)> const &) const
static std::string yieldModifyOperationString(ModifyOperation const op)
ModifyOperation getOperation() const
void setModifiedTableDescriptor(TableDescriptor const *td) const
size_t size() const override
static ModifyOperation yieldModifyOperationEnum(std::string const &op_string)
const bool hasHintEnabled(const std::string &candidate_hint_name) const
void setScalarSources(std::vector< std::unique_ptr< const RexScalar >> &new_sources)
std::vector< std::unique_ptr< const RexAgg > > agg_exprs_
std::vector< TargetMetaInfo > targets_metainfo_
const std::vector< std::unique_ptr< const RexAgg > > & getAggExprs() const
Hints * getDeliveredHints()
void replaceInput(std::shared_ptr< const RelAlgNode > old_input, std::shared_ptr< const RelAlgNode > input) override
bool isEmptyResult() const
std::unordered_map< std::string, HintExplained > Hints
const RelAlgNode * getRelAlg() const
size_t size() const override
RexWindowFunctionOperator(const SqlWindowFunctionKind kind, ConstRexScalarPtrVector &operands, ConstRexScalarPtrVector &partition_keys, ConstRexScalarPtrVector &order_keys, const std::vector< SortField > collation, const RexWindowBound &lower_bound, const RexWindowBound &upper_bound, const bool is_rows, const SQLTypeInfo &ti)
const RexScalar * getProjectAt(const size_t idx) const
std::vector< std::shared_ptr< const RelAlgNode >> RelAlgInputs
const std::vector< SortField > collation_
const std::vector< std::string > & getFields() const
const HintExplained & getHintInfo(const std::string &hint_name) const
bool hasInput(const RelAlgNode *needle) const
const std::vector< std::string > & getFieldNames() const
const std::vector< std::string > & getFields() const
const std::vector< int > & getInteritPath()
void setCollation(std::vector< SortField > &&collation)
std::unique_ptr< Hints > hints_
const ConstRexScalarPtrVector & getPartitionKeys() const
const RexWindowBound & getLowerBound() const
std::string tree_string(const RelAlgNode *ra, const size_t depth)
DEVICE auto lower_bound(ARGS &&...args)
std::string toString() const override
const void * getContextData() const
std::unique_ptr< Hints > hints_
const std::vector< const Rex * > target_exprs_
void setTableFuncInputs(std::vector< std::unique_ptr< const RexScalar >> &exprs)
void replaceInput(std::shared_ptr< const RelAlgNode > old_input, std::shared_ptr< const RelAlgNode > input) override
RelLogicalUnion(RelAlgInputs, bool is_all)
std::vector< std::unique_ptr< const RexAgg > > agg_exprs_
SortField(const size_t field, const SortDirection sort_dir, const NullSortedPosition nulls_pos)
std::unique_ptr< const RexScalar > filter_expr_
void resetQueryExecutionState()
bool hasWindowFunctionExpr() const
std::vector< ConstRexScalarPtr > ConstRexScalarPtrVector
ConstRexScalarPtrVector order_keys_
SqlWindowFunctionKind getKind() const
const size_t getGroupByCount() const
size_t collationCount() const
RelModify(Catalog_Namespace::Catalog const &cat, TableDescriptor const *const td, bool flattened, ModifyOperation op, TargetColumnList const &target_column_list, RelAlgNodeInputPtr input)
virtual size_t size() const =0
auto const isDeleteViaSelect() const
void registerSubquery(std::shared_ptr< RexSubQuery > subquery)
void setExecutionResult(const std::shared_ptr< const ExecutionResult > result)
bool operator==(const RelSort &that) const
void setKVOptions(std::unordered_map< std::string, std::string > &kv_options)
std::shared_ptr< RelAlgNode > deepCopy() const override
RelLogicalValues(const std::vector< TargetMetaInfo > &tuple_type, std::vector< RowValues > &values)
std::string toString() const override
std::string get_type_name() const
std::unique_ptr< const RexOperator > getDisambiguated(std::vector< std::unique_ptr< const RexScalar >> &operands) const override
RexLiteral(const bool val, const SQLTypes type, const SQLTypes target_type, const unsigned scale, const unsigned precision, const unsigned type_scale, const unsigned type_precision)
std::vector< std::pair< std::unique_ptr< const RexScalar >, std::unique_ptr< const RexScalar > > > expr_pair_list_
RelAlgDagBuilder()=delete
RexFunctionOperator(const std::string &name, ConstRexScalarPtrVector &operands, const SQLTypeInfo &ti)
const SQLTypes target_type_
std::unique_ptr< const RexScalar > condition_
const RexWindowBound & getUpperBound() const
const std::vector< std::string > field_names_
RelLeftDeepInnerJoin(const std::shared_ptr< RelFilter > &filter, RelAlgInputs inputs, std::vector< std::shared_ptr< const RelJoin >> &original_joins)
const RexScalar * getTableFuncInputAt(const size_t idx) const
const bool hasHintEnabled(const std::string &candidate_hint_name) const
unsigned getPrecision() const
double overlaps_bucket_threshold
RelTableFunction(const std::string &function_name, RelAlgInputs inputs, std::vector< std::string > &fields, std::vector< const Rex * > col_inputs, std::vector< std::unique_ptr< const RexScalar >> &table_func_inputs, std::vector< std::unique_ptr< const RexScalar >> &target_exprs)
std::string getFunctionName() const
std::string toString() const override
virtual std::string toString() const =0
const SortDirection sort_dir_
std::vector< const RexAgg * > getAggregatesAndRelease()
const std::vector< std::string > & getFields() const
std::string getFieldName(const size_t i) const
bool has_kv_type_options_
const RexScalar * getValueAt(const size_t row_idx, const size_t col_idx) const
bool g_enable_watchdog false
const RexScalar * getInnerCondition() const
virtual std::string toString() const =0
ModifyOperation operation_
ConstRexScalarPtrVector getOrderKeysAndRelease() const
const ConstRexScalarPtrVector & getOrderKeys() const
RelProject(std::vector< std::unique_ptr< const RexScalar >> &scalar_exprs, const std::vector< std::string > &fields, std::shared_ptr< const RelAlgNode > input)
auto const isUpdateViaSelect() const
HintExplained(std::string hint_name, bool query_hint, bool is_marker, bool has_kv_type_options)
void setOutputMetainfo(const std::vector< TargetMetaInfo > &targets_metainfo) const
SQLTypes getTargetType() const
RANodeOutput get_node_output(const RelAlgNode *ra_node)
std::string toString() const override
ConstRexScalarPtrVector partition_keys_
HintExplained(std::string hint_name, bool query_hint, bool is_marker, bool has_kv_type_options, std::vector< std::string > &list_options)
bool hasKvOptions() const
std::vector< RexLiteralArray > TupleContentsArray
std::shared_ptr< RelAlgNode > deepCopy() const override
const std::vector< size_t > operands_
void replaceInput(std::shared_ptr< const RelAlgNode > old_input, std::shared_ptr< const RelAlgNode > input) override
std::string toString() const override
std::shared_ptr< RelAlgNode > deepCopy() const override
const std::shared_ptr< RelFilter > original_filter_
void injectOffsetInFragmentExpr() const
bool overlaps_allow_gpu_build
std::vector< std::string > ColumnNameList
ModifyManipulationTarget(bool const update_via_select=false, bool const delete_via_select=false, bool const varlen_update_required=false, TableDescriptor const *table_descriptor=nullptr, ColumnNameList target_columns=ColumnNameList())
RexLiteral(const SQLTypes target_type)
QueryNotSupported(const std::string &reason)
size_t size() const override
std::vector< RexInput > RANodeOutput
std::vector< std::unique_ptr< const RexScalar >> RowValues
const size_t getAggExprsCount() const
const std::string & getName() const
const size_t inputCount() const
auto const isVarlenUpdateRequired() const
RexAgg(const SQLAgg agg, const bool distinct, const SQLTypeInfo &type, const std::vector< size_t > &operands)
unsigned getTypeScale() const
const RexScalar * getAndReleaseCondition() const
void setListOptions(std::vector< std::string > &list_options)
std::string toString() const override
size_t size() const override
std::unique_ptr< RexAgg > deepCopy() const
const RexWindowBound lower_bound_
RexLiteral(const int64_t val, const SQLTypes type, const SQLTypes target_type, const unsigned scale, const unsigned precision, const unsigned type_scale, const unsigned type_precision)
void setUpdateViaSelectFlag() const
const bool hasHintEnabled(const std::string &candidate_hint_name) const
RelScan(const TableDescriptor *td, const std::vector< std::string > &field_names)
size_t size() const override
const std::vector< TargetMetaInfo > & getOutputMetainfo() const
const TableDescriptor * getTableDescriptor() const
std::shared_ptr< const ExecutionResult > getExecutionResult() const
void setContextData(const void *context_data) const
TargetColumnList target_column_list_
TableDescriptor const * table_descriptor_
void setAggExprs(std::vector< std::unique_ptr< const RexAgg >> &agg_exprs)
std::vector< std::string > fields_
JoinType getJoinType() const
bool hasContextData() const
const bool hasHintEnabled(const std::string &candidate_hint_name) const
std::shared_ptr< RelAlgNode > deepCopy() const override
RelJoin(std::shared_ptr< const RelAlgNode > lhs, std::shared_ptr< const RelAlgNode > rhs, std::unique_ptr< const RexScalar > &condition, const JoinType join_type)
void addHint(const HintExplained &hint_explained)
RelModify(Catalog_Namespace::Catalog const &cat, TableDescriptor const *const td, bool flattened, std::string const &op_string, TargetColumnList const &target_column_list, RelAlgNodeInputPtr input)
void setFields(std::vector< std::string > &new_fields)
bool is_update_via_select_
RexRef(const size_t index)
std::string toString() const override
TableDescriptor const * getModifiedTableDescriptor() const
const std::string getFieldName(const size_t i) const
const RexScalar * getScalarSource(const size_t i) const
constexpr auto is_datetime(SQLTypes type)
std::vector< std::unique_ptr< const RexScalar > > target_exprs_
Hints * getDeliveredHints()
std::vector< int > inherit_paths_
bool validateTargetColumns(VALIDATION_FUNCTOR validator) const
static void resetRelAlgFirstId() noexcept
std::unordered_map< std::string, int > OMNISCI_SUPPORTED_HINT_CLASS