Skip to content
This repository was archived by the owner on May 9, 2024. It is now read-only.

Commit 25d78bc

Browse files
committed
fetch only args of join
1 parent ae8667c commit 25d78bc

File tree

4 files changed

+54
-2
lines changed

4 files changed

+54
-2
lines changed

omniscidb/QueryEngine/CardinalityEstimator.cpp

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,19 @@
1919
#include "ExpressionRewrite.h"
2020
#include "RelAlgExecutor.h"
2121

22+
namespace {
23+
24+
class InputColumnsCollector
25+
: public hdk::ir::ExprCollector<std::unordered_set<InputColDescriptor>,
26+
InputColumnsCollector> {
27+
protected:
28+
void visitColumnVar(const hdk::ir::ColumnVar* col_var) override {
29+
result_.insert(InputColDescriptor(col_var->columnInfo(), 0));
30+
}
31+
};
32+
33+
} // namespace
34+
2235
size_t RelAlgExecutor::getNDVEstimation(const WorkUnit& work_unit,
2336
const int64_t range,
2437
const bool is_agg,
@@ -101,8 +114,43 @@ RelAlgExecutionUnit create_ndv_execution_unit(const RelAlgExecutionUnit& ra_exe_
101114
RelAlgExecutionUnit create_count_all_execution_unit(
102115
const RelAlgExecutionUnit& ra_exe_unit,
103116
hdk::ir::ExprPtr replacement_target) {
117+
InputColumnsCollector input_columns_collector;
118+
119+
std::list<std::shared_ptr<const InputColDescriptor>> join_input_col_descs;
120+
std::stringstream os{};
121+
if (!ra_exe_unit.join_quals.empty()) {
122+
os << "\n[Count all] Join Quals: ";
123+
124+
for (size_t i = 0; i < ra_exe_unit.join_quals.size(); i++) {
125+
const auto& join_condition = ra_exe_unit.join_quals[i];
126+
os << "\t" << std::to_string(i) << " " << ::toString(join_condition.type);
127+
for (const auto& q : join_condition.quals) {
128+
input_columns_collector.visit(q.get());
129+
os << q->toString() << ", ";
130+
}
131+
}
132+
}
133+
auto& input_column_descriptors = input_columns_collector.result();
134+
for (auto& col_var : input_column_descriptors) {
135+
LOG(INFO) << "col_vars: " << col_var;
136+
for (auto& icol : ra_exe_unit.input_col_descs) {
137+
if (icol->getColId() == col_var.getColId() &&
138+
icol->getTableId() == col_var.getTableId()) {
139+
join_input_col_descs.emplace_back(icol);
140+
}
141+
}
142+
}
143+
144+
LOG(INFO) << "join quals: " << os.str();
145+
std::stringstream js{};
146+
js << "\n\t[Only Join] Table/Col/Levels: ";
147+
for (const auto& input_col_desc : join_input_col_descs) {
148+
js << "(" << input_col_desc->getTableId() << ", " << input_col_desc->getColId()
149+
<< ", " << input_col_desc->getNestLevel() << ") ";
150+
}
151+
LOG(INFO) << "join in cols: " << js.str();
104152
return {ra_exe_unit.input_descs,
105-
ra_exe_unit.input_col_descs,
153+
join_input_col_descs,
106154
ra_exe_unit.simple_quals,
107155
ra_exe_unit.quals,
108156
ra_exe_unit.join_quals,

omniscidb/QueryEngine/Descriptors/QueryFragmentDescriptor.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,9 @@ void QueryFragmentDescriptor::buildFragmentPerKernelForTable(
151151
}
152152

153153
ExecutionKernelDescriptor execution_kernel_desc{
154-
device_id, {}, fragment.getNumTuples()};
154+
.device_id = device_id,
155+
.fragments = {},
156+
.outer_tuple_count = fragment.getNumTuples()};
155157
if (table_desc_offset) {
156158
const auto frag_ids =
157159
executor->getTableFragmentIndices(ra_exe_unit,

omniscidb/QueryEngine/Execute.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2497,6 +2497,7 @@ ResultSetPtr build_row_for_empty_input(
24972497
const ExecutorDeviceType device_type) {
24982498
std::vector<hdk::ir::ExprPtr> target_exprs_owned_copies;
24992499
std::vector<const hdk::ir::Expr*> target_exprs;
2500+
LOG(INFO) << "Building row for empty input.";
25002501
for (const auto target_expr : target_exprs_in) {
25012502
auto agg_expr = target_expr->as<hdk::ir::AggExpr>();
25022503
CHECK(agg_expr);

omniscidb/QueryEngine/RelAlgExecutor.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1532,6 +1532,7 @@ std::optional<size_t> RelAlgExecutor::getFilteredCountAll(const WorkUnit& work_u
15321532
const bool is_agg,
15331533
const CompilationOptions& co,
15341534
const ExecutionOptions& eo) {
1535+
LOG(INFO) << "[getFilteredCountAll] Should add count* here.";
15351536
const auto count = hdk::ir::makeExpr<hdk::ir::AggExpr>(
15361537
hdk::ir::Context::defaultCtx().integer(config_.exec.group_by.bigint_count ? 8 : 4),
15371538
hdk::ir::AggType::kCount,

0 commit comments

Comments
 (0)