OmniSciDB  72c90bc290
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PlanState.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 #pragma once
18 
19 #include <unordered_set>
20 
21 #include "Analyzer/Analyzer.h"
24 #include "Shared/DbObjectKeys.h"
25 #include "TargetExprBuilder.h"
26 
27 class Executor;
28 
29 struct JoinInfo {
30  JoinInfo(const std::vector<std::shared_ptr<Analyzer::BinOper>>& equi_join_tautologies,
31  const std::vector<std::shared_ptr<HashJoin>>& join_hash_tables)
32  : equi_join_tautologies_(equi_join_tautologies)
33  , join_hash_tables_(join_hash_tables) {}
34 
35  std::vector<std::shared_ptr<Analyzer::BinOper>>
36  equi_join_tautologies_; // expressions we equi-join on are true by
37  // definition when using a hash join; we'll
38  // fold them to true during code generation
39  std::vector<std::shared_ptr<HashJoin>> join_hash_tables_;
40  std::unordered_set<size_t> sharded_range_table_indices_;
41 };
42 
43 struct PlanState {
44  using DeletedColumnsMap = std::unordered_map<shared::TableKey, const ColumnDescriptor*>;
45  using HoistedFiltersSet = std::unordered_set<std::shared_ptr<Analyzer::Expr>>;
46 
47  PlanState(const bool allow_lazy_fetch,
48  const std::vector<InputTableInfo>& query_infos,
49  const DeletedColumnsMap& deleted_columns,
50  const Executor* executor)
51  : allow_lazy_fetch_(allow_lazy_fetch)
52  , join_info_({std::vector<std::shared_ptr<Analyzer::BinOper>>{}, {}})
53  , deleted_columns_(deleted_columns)
54  , query_infos_(query_infos)
55  , executor_(executor) {}
56 
57  std::vector<int64_t> init_agg_vals_;
59  std::unordered_map<InputColDescriptor, size_t> global_to_local_col_ids_;
60  std::unordered_map<size_t, std::vector<std::shared_ptr<Analyzer::Expr>>>
63  JoinInfo join_info_;
65  const std::vector<InputTableInfo>& query_infos_;
66  std::list<std::shared_ptr<Analyzer::Expr>> simple_quals_;
67 
68  const Executor* executor_;
69 
71  const std::list<std::shared_ptr<const InputColDescriptor>>& global_col_ids);
72 
73  int getLocalColumnId(const Analyzer::ColumnVar* col_var, const bool fetch_column);
74 
75  bool isLazyFetchColumn(const Analyzer::Expr* target_expr) const;
76 
77  bool isLazyFetchColumn(const InputColDescriptor& col_desc) {
78  Analyzer::ColumnVar column(
79  SQLTypeInfo(),
80  {col_desc.getScanDesc().getTableKey(), col_desc.getColId()},
81  col_desc.getScanDesc().getNestLevel());
82  return isLazyFetchColumn(&column);
83  }
84 
86  auto deleted_cols_it = deleted_columns_.find(table_key);
87  if (deleted_cols_it != deleted_columns_.end()) {
88  return deleted_cols_it->second;
89  }
90  return nullptr;
91  }
92 
93  void addSimpleQual(std::shared_ptr<Analyzer::Expr> simple_qual) {
94  simple_quals_.push_back(simple_qual);
95  }
96 
97  std::list<std::shared_ptr<Analyzer::Expr>> getSimpleQuals() const {
98  return simple_quals_;
99  }
100 
101  void addNonHashtableQualForLeftJoin(size_t idx, std::shared_ptr<Analyzer::Expr> expr);
102 
103  const std::unordered_set<shared::ColumnKey>& getColumnsToFetch() const;
104  const std::unordered_set<shared::ColumnKey>& getColumnsToNotFetch() const;
105  bool isColumnToFetch(const shared::ColumnKey& column_key) const;
106  bool isColumnToNotFetch(const shared::ColumnKey& column_key) const;
107  void addColumnToFetch(const shared::ColumnKey& column_key,
108  bool unmark_lazy_fetch = false);
109  void addColumnToNotFetch(const shared::ColumnKey& column_key);
111  const std::vector<TargetExprCodegen>& target_exprs_to_codegen) const;
113  const std::vector<TargetExprCodegen>& target_exprs_to_codegen);
114 
115  private:
116  std::unordered_set<shared::ColumnKey> columns_to_fetch_;
117  mutable std::unordered_set<shared::ColumnKey> columns_to_not_fetch_;
118 };
Defines data structures for the semantic analysis phase of query processing.
JoinInfo join_info_
Definition: PlanState.h:63
int32_t getNestLevel() const
std::list< std::shared_ptr< Analyzer::Expr > > simple_quals_
Definition: PlanState.h:66
std::unordered_map< size_t, std::vector< std::shared_ptr< Analyzer::Expr > > > left_join_non_hashtable_quals_
Definition: PlanState.h:61
std::unordered_map< shared::TableKey, const ColumnDescriptor * > DeletedColumnsMap
Definition: PlanState.h:44
std::unordered_map< InputColDescriptor, size_t > global_to_local_col_ids_
Definition: PlanState.h:59
void addColumnToFetch(const shared::ColumnKey &column_key, bool unmark_lazy_fetch=false)
Definition: PlanState.cpp:124
bool allow_lazy_fetch_
Definition: PlanState.h:62
std::unordered_set< std::shared_ptr< Analyzer::Expr >> HoistedFiltersSet
Definition: PlanState.h:45
JoinInfo(const std::vector< std::shared_ptr< Analyzer::BinOper >> &equi_join_tautologies, const std::vector< std::shared_ptr< HashJoin >> &join_hash_tables)
Definition: PlanState.h:30
std::unordered_set< shared::ColumnKey > columns_to_not_fetch_
Definition: PlanState.h:117
void addNonHashtableQualForLeftJoin(size_t idx, std::shared_ptr< Analyzer::Expr > expr)
Definition: PlanState.cpp:95
std::unordered_set< size_t > sharded_range_table_indices_
Definition: PlanState.h:40
bool hasExpressionNeedsLazyFetch(const std::vector< TargetExprCodegen > &target_exprs_to_codegen) const
Definition: PlanState.cpp:152
const Executor * executor_
Definition: PlanState.h:68
std::vector< int64_t > init_agg_vals_
Definition: PlanState.h:57
Helpers for codegen of target expressions.
void addColumnToNotFetch(const shared::ColumnKey &column_key)
Definition: PlanState.cpp:147
executor_(executor)
Definition: PlanState.h:55
std::vector< std::shared_ptr< Analyzer::BinOper > > equi_join_tautologies_
Definition: PlanState.h:36
bool isColumnToFetch(const shared::ColumnKey &column_key) const
Definition: PlanState.cpp:114
int getLocalColumnId(const Analyzer::ColumnVar *col_var, const bool fetch_column)
Definition: PlanState.cpp:52
bool isLazyFetchColumn(const Analyzer::Expr *target_expr) const
Definition: PlanState.cpp:22
int getColId() const
bool isLazyFetchColumn(const InputColDescriptor &col_desc)
Definition: PlanState.h:77
PlanState(const bool allow_lazy_fetch, const std::vector< InputTableInfo > &query_infos, const DeletedColumnsMap &deleted_columns, const Executor *executor)
Definition: PlanState.h:47
const std::vector< InputTableInfo > & query_infos_
Definition: PlanState.h:65
specifies the content in-memory of a row in the column metadata table
void allocateLocalColumnIds(const std::list< std::shared_ptr< const InputColDescriptor >> &global_col_ids)
Definition: PlanState.cpp:40
const ColumnDescriptor * getDeletedColForTable(const shared::TableKey &table_key)
Definition: PlanState.h:85
const std::unordered_set< shared::ColumnKey > & getColumnsToFetch() const
Definition: PlanState.cpp:106
const shared::TableKey & getTableKey() const
Executor(const ExecutorId id, Data_Namespace::DataMgr *data_mgr, const size_t block_size_x, const size_t grid_size_x, const size_t max_gpu_slab_size, const std::string &debug_dir, const std::string &debug_file)
Definition: Execute.cpp:272
void addSimpleQual(std::shared_ptr< Analyzer::Expr > simple_qual)
Definition: PlanState.h:93
const DeletedColumnsMap deleted_columns_
Definition: PlanState.h:64
bool isColumnToNotFetch(const shared::ColumnKey &column_key) const
Definition: PlanState.cpp:118
HoistedFiltersSet hoisted_filters_
Definition: PlanState.h:58
std::list< std::shared_ptr< Analyzer::Expr > > getSimpleQuals() const
Definition: PlanState.h:97
const std::unordered_set< shared::ColumnKey > & getColumnsToNotFetch() const
Definition: PlanState.cpp:110
std::vector< std::shared_ptr< HashJoin > > join_hash_tables_
Definition: PlanState.h:39
std::unordered_set< shared::ColumnKey > columns_to_fetch_
Definition: PlanState.h:116
void registerNonLazyFetchExpression(const std::vector< TargetExprCodegen > &target_exprs_to_codegen)
Definition: PlanState.cpp:161
const InputDescriptor & getScanDesc() const