Repository: incubator-quickstep Updated Branches: refs/heads/common-subexpression 675dcf8de -> a3a4ec7bf
Updates Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/a3a4ec7b Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/a3a4ec7b Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/a3a4ec7b Branch: refs/heads/common-subexpression Commit: a3a4ec7bf2f99634c9e50c6b5f1a43b9e455f133 Parents: 675dcf8 Author: Jianqiao Zhu <jianq...@cs.wisc.edu> Authored: Wed Apr 19 22:37:29 2017 -0500 Committer: Jianqiao Zhu <jianq...@cs.wisc.edu> Committed: Wed Apr 19 22:37:29 2017 -0500 ---------------------------------------------------------------------- query_optimizer/ExecutionGenerator.cpp | 6 +++--- query_optimizer/PhysicalGenerator.cpp | 2 ++ query_optimizer/rules/ReuseAggregateExpressions.cpp | 11 ++++++++++- 3 files changed, 15 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/a3a4ec7b/query_optimizer/ExecutionGenerator.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/ExecutionGenerator.cpp b/query_optimizer/ExecutionGenerator.cpp index 8f44cc1..e01e34d 100644 --- a/query_optimizer/ExecutionGenerator.cpp +++ b/query_optimizer/ExecutionGenerator.cpp @@ -1580,7 +1580,7 @@ void ExecutionGenerator::convertAggregate( ->canUseCollisionFreeAggregation(physical_plan, estimated_num_groups, &max_num_groups)) { - std::cout << "Use collision free\n"; +// std::cout << "Use collision free\n"; aggr_state_proto->set_hash_table_impl_type( serialization::HashTableImplType::COLLISION_FREE_VECTOR); aggr_state_proto->set_estimated_num_entries(max_num_groups); @@ -1588,12 +1588,12 @@ void ExecutionGenerator::convertAggregate( } else { if (cost_model_for_aggregation_->canUseTwoPhaseNumericAggregation( physical_plan, estimated_num_groups)) { - std::cout << "Use two phase numeric\n"; +// std::cout << "Use two phase numeric\n"; aggr_state_proto->set_hash_table_impl_type( serialization::HashTableImplType::THREAD_PRIVATE_COMPACT_KEY); } else { // Otherwise, use SeparateChaining. - std::cout << "Use normal\n"; +// std::cout << "Use normal\n"; aggr_state_proto->set_hash_table_impl_type( serialization::HashTableImplType::SEPARATE_CHAINING); } http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/a3a4ec7b/query_optimizer/PhysicalGenerator.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/PhysicalGenerator.cpp b/query_optimizer/PhysicalGenerator.cpp index 07bd024..4405761 100644 --- a/query_optimizer/PhysicalGenerator.cpp +++ b/query_optimizer/PhysicalGenerator.cpp @@ -155,6 +155,8 @@ P::PhysicalPtr PhysicalGenerator::optimizePlan() { rules.emplace_back(new CollapseSelection()); + rules.emplace_back(new PruneColumns()); + rules.emplace_back(new ExtractCommonSubexpression(optimizer_context_)); // NOTE(jianqiao): Adding rules after InjectJoinFilters (or AttachLIPFilters) requires http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/a3a4ec7b/query_optimizer/rules/ReuseAggregateExpressions.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/rules/ReuseAggregateExpressions.cpp b/query_optimizer/rules/ReuseAggregateExpressions.cpp index 3036833..7151fdf 100644 --- a/query_optimizer/rules/ReuseAggregateExpressions.cpp +++ b/query_optimizer/rules/ReuseAggregateExpressions.cpp @@ -47,6 +47,7 @@ #include "types/operations/binary_operations/BinaryOperationFactory.hpp" #include "types/operations/binary_operations/BinaryOperationID.hpp" #include "utility/EqualsAnyConstant.hpp" +#include "utility/HashError.hpp" #include "glog/logging.h" @@ -106,7 +107,11 @@ P::PhysicalPtr ReuseAggregateExpressions::applyToNode( } } if (arguments.size() == 1) { - agg_expr_info[arguments.front()][agg_id].emplace_back(i); + try { + agg_expr_info[arguments.front()][agg_id].emplace_back(i); + } catch (const HashNotSupported &e) { + continue; + } } } @@ -190,6 +195,10 @@ P::PhysicalPtr ReuseAggregateExpressions::applyToNode( std::vector<E::AliasPtr> new_agg_exprs; std::vector<E::NamedExpressionPtr> new_select_exprs; + for (const auto &grouping_expr : aggregate->grouping_expressions()) { + new_select_exprs.emplace_back(E::ToRef(grouping_expr)); + } + for (std::size_t i = 0; i < agg_refs.size(); ++i) { const auto &agg_ref = agg_refs[i]; const E::AliasPtr &agg_expr = agg_exprs[i];