You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by zu...@apache.org on 2017/06/20 21:41:47 UTC

incubator-quickstep git commit: Refactored Create Factory Method for Physical Selection.

Repository: incubator-quickstep
Updated Branches:
  refs/heads/master 261c955ad -> 85b537451


Refactored Create Factory Method for Physical Selection.


Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/85b53745
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/85b53745
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/85b53745

Branch: refs/heads/master
Commit: 85b537451d7684befbaebb263ed983e440c1eb30
Parents: 261c955
Author: Zuyu Zhang <zu...@apache.org>
Authored: Tue Jun 20 15:42:31 2017 -0500
Committer: Zuyu Zhang <zu...@apache.org>
Committed: Tue Jun 20 15:42:31 2017 -0500

----------------------------------------------------------------------
 query_optimizer/physical/Selection.cpp          | 25 --------------------
 query_optimizer/physical/Selection.hpp          |  5 +++-
 query_optimizer/rules/CollapseSelection.cpp     |  3 ++-
 .../rules/ExtractCommonSubexpression.cpp        |  3 ++-
 .../PushDownLowCostDisjunctivePredicate.cpp     |  3 ++-
 query_optimizer/rules/ReorderColumns.cpp        |  3 ++-
 query_optimizer/strategy/Selection.cpp          | 17 ++++++++++++-
 7 files changed, 28 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/85b53745/query_optimizer/physical/Selection.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/physical/Selection.cpp b/query_optimizer/physical/Selection.cpp
index e2fa69e..3307e9e 100644
--- a/query_optimizer/physical/Selection.cpp
+++ b/query_optimizer/physical/Selection.cpp
@@ -42,31 +42,6 @@ namespace physical {
 
 namespace E = ::quickstep::optimizer::expressions;
 
-SelectionPtr Selection::Create(
-      const PhysicalPtr &input,
-      const std::vector<E::NamedExpressionPtr> &project_expressions,
-      const E::PredicatePtr &filter_predicate,
-      PartitionSchemeHeader *output_partition_scheme_header) {
-  std::unique_ptr<PartitionSchemeHeader> partition_scheme_header(output_partition_scheme_header);
-
-  if (!partition_scheme_header) {
-    const PartitionSchemeHeader *input_partition_scheme_header = input->getOutputPartitionSchemeHeader();
-    if (input_partition_scheme_header) {
-      unordered_set<E::ExprId> project_expr_ids;
-      for (const E::NamedExpressionPtr &project_expression : project_expressions) {
-        project_expr_ids.insert(project_expression->id());
-      }
-
-      if (input_partition_scheme_header->reusablePartitionScheme(project_expr_ids)) {
-        partition_scheme_header = std::make_unique<PartitionSchemeHeader>(*input_partition_scheme_header);
-      }
-    }
-  }
-
-  return SelectionPtr(
-      new Selection(input, project_expressions, filter_predicate, partition_scheme_header.release()));
-}
-
 PhysicalPtr Selection::copyWithNewChildren(
     const std::vector<PhysicalPtr> &new_children) const {
   DCHECK_EQ(children().size(), new_children.size());

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/85b53745/query_optimizer/physical/Selection.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/physical/Selection.hpp b/query_optimizer/physical/Selection.hpp
index 204eb2f..4cbc856 100644
--- a/query_optimizer/physical/Selection.hpp
+++ b/query_optimizer/physical/Selection.hpp
@@ -109,7 +109,10 @@ class Selection : public Physical {
       const PhysicalPtr &input,
       const std::vector<expressions::NamedExpressionPtr> &project_expressions,
       const expressions::PredicatePtr &filter_predicate,
-      PartitionSchemeHeader *output_partition_scheme_header = nullptr);
+      PartitionSchemeHeader *output_partition_scheme_header = nullptr) {
+    return SelectionPtr(
+        new Selection(input, project_expressions, filter_predicate, output_partition_scheme_header));
+  }
 
   /**
    * @brief Creates a conjunctive predicate with \p filter_predicates

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/85b53745/query_optimizer/rules/CollapseSelection.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/CollapseSelection.cpp b/query_optimizer/rules/CollapseSelection.cpp
index f92e1b2..fc45ffd 100644
--- a/query_optimizer/rules/CollapseSelection.cpp
+++ b/query_optimizer/rules/CollapseSelection.cpp
@@ -49,7 +49,8 @@ P::PhysicalPtr CollapseSelection::applyToNode(const P::PhysicalPtr &input) {
                              { &project_expressions } /* project_expression_lists */);
     return P::Selection::Create(child_selection->input(),
                                 project_expressions,
-                                selection->filter_predicate());
+                                selection->filter_predicate(),
+                                child_selection->input()->cloneOutputPartitionSchemeHeader());
   }
 
   return input;

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/85b53745/query_optimizer/rules/ExtractCommonSubexpression.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/ExtractCommonSubexpression.cpp b/query_optimizer/rules/ExtractCommonSubexpression.cpp
index 8b68bd2..4c4d33e 100644
--- a/query_optimizer/rules/ExtractCommonSubexpression.cpp
+++ b/query_optimizer/rules/ExtractCommonSubexpression.cpp
@@ -151,7 +151,8 @@ P::PhysicalPtr ExtractCommonSubexpression::applyToNode(
       if (new_expressions != selection->project_expressions()) {
         return P::Selection::Create(selection->input(),
                                     new_expressions,
-                                    selection->filter_predicate());
+                                    selection->filter_predicate(),
+                                    selection->input()->cloneOutputPartitionSchemeHeader());
       }
       break;
     }

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/85b53745/query_optimizer/rules/PushDownLowCostDisjunctivePredicate.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/PushDownLowCostDisjunctivePredicate.cpp b/query_optimizer/rules/PushDownLowCostDisjunctivePredicate.cpp
index 1c71485..69cc299 100644
--- a/query_optimizer/rules/PushDownLowCostDisjunctivePredicate.cpp
+++ b/query_optimizer/rules/PushDownLowCostDisjunctivePredicate.cpp
@@ -195,7 +195,8 @@ P::PhysicalPtr PushDownLowCostDisjunctivePredicate::attachPredicates(
     const P::PhysicalPtr selection =
         P::Selection::Create(output,
                              E::ToNamedExpressions(output->getOutputAttributes()),
-                             CreateConjunctive(node_it->second.predicates));
+                             CreateConjunctive(node_it->second.predicates),
+                             output->cloneOutputPartitionSchemeHeader());
 
     // Applicable case 1: The stored relation has small cardinality.
     const bool is_small_cardinality_relation =

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/85b53745/query_optimizer/rules/ReorderColumns.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/ReorderColumns.cpp b/query_optimizer/rules/ReorderColumns.cpp
index f7e58d5..4783a8d 100644
--- a/query_optimizer/rules/ReorderColumns.cpp
+++ b/query_optimizer/rules/ReorderColumns.cpp
@@ -189,7 +189,8 @@ P::PhysicalPtr ReorderColumns::applyInternal(const P::PhysicalPtr &input,
             std::static_pointer_cast<const P::Selection>(node);
         output = P::Selection::Create(output,
                                       project_expressions,
-                                      old_node->filter_predicate());
+                                      old_node->filter_predicate(),
+                                      output->cloneOutputPartitionSchemeHeader());
         break;
       }
       default:

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/85b53745/query_optimizer/strategy/Selection.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/strategy/Selection.cpp b/query_optimizer/strategy/Selection.cpp
index 2fbcdec..d738921 100644
--- a/query_optimizer/strategy/Selection.cpp
+++ b/query_optimizer/strategy/Selection.cpp
@@ -119,8 +119,23 @@ void Selection::addSelection(
     }
   }
 
+  std::unique_ptr<P::PartitionSchemeHeader> physical_output_partition_scheme_header;
+  const P::PartitionSchemeHeader *physical_input_partition_scheme_header =
+      physical_input->getOutputPartitionSchemeHeader();
+  if (physical_input_partition_scheme_header) {
+    std::unordered_set<E::ExprId> project_expr_ids;
+    for (const E::NamedExpressionPtr &project_expression : project_expressions) {
+      project_expr_ids.insert(project_expression->id());
+    }
+
+    if (physical_input_partition_scheme_header->reusablePartitionScheme(project_expr_ids)) {
+      physical_output_partition_scheme_header =
+          std::make_unique<P::PartitionSchemeHeader>(*physical_input_partition_scheme_header);
+    }
+  }
+
   *physical_output = P::Selection::Create(physical_input, project_expressions,
-                                          filter_predicate);
+                                          filter_predicate, physical_output_partition_scheme_header.release());
 }
 
 }  // namespace strategy