OmniSciDB  a5dc49c757
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RelAlgExecutor.h
Go to the documentation of this file.
1 /*
2  * Copyright 2022 HEAVY.AI, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef QUERYENGINE_RELALGEXECUTOR_H
18 #define QUERYENGINE_RELALGEXECUTOR_H
19 
23 #include "QueryEngine/Execute.h"
27 #include "QueryEngine/RelAlgDag.h"
30 #include "Shared/scope.h"
32 
33 #include <ctime>
34 #include <sstream>
35 
36 #include "StorageIOFacility.h"
37 
38 extern bool g_skip_intermediate_count;
39 
40 enum class MergeType { Union, Reduce };
41 
45  const unsigned node_id;
47 };
48 
49 namespace Fragmenter_Namespace {
50 class InsertDataLoader;
51 }
52 
54  public:
55  using TargetInfoList = std::vector<TargetInfo>;
56 
57  RelAlgExecutor(Executor* executor,
58  std::shared_ptr<const query_state::QueryState> query_state = nullptr)
59  : StorageIOFacility(executor)
60  , executor_(executor)
61  , query_state_(std::move(query_state))
62  , now_(0)
63  , queue_time_ms_(0) {
65  }
66 
67  RelAlgExecutor(Executor* executor,
68  const std::string& query_ra,
69  std::shared_ptr<const query_state::QueryState> query_state = nullptr)
70  : StorageIOFacility(executor)
71  , executor_(executor)
72  , query_dag_(RelAlgDagBuilder::buildDag(query_ra, true))
73  , query_state_(std::move(query_state))
74  , now_(0)
75  , queue_time_ms_(0) {
77  }
78 
79  RelAlgExecutor(Executor* executor,
80  std::unique_ptr<RelAlgDag> query_dag,
81  std::shared_ptr<const query_state::QueryState> query_state = nullptr)
82  : StorageIOFacility(executor)
83  , executor_(executor)
84  , query_dag_(std::move(query_dag))
85  , query_state_(std::move(query_state))
86  , now_(0)
87  , queue_time_ms_(0) {
89  }
90 
91  size_t getOuterFragmentCount(const CompilationOptions& co, const ExecutionOptions& eo);
92 
94  const ExecutionOptions& eo,
95  const bool just_explain_plan,
96  const bool explain_verbose,
97  RenderInfo* render_info);
98 
100  const CompilationOptions& co,
101  const ExecutionOptions& eo,
102  RenderInfo* render_info,
103  const int64_t queue_time_ms);
104 
106  const AggregatedColRange& agg_col_range,
107  const StringDictionaryGenerations& string_dictionary_generations,
108  const TableGenerations& table_generations);
109 
111  const CompilationOptions& co,
112  const ExecutionOptions& eo,
113  RenderInfo* render_info,
114  const int64_t queue_time_ms,
115  const bool with_existing_temp_tables = false);
116 
118  const std::pair<size_t, size_t> interval,
119  const CompilationOptions& co,
120  const ExecutionOptions& eo,
121  RenderInfo* render_info,
122  const int64_t queue_time_ms);
123 
125  const size_t step_idx,
126  const CompilationOptions& co,
127  const ExecutionOptions& eo,
128  RenderInfo* render_info);
129 
130  void addLeafResult(const unsigned id, const AggregatedResult& result) {
131  const auto it_ok = leaf_results_.emplace(id, result);
132  CHECK(it_ok.second);
133  }
134 
135  std::unique_ptr<RelAlgDag> getOwnedRelAlgDag() {
136  CHECK(query_dag_);
137  return std::move(query_dag_);
138  }
139 
141  if (!query_dag_) {
142  query_dag_ = std::make_unique<RelAlgDag>();
143  }
144  return query_dag_.get();
145  }
146 
147  const RelAlgNode& getRootRelAlgNode() const {
148  CHECK(query_dag_);
149  return query_dag_->getRootNode();
150  }
151 
152  void prepareForeignTables();
153 
154  std::shared_ptr<const RelAlgNode> getRootRelAlgNodeShPtr() const {
155  CHECK(query_dag_);
156  return query_dag_->getRootNodeShPtr();
157  }
158 
159  std::pair<std::vector<unsigned>, std::unordered_map<unsigned, JoinQualsPerNestingLevel>>
160  getJoinInfo(const RelAlgNode* root_node);
161 
162  std::shared_ptr<RelAlgTranslator> getRelAlgTranslator(const RelAlgNode* root_node);
163 
164  const std::vector<std::shared_ptr<RexSubQuery>>& getSubqueries() const noexcept {
165  CHECK(query_dag_);
166  return query_dag_->getSubqueries();
167  };
168 
169  std::optional<RegisteredQueryHint> getParsedQueryHint(const RelAlgNode* node) {
170  return query_dag_ ? query_dag_->getQueryHint(node) : std::nullopt;
171  }
172 
174  std::unordered_map<size_t, std::unordered_map<unsigned, RegisteredQueryHint>>>
176  return query_dag_ ? std::make_optional(query_dag_->getQueryHints()) : std::nullopt;
177  }
178 
179  std::optional<RegisteredQueryHint> getGlobalQueryHint() {
180  return query_dag_ ? std::make_optional(query_dag_->getGlobalHints()) : std::nullopt;
181  }
182 
185  const Catalog_Namespace::SessionInfo& session);
186 
190 
191  Executor* getExecutor() const;
192 
193  void cleanupPostExecution();
194 
195  static std::string getErrorMessageFromCode(const int32_t error_code);
196 
198 
199  // used for testing
201  Executor* executor) {
202  CHECK(executor);
203  CHECK(root_node);
204  return RaExecutionSequence(root_node, executor);
205  }
206 
207  void prepareForeignTable();
208 
209  std::unordered_set<shared::TableKey> getPhysicalTableIds() const;
210 
212 
213  private:
215 
217  const ExecutionOptions& eo,
218  const bool just_explain_plan,
219  const bool explain_verbose,
220  RenderInfo* render_info);
221 
222  void executeRelAlgStep(const RaExecutionSequence& seq,
223  const size_t step_idx,
224  const CompilationOptions&,
225  const ExecutionOptions&,
226  RenderInfo*,
227  const int64_t queue_time_ms);
228 
229  void executeUpdate(const RelAlgNode* node,
230  const CompilationOptions& co,
231  const ExecutionOptions& eo,
232  const int64_t queue_time_ms);
233 
234  void executeDelete(const RelAlgNode* node,
235  const CompilationOptions& co,
236  const ExecutionOptions& eo_in,
237  const int64_t queue_time_ms);
238 
240  const CompilationOptions&,
241  const ExecutionOptions&,
242  RenderInfo*,
243  const int64_t queue_time_ms);
244 
246  const CompilationOptions& co,
247  const ExecutionOptions& eo,
248  RenderInfo* render_info,
249  const int64_t queue_time_ms);
250 
252  const CompilationOptions&,
253  const ExecutionOptions&,
254  RenderInfo*,
255  const int64_t queue_time_ms,
256  const std::optional<size_t> previous_count);
257 
259  const CompilationOptions&,
260  const ExecutionOptions&,
261  const int64_t queue_time_ms);
262 
264  const CompilationOptions&,
265  const ExecutionOptions&,
266  RenderInfo*,
267  const int64_t queue_time_ms);
268 
270  const CompilationOptions&,
271  const ExecutionOptions&,
272  RenderInfo*,
273  const int64_t queue_time_ms);
274 
276 
277  ExecutionResult executeModify(const RelModify* modify, const ExecutionOptions& eo);
278 
280  const RaExecutionSequence&,
281  const CompilationOptions&,
282  const ExecutionOptions&,
283  RenderInfo*,
284  const int64_t queue_time_ms);
285 
286  // TODO(alex): just move max_groups_buffer_entry_guess to RelAlgExecutionUnit once
287  // we deprecate the plan-based executor paths and remove WorkUnit
288  struct WorkUnit {
290  const RelAlgNode* body;
292  std::unique_ptr<QueryRewriter> query_rewriter;
293  const std::vector<size_t> input_permutation;
294  const std::vector<size_t> left_deep_join_input_sizes;
295  };
296 
299  const RelAlgNode* body;
300  };
301 
303  std::list<Analyzer::OrderEntry>& order_entries,
304  const ExecutionOptions& eo);
305 
307  const WorkUnit& work_unit,
308  const std::vector<TargetMetaInfo>& targets_meta,
309  const bool is_agg,
310  const CompilationOptions& co_in,
311  const ExecutionOptions& eo_in,
312  RenderInfo*,
313  const int64_t queue_time_ms,
314  const std::optional<size_t> previous_count = std::nullopt);
315 
316  // Computes the window function results to be used by the query.
317  void computeWindow(const WorkUnit& work_unit,
318  const CompilationOptions& co,
319  const ExecutionOptions& eo,
320  ColumnCacheMap& column_cache_map,
321  const int64_t queue_time_ms);
322 
323  // Creates the window context for the given window function.
324  std::unique_ptr<WindowFunctionContext> createWindowFunctionContext(
325  const Analyzer::WindowFunction* window_func,
326  const std::shared_ptr<Analyzer::BinOper>& partition_key_cond,
327  std::unordered_map<QueryPlanHash, std::shared_ptr<HashJoin>>& partition_cache,
328  std::unordered_map<QueryPlanHash, size_t>& sorted_partition_key_ref_count_map,
329  const WorkUnit& work_unit,
330  const std::vector<InputTableInfo>& query_infos,
331  const CompilationOptions& co,
332  ColumnCacheMap& column_cache_map,
333  std::shared_ptr<RowSetMemoryOwner> row_set_mem_owner);
334 
335  size_t getNDVEstimation(const WorkUnit& work_unit,
336  const int64_t range,
337  const bool is_agg,
338  const CompilationOptions& co,
339  const ExecutionOptions& eo);
340 
341  bool hasDeletedRowInQuery(std::vector<InputTableInfo> const&) const;
342 
343  std::optional<size_t> getFilteredCountAll(const RelAlgExecutionUnit& ra_exe_unit,
344  const bool is_agg,
345  const CompilationOptions& co,
346  const ExecutionOptions& eo);
347 
349  const std::vector<std::shared_ptr<Analyzer::Expr>>& filter_expressions,
350  const CompilationOptions& co,
351  const ExecutionOptions& eo);
352 
353  std::vector<PushedDownFilterInfo> selectFiltersToBePushedDown(
354  const RelAlgExecutor::WorkUnit& work_unit,
355  const CompilationOptions& co,
356  const ExecutionOptions& eo);
357 
358  bool isRowidLookup(const WorkUnit& work_unit);
359 
361  ColumnCacheMap& column_cache,
362  const std::vector<TargetMetaInfo>& targets_meta,
363  const bool is_agg,
364  const CompilationOptions& co,
365  const ExecutionOptions& eo,
366  RenderInfo* render_info,
367  const QueryExecutionError& e,
368  const int64_t queue_time_ms);
369 
370  // Allows an out of memory error through if CPU retry is enabled. Otherwise, throws an
371  // appropriate exception corresponding to the query error code.
372  static void handlePersistentError(const int32_t error_code);
373 
374  WorkUnit createWorkUnit(const RelAlgNode*, const SortInfo&, const ExecutionOptions& eo);
375 
377  const SortInfo&,
378  const ExecutionOptions& eo);
379 
381  const SortInfo&,
382  const bool just_explain);
383 
385  const SortInfo&,
386  const ExecutionOptions& eo);
387 
389  const SortInfo&,
390  const bool just_explain);
391 
392  WorkUnit createJoinWorkUnit(const RelJoin*, const SortInfo&, const bool just_explain);
393 
395  const SortInfo&,
396  const ExecutionOptions& eo);
397 
399  const bool just_explain,
400  const bool is_gpu);
401 
402  void addTemporaryTable(const int table_id, const ResultSetPtr& result) {
403  CHECK_LT(size_t(0), result->colCount());
404  CHECK_LT(table_id, 0);
405  auto it_ok = temporary_tables_.emplace(table_id, result);
406  CHECK(it_ok.second);
407  }
408 
409  void eraseFromTemporaryTables(const int table_id) { temporary_tables_.erase(table_id); }
410 
411  void handleNop(RaExecutionDesc& ed);
412 
413  std::unordered_map<unsigned, JoinQualsPerNestingLevel>& getLeftDeepJoinTreesInfo() {
414  return left_deep_join_info_;
415  }
416 
418  const RelLeftDeepInnerJoin* join,
419  const std::vector<InputDescriptor>& input_descs,
420  const std::unordered_map<const RelAlgNode*, int>& input_to_nest_level,
421  const bool just_explain);
422 
423  // Transform the provided `join_condition` to conjunctive form, find composite
424  // key opportunities and finally translate it to an Analyzer expression.
425  std::list<std::shared_ptr<Analyzer::Expr>> makeJoinQuals(
426  const RexScalar* join_condition,
427  const std::vector<JoinType>& join_types,
428  const std::unordered_map<const RelAlgNode*, int>& input_to_nest_level,
429  const bool just_explain) const;
430 
431  void setHasStepForUnion(bool flag) { has_step_for_union_ = flag; }
432 
433  bool hasStepForUnion() const { return has_step_for_union_; }
434 
435  bool canUseResultsetCache(const ExecutionOptions& eo, RenderInfo* render_info) const;
436 
437  void setupCaching(const RelAlgNode* ra);
438 
439  Executor* executor_;
440  std::unique_ptr<RelAlgDag> query_dag_;
441  std::shared_ptr<const query_state::QueryState> query_state_;
443  time_t now_;
444  std::unordered_map<unsigned, JoinQualsPerNestingLevel> left_deep_join_info_;
445  std::vector<std::shared_ptr<Analyzer::Expr>> target_exprs_owned_; // TODO(alex): remove
446  std::unordered_map<unsigned, AggregatedResult> leaf_results_;
447  int64_t queue_time_ms_;
450 
451  std::unique_ptr<TransactionParameters> dml_transaction_parameters_;
452  std::optional<std::function<void()>> post_execution_callback_;
453 
455 };
456 
457 #endif // QUERYENGINE_RELALGEXECUTOR_H
bool is_agg(const Analyzer::Expr *expr)
int64_t queue_time_ms_
std::optional< std::function< void()> > post_execution_callback_
ExecutionResult executeAggregate(const RelAggregate *aggregate, const CompilationOptions &co, const ExecutionOptions &eo, RenderInfo *render_info, const int64_t queue_time_ms)
RelAlgExecutor(Executor *executor, std::unique_ptr< RelAlgDag > query_dag, std::shared_ptr< const query_state::QueryState > query_state=nullptr)
const std::vector< size_t > left_deep_join_input_sizes
ExecutionResult handleOutOfMemoryRetry(const RelAlgExecutor::WorkUnit &work_unit, ColumnCacheMap &column_cache, const std::vector< TargetMetaInfo > &targets_meta, const bool is_agg, const CompilationOptions &co, const ExecutionOptions &eo, RenderInfo *render_info, const QueryExecutionError &e, const int64_t queue_time_ms)
void addLeafResult(const unsigned id, const AggregatedResult &result)
AggregatedColRange computeColRangesCache()
RelAlgExecutor(Executor *executor, const std::string &query_ra, std::shared_ptr< const query_state::QueryState > query_state=nullptr)
WorkUnit createProjectWorkUnit(const RelProject *, const SortInfo &, const ExecutionOptions &eo)
ExecutionResult executeRelAlgSeq(const RaExecutionSequence &seq, const CompilationOptions &co, const ExecutionOptions &eo, RenderInfo *render_info, const int64_t queue_time_ms, const bool with_existing_temp_tables=false)
TableFunctionWorkUnit createTableFunctionWorkUnit(const RelTableFunction *table_func, const bool just_explain, const bool is_gpu)
WorkUnit createAggregateWorkUnit(const RelAggregate *, const SortInfo &, const bool just_explain)
const RelAlgNode * body
bool g_skip_intermediate_count
Streaming Top N algorithm.
TableGenerations computeTableGenerations()
static SpeculativeTopNBlacklist speculative_topn_blacklist_
RelAlgExecutor(Executor *executor, std::shared_ptr< const query_state::QueryState > query_state=nullptr)
RelAlgExecutionUnit exe_unit
TemporaryTables temporary_tables_
ExecutionResult executeRelAlgQueryWithFilterPushDown(const RaExecutionSequence &seq, const CompilationOptions &co, const ExecutionOptions &eo, RenderInfo *render_info, const int64_t queue_time_ms)
void setupCaching(const RelAlgNode *ra)
FilterSelectivity getFilterSelectivity(const std::vector< std::shared_ptr< Analyzer::Expr >> &filter_expressions, const CompilationOptions &co, const ExecutionOptions &eo)
std::string join(T const &container, std::string const &delim)
std::unordered_map< unsigned, JoinQualsPerNestingLevel > & getLeftDeepJoinTreesInfo()
std::vector< PushedDownFilterInfo > selectFiltersToBePushedDown(const RelAlgExecutor::WorkUnit &work_unit, const CompilationOptions &co, const ExecutionOptions &eo)
std::optional< std::unordered_map< size_t, std::unordered_map< unsigned, RegisteredQueryHint > > > getParsedQueryHints()
ExecutionResult executeModify(const RelModify *modify, const ExecutionOptions &eo)
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
ExecutionResult executeLogicalValues(const RelLogicalValues *, const ExecutionOptions &)
std::optional< RegisteredQueryHint > getParsedQueryHint(const RelAlgNode *node)
ExecutionResult executeFilter(const RelFilter *, const CompilationOptions &, const ExecutionOptions &, RenderInfo *, const int64_t queue_time_ms)
const std::vector< std::shared_ptr< RexSubQuery > > & getSubqueries() const noexcept
QueryStepExecutionResult executeRelAlgQuerySingleStep(const RaExecutionSequence &seq, const size_t step_idx, const CompilationOptions &co, const ExecutionOptions &eo, RenderInfo *render_info)
bool hasStepForUnion() const
void handleNop(RaExecutionDesc &ed)
void computeWindow(const WorkUnit &work_unit, const CompilationOptions &co, const ExecutionOptions &eo, ColumnCacheMap &column_cache_map, const int64_t queue_time_ms)
std::shared_ptr< const RelAlgNode > getRootRelAlgNodeShPtr() const
std::unordered_map< int, const ResultSetPtr & > TemporaryTables
Definition: InputMetadata.h:31
WorkUnit createCompoundWorkUnit(const RelCompound *, const SortInfo &, const ExecutionOptions &eo)
WorkUnit createWorkUnit(const RelAlgNode *, const SortInfo &, const ExecutionOptions &eo)
RaExecutionSequence getRaExecutionSequence(const RelAlgNode *root_node, Executor *executor)
std::vector< std::shared_ptr< Analyzer::Expr > > target_exprs_owned_
std::unordered_set< shared::TableKey > getPhysicalTableIds() const
std::unique_ptr< WindowFunctionContext > createWindowFunctionContext(const Analyzer::WindowFunction *window_func, const std::shared_ptr< Analyzer::BinOper > &partition_key_cond, std::unordered_map< QueryPlanHash, std::shared_ptr< HashJoin >> &partition_cache, std::unordered_map< QueryPlanHash, size_t > &sorted_partition_key_ref_count_map, const WorkUnit &work_unit, const std::vector< InputTableInfo > &query_infos, const CompilationOptions &co, ColumnCacheMap &column_cache_map, std::shared_ptr< RowSetMemoryOwner > row_set_mem_owner)
size_t getOuterFragmentCount(const CompilationOptions &co, const ExecutionOptions &eo)
MergeType
void executeUpdate(const RelAlgNode *node, const CompilationOptions &co, const ExecutionOptions &eo, const int64_t queue_time_ms)
A container for relational algebra descriptors defining the execution order for a relational algebra ...
friend class PendingExecutionClosure
std::optional< size_t > getFilteredCountAll(const RelAlgExecutionUnit &ra_exe_unit, const bool is_agg, const CompilationOptions &co, const ExecutionOptions &eo)
void executePostExecutionCallback()
size_t getNDVEstimation(const WorkUnit &work_unit, const int64_t range, const bool is_agg, const CompilationOptions &co, const ExecutionOptions &eo)
ExecutionResult executeRelAlgSubSeq(const RaExecutionSequence &seq, const std::pair< size_t, size_t > interval, const CompilationOptions &co, const ExecutionOptions &eo, RenderInfo *render_info, const int64_t queue_time_ms)
const std::vector< size_t > input_permutation
WorkUnit createUnionWorkUnit(const RelLogicalUnion *, const SortInfo &, const ExecutionOptions &eo)
bool g_enable_smem_group_by true
void executeRelAlgStep(const RaExecutionSequence &seq, const size_t step_idx, const CompilationOptions &, const ExecutionOptions &, RenderInfo *, const int64_t queue_time_ms)
ExecutionResult executeSimpleInsert(const Analyzer::Query &insert_query, Fragmenter_Namespace::InsertDataLoader &inserter, const Catalog_Namespace::SessionInfo &session)
Executor * getExecutor() const
std::optional< RegisteredQueryHint > getGlobalQueryHint()
ExecutionResult executeTableFunction(const RelTableFunction *, const CompilationOptions &, const ExecutionOptions &, const int64_t queue_time_ms)
std::unique_ptr< RelAlgDag > query_dag_
std::unordered_map< unsigned, JoinQualsPerNestingLevel > left_deep_join_info_
ExecutionResult executeWorkUnit(const WorkUnit &work_unit, const std::vector< TargetMetaInfo > &targets_meta, const bool is_agg, const CompilationOptions &co_in, const ExecutionOptions &eo_in, RenderInfo *, const int64_t queue_time_ms, const std::optional< size_t > previous_count=std::nullopt)
#define CHECK_LT(x, y)
Definition: Logger.h:303
WorkUnit createJoinWorkUnit(const RelJoin *, const SortInfo &, const bool just_explain)
ExecutionResult executeUnion(const RelLogicalUnion *, const RaExecutionSequence &, const CompilationOptions &, const ExecutionOptions &, RenderInfo *, const int64_t queue_time_ms)
std::shared_ptr< const query_state::QueryState > query_state_
Speculative top N algorithm.
const MergeType merge_type
std::unordered_map< shared::TableKey, std::unordered_map< int, std::shared_ptr< const ColumnarResults >>> ColumnCacheMap
const RelAlgNode & getRootRelAlgNode() const
size_t QueryPlanHash
void eraseFromTemporaryTables(const int table_id)
bool canUseResultsetCache(const ExecutionOptions &eo, RenderInfo *render_info) const
ExecutionResult executeSort(const RelSort *, const CompilationOptions &, const ExecutionOptions &, RenderInfo *, const int64_t queue_time_ms)
bool isRowidLookup(const WorkUnit &work_unit)
ExecutionResult executeProject(const RelProject *, const CompilationOptions &, const ExecutionOptions &, RenderInfo *, const int64_t queue_time_ms, const std::optional< size_t > previous_count)
TableFunctionExecutionUnit exe_unit
bool hasDeletedRowInQuery(std::vector< InputTableInfo > const &) const
static void handlePersistentError(const int32_t error_code)
const size_t max_groups_buffer_entry_guess
StringDictionaryGenerations computeStringDictionaryGenerations()
ExecutionResult executeRelAlgQueryNoRetry(const CompilationOptions &co, const ExecutionOptions &eo, const bool just_explain_plan, const bool explain_verbose, RenderInfo *render_info)
def error_code
Definition: report.py:234
#define CHECK(condition)
Definition: Logger.h:291
ExecutionResult executeCompound(const RelCompound *, const CompilationOptions &, const ExecutionOptions &, RenderInfo *, const int64_t queue_time_ms)
static std::string getErrorMessageFromCode(const int32_t error_code)
void cleanupPostExecution()
void initializeParallelismHints()
std::list< std::shared_ptr< Analyzer::Expr > > makeJoinQuals(const RexScalar *join_condition, const std::vector< JoinType > &join_types, const std::unordered_map< const RelAlgNode *, int > &input_to_nest_level, const bool just_explain) const
ExecutionResult executeRelAlgQuery(const CompilationOptions &co, const ExecutionOptions &eo, const bool just_explain_plan, const bool explain_verbose, RenderInfo *render_info)
std::unique_ptr< RelAlgDag > getOwnedRelAlgDag()
std::unique_ptr< TransactionParameters > dml_transaction_parameters_
std::pair< std::vector< unsigned >, std::unordered_map< unsigned, JoinQualsPerNestingLevel > > getJoinInfo(const RelAlgNode *root_node)
void executeDelete(const RelAlgNode *node, const CompilationOptions &co, const ExecutionOptions &eo_in, const int64_t queue_time_ms)
ExecutionResult result
std::shared_ptr< RelAlgTranslator > getRelAlgTranslator(const RelAlgNode *root_node)
RelAlgDag * getRelAlgDag()
Executor * executor_
void prepareForSystemTableExecution(const CompilationOptions &co) const
void prepareForeignTable()
WorkUnit createFilterWorkUnit(const RelFilter *, const SortInfo &, const bool just_explain)
JoinQualsPerNestingLevel translateLeftDeepJoinFilter(const RelLeftDeepInnerJoin *join, const std::vector< InputDescriptor > &input_descs, const std::unordered_map< const RelAlgNode *, int > &input_to_nest_level, const bool just_explain)
void setHasStepForUnion(bool flag)
void prepareLeafExecution(const AggregatedColRange &agg_col_range, const StringDictionaryGenerations &string_dictionary_generations, const TableGenerations &table_generations)
WorkUnit createSortInputWorkUnit(const RelSort *, std::list< Analyzer::OrderEntry > &order_entries, const ExecutionOptions &eo)