17 #ifndef QUERYENGINE_RELALGEXECUTOR_H 18 #define QUERYENGINE_RELALGEXECUTOR_H 54 std::shared_ptr<const query_state::QueryState>
query_state =
nullptr)
60 , queue_time_ms_(0) {}
64 const std::string& query_ra,
65 std::shared_ptr<const query_state::QueryState>
query_state =
nullptr)
72 , queue_time_ms_(0) {}
76 std::unique_ptr<RelAlgDagBuilder> query_dag,
77 std::shared_ptr<const query_state::QueryState>
query_state =
nullptr)
81 , query_dag_(
std::move(query_dag))
84 , queue_time_ms_(0) {}
90 const bool just_explain_plan,
97 const int64_t queue_time_ms);
99 void prepareLeafExecution(
108 const int64_t queue_time_ms,
109 const bool with_existing_temp_tables =
false);
112 const std::pair<size_t, size_t> interval,
116 const int64_t queue_time_ms);
119 const size_t step_idx,
125 const auto it_ok = leaf_results_.emplace(
id, result);
131 return query_dag_->getRootNode();
133 const std::vector<std::shared_ptr<RexSubQuery>>&
getSubqueries() const noexcept {
135 return query_dag_->getSubqueries();
139 return query_dag_->getQueryHints();
148 Executor* getExecutor()
const;
150 void cleanupPostExecution();
152 static std::string getErrorMessageFromCode(
const int32_t error_code);
154 void executePostExecutionCallback();
159 const bool just_explain_plan,
163 const size_t step_idx,
167 const int64_t queue_time_ms);
172 const int64_t queue_time_ms);
177 const int64_t queue_time_ms);
183 const int64_t queue_time_ms);
189 const int64_t queue_time_ms);
195 const int64_t queue_time_ms,
196 const std::optional<size_t> previous_count);
201 const int64_t queue_time_ms);
208 const int64_t queue_time_ms);
211 std::unique_ptr<WindowFunctionContext> createWindowFunctionContext(
213 const std::shared_ptr<Analyzer::BinOper>& partition_key_cond,
215 const std::vector<InputTableInfo>& query_infos,
218 std::shared_ptr<RowSetMemoryOwner> row_set_mem_owner);
224 const int64_t queue_time_ms);
230 const int64_t queue_time_ms);
241 const int64_t queue_time_ms);
263 const std::vector<TargetMetaInfo>& targets_meta,
268 const int64_t queue_time_ms,
269 const std::optional<size_t> previous_count = std::nullopt);
271 size_t getNDVEstimation(
const WorkUnit& work_unit,
277 std::optional<size_t> getFilteredCountAll(
const WorkUnit& work_unit,
283 const std::vector<std::shared_ptr<Analyzer::Expr>>& filter_expressions,
287 std::vector<PushedDownFilterInfo> selectFiltersToBePushedDown(
292 bool isRowidLookup(
const WorkUnit& work_unit);
295 const std::vector<TargetMetaInfo>& targets_meta,
300 const bool was_multifrag_kernel_launch,
301 const int64_t queue_time_ms);
305 static void handlePersistentError(
const int32_t error_code);
315 const bool just_explain);
323 const bool just_explain);
332 const bool just_explain,
336 CHECK_LT(
size_t(0), result->colCount());
338 const auto it_ok = temporary_tables_.emplace(table_id, result);
348 const std::vector<InputDescriptor>& input_descs,
349 const std::unordered_map<const RelAlgNode*, int>& input_to_nest_level,
350 const bool just_explain);
354 std::list<std::shared_ptr<Analyzer::Expr>> makeJoinQuals(
356 const std::vector<JoinType>& join_types,
357 const std::unordered_map<const RelAlgNode*, int>& input_to_nest_level,
358 const bool just_explain)
const;
370 static const size_t max_groups_buffer_entry_default_guess{16384};
375 friend class PendingExecutionClosure;
378 #endif // QUERYENGINE_RELALGEXECUTOR_H
bool is_agg(const Analyzer::Expr *expr)
std::optional< std::function< void()> > post_execution_callback_
const std::vector< size_t > left_deep_join_input_sizes
void addLeafResult(const unsigned id, const AggregatedResult &result)
class for a per-database catalog. also includes metadata for the current database and the current use...
std::unordered_map< int, std::unordered_map< int, std::shared_ptr< const ColumnarResults > >> ColumnCacheMap
Streaming Top N algorithm.
static SpeculativeTopNBlacklist speculative_topn_blacklist_
RelAlgExecutionUnit exe_unit
TemporaryTables temporary_tables_
RelAlgExecutor(Executor *executor, const Catalog_Namespace::Catalog &cat, const std::string &query_ra, std::shared_ptr< const query_state::QueryState > query_state=nullptr)
void addTemporaryTable(const int table_id, const ResultSetPtr &result)
std::unique_ptr< QueryRewriter > query_rewriter
std::unordered_map< unsigned, AggregatedResult > leaf_results_
std::vector< TargetInfo > TargetInfoList
std::vector< JoinCondition > JoinQualsPerNestingLevel
std::shared_ptr< ResultSet > ResultSetPtr
const std::vector< std::shared_ptr< RexSubQuery > > & getSubqueries() const noexcept
bool g_skip_intermediate_count
RelAlgExecutor(Executor *executor, const Catalog_Namespace::Catalog &cat, std::unique_ptr< RelAlgDagBuilder > query_dag, std::shared_ptr< const query_state::QueryState > query_state=nullptr)
std::vector< std::shared_ptr< Analyzer::Expr > > target_exprs_owned_
A container for relational algebra descriptors defining the execution order for a relational algebra ...
const Catalog_Namespace::Catalog & cat_
const std::vector< size_t > input_permutation
QueryHint getParsedQueryHints()
std::shared_ptr< const query_state::QueryState > query_state_
Speculative top N algorithm.
const MergeType merge_type
void eraseFromTemporaryTables(const int table_id)
const RelAlgNode & getRootRelAlgNode() const
TableFunctionExecutionUnit exe_unit
const size_t max_groups_buffer_entry_guess
RelAlgExecutor(Executor *executor, const Catalog_Namespace::Catalog &cat, std::shared_ptr< const query_state::QueryState > query_state=nullptr)
std::unique_ptr< RelAlgDagBuilder > query_dag_
std::unique_ptr< TransactionParameters > dml_transaction_parameters_