|
18 | 18 | #include "ErrorHandling.h"
|
19 | 19 | #include "ExpressionRewrite.h"
|
20 | 20 | #include "RelAlgExecutor.h"
|
| 21 | +#include "Visitors/InputColumnsCollector.h" |
21 | 22 |
|
22 | 23 | size_t RelAlgExecutor::getNDVEstimation(const WorkUnit& work_unit,
|
23 | 24 | const int64_t range,
|
@@ -101,8 +102,53 @@ RelAlgExecutionUnit create_ndv_execution_unit(const RelAlgExecutionUnit& ra_exe_
|
101 | 102 | RelAlgExecutionUnit create_count_all_execution_unit(
|
102 | 103 | const RelAlgExecutionUnit& ra_exe_unit,
|
103 | 104 | hdk::ir::ExprPtr replacement_target) {
|
| 105 | + InputColumnsCollector input_columns_collector; |
| 106 | + for (const auto& join_condition : ra_exe_unit.join_quals) { |
| 107 | + for (const auto& q : join_condition.quals) { |
| 108 | + input_columns_collector.visit(q.get()); |
| 109 | + } |
| 110 | + } |
| 111 | + |
| 112 | + for (const auto& q : ra_exe_unit.quals) { |
| 113 | + input_columns_collector.visit(q.get()); |
| 114 | + } |
| 115 | + |
| 116 | + for (const auto& q : ra_exe_unit.simple_quals) { |
| 117 | + input_columns_collector.visit(q.get()); |
| 118 | + } |
| 119 | + |
| 120 | + for (const auto& q : ra_exe_unit.groupby_exprs) { |
| 121 | + if (!q) |
| 122 | + break; |
| 123 | + input_columns_collector.visit(q.get()); |
| 124 | + } |
| 125 | + |
| 126 | + std::list<std::shared_ptr<const InputColDescriptor>> join_input_col_descs; |
| 127 | + auto& input_column_descriptors = input_columns_collector.result(); |
| 128 | + for (auto& col_var : input_column_descriptors) { |
| 129 | + for (auto& icol : ra_exe_unit.input_col_descs) { |
| 130 | + if (icol->getColId() == col_var.getColId() && |
| 131 | + icol->getTableId() == col_var.getTableId()) { |
| 132 | + join_input_col_descs.emplace_back(icol); |
| 133 | + } |
| 134 | + } |
| 135 | + } |
| 136 | + |
| 137 | + if (join_input_col_descs.empty()) { |
| 138 | + join_input_col_descs.insert(join_input_col_descs.end(), |
| 139 | + ra_exe_unit.input_col_descs.begin(), |
| 140 | + ra_exe_unit.input_col_descs.end()); |
| 141 | + } |
| 142 | + |
| 143 | + std::stringstream os{}; |
| 144 | + os << "\n\t[Only Join] Table/Col/Levels: "; |
| 145 | + for (const auto& input_col_desc : join_input_col_descs) { |
| 146 | + os << "(" << input_col_desc->getTableId() << ", " << input_col_desc->getColId() |
| 147 | + << ", " << input_col_desc->getNestLevel() << ") "; |
| 148 | + } |
| 149 | + LOG(WARNING) << "Generating count* WU with following Input Columns" << os.str(); |
104 | 150 | return {ra_exe_unit.input_descs,
|
105 |
| - ra_exe_unit.input_col_descs, |
| 151 | + join_input_col_descs, |
106 | 152 | ra_exe_unit.simple_quals,
|
107 | 153 | ra_exe_unit.quals,
|
108 | 154 | ra_exe_unit.join_quals,
|
|
0 commit comments