Repository: incubator-quickstep
Updated Branches:
  refs/heads/lip-refactor-optimizer 166860222 -> 3cfea1d5b


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/3cfea1d5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/3cfea1d5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/3cfea1d5

Branch: refs/heads/lip-refactor-optimizer
Commit: 3cfea1d5b4d92277f7f38ead630186156f3e733e
Parents: 1668602
Author: Jianqiao Zhu <jianq...@cs.wisc.edu>
Authored: Tue Oct 11 14:08:53 2016 -0500
Committer: Jianqiao Zhu <jianq...@cs.wisc.edu>
Committed: Tue Oct 11 14:08:53 2016 -0500

----------------------------------------------------------------------
 query_optimizer/PhysicalGenerator.cpp           |  2 +-
 query_optimizer/physical/TopLevelPlan.hpp       | 41 +++++++++++++-------
 query_optimizer/rules/AttachLIPFilters.cpp      | 10 +----
 query_optimizer/rules/AttachLIPFilters.hpp      | 18 +++++++++
 .../StarSchemaHashJoinOrderOptimization.hpp     |  6 ++-
 utility/CMakeLists.txt                          |  4 +-
 utility/DisjointTreeForest.hpp                  |  1 +
 utility/lip_filter/CMakeLists.txt               |  2 +-
 utility/lip_filter/LIPFilter.hpp                | 12 ------
 9 files changed, 56 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/3cfea1d5/query_optimizer/PhysicalGenerator.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/PhysicalGenerator.cpp 
b/query_optimizer/PhysicalGenerator.cpp
index 41d822e..8143d5c 100644
--- a/query_optimizer/PhysicalGenerator.cpp
+++ b/query_optimizer/PhysicalGenerator.cpp
@@ -51,7 +51,7 @@ DEFINE_bool(reorder_hash_joins, true,
             "for queries on star-schema tables.");
 
 DEFINE_bool(use_lip_filters, false,
-            "If true, use LIP (Lookahead Information Passing) filters to 
accelerate "
+            "If true, use LIP (lookahead information passing) filters to 
accelerate "
             "hash joins.");
 
 DEFINE_bool(visualize_plan, false,

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/3cfea1d5/query_optimizer/physical/TopLevelPlan.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/physical/TopLevelPlan.hpp 
b/query_optimizer/physical/TopLevelPlan.hpp
index c6ea940..7dfc2b6 100644
--- a/query_optimizer/physical/TopLevelPlan.hpp
+++ b/query_optimizer/physical/TopLevelPlan.hpp
@@ -90,6 +90,29 @@ class TopLevelPlan : public Physical {
     return shared_subplans_[index];
   }
 
+  /**
+   * @brief Creates a copy of the TopLevelPlan with lip_filter_configuration_
+   *        replaced by \p new_lip_filter_configuration.
+   *
+   * @param new_lip_filter_configuration The new lip_filter_configuration to be
+   *        substituted for the existing one.
+   * @return A copy of this TopLevelPlan with the new lip_filter_configuration.
+   */
+  TopLevelPlanPtr copyWithLIPFilterConfiguration(
+      const LIPFilterConfigurationPtr &new_lip_filter_configuration) const {
+    return TopLevelPlan::Create(plan_,
+                                shared_subplans_,
+                                uncorrelated_subquery_map_,
+                                new_lip_filter_configuration);
+  }
+
+  /**
+   * @return The LIPFilter configuration information for the overall query 
plan.
+   */
+  const LIPFilterConfigurationPtr& lip_filter_configuration() const {
+    return lip_filter_configuration_;
+  }
+
   PhysicalPtr copyWithNewChildren(
       const std::vector<PhysicalPtr> &new_children) const override {
     DCHECK_EQ(getNumChildren(), new_children.size());
@@ -121,25 +144,15 @@ class TopLevelPlan : public Physical {
     return false;
   }
 
-  TopLevelPlanPtr copyWithLIPFilterConfiguration(
-      const LIPFilterConfigurationPtr &new_lip_filter_configuration) const {
-    return TopLevelPlan::Create(plan_,
-                                shared_subplans_,
-                                uncorrelated_subquery_map_,
-                                new_lip_filter_configuration);
-  }
-
-  const LIPFilterConfigurationPtr& lip_filter_configuration() const {
-    return lip_filter_configuration_;
-  }
-
   /**
    * @brief Creates a TopLevelPlan.
    *
    * @param plan The query plan.
    * @param shared_subplans The subplans referenced in the main input plan.
-   * @param Map from the expression ID of an attribute reference to the
-   *        uncorrelated subquery that produces the attribute.
+   * @param uncorrelated_subquery_map Map from the expression ID of an 
attribute
+   *        reference to the uncorrelated subquery that produces the attribute.
+   * @param lip_filter_configuration The LIPFilter configuration information
+   *        for the overall query plan.
    * @return An immutable TopLevelPlan.
    */
   static TopLevelPlanPtr Create(

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/3cfea1d5/query_optimizer/rules/AttachLIPFilters.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/AttachLIPFilters.cpp 
b/query_optimizer/rules/AttachLIPFilters.cpp
index d67eacd..32fc3b7 100644
--- a/query_optimizer/rules/AttachLIPFilters.cpp
+++ b/query_optimizer/rules/AttachLIPFilters.cpp
@@ -51,6 +51,7 @@ namespace P = ::quickstep::optimizer::physical;
 
 P::PhysicalPtr AttachLIPFilters::apply(const P::PhysicalPtr &input) {
   DCHECK(input->getPhysicalType() == P::PhysicalType::kTopLevelPlan);
+
   const P::TopLevelPlanPtr top_level_plan =
      std::static_pointer_cast<const P::TopLevelPlan>(input);
   cost_model_.reset(
@@ -61,15 +62,6 @@ P::PhysicalPtr AttachLIPFilters::apply(const P::PhysicalPtr 
&input) {
   std::set<E::ExprId> already_filtered_attributes;
   attachLIPFilters(NodeList(input), &already_filtered_attributes);
 
-//  for (const auto &pair : attaches_) {
-//    for (const auto &build_info : pair.second->getBuildInfo()) {
-//      std::cout << "Build: " << 
build_info.build_attribute->attribute_alias() << "\n";
-//    }
-//    for (const auto &probe_info : pair.second->getProbeInfo()) {
-//      std::cout << "Probe: " << 
probe_info.probe_attribute->attribute_alias() << "\n";
-//    }
-//  }
-
   P::PhysicalPtr output;
   if (!lip_filter_configuration_->getBuildInfoMap().empty() ||
       !lip_filter_configuration_->getProbeInfoMap().empty()) {

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/3cfea1d5/query_optimizer/rules/AttachLIPFilters.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/AttachLIPFilters.hpp 
b/query_optimizer/rules/AttachLIPFilters.hpp
index d0a6fa5..74cf885 100644
--- a/query_optimizer/rules/AttachLIPFilters.hpp
+++ b/query_optimizer/rules/AttachLIPFilters.hpp
@@ -46,8 +46,14 @@ namespace optimizer {
  *  @{
  */
 
+/**
+ * @brief Rule that applies to a physical plan to attach LIPFilters.
+ */
 class AttachLIPFilters : public Rule<physical::Physical> {
  public:
+  /**
+   * @brief Constructor.
+   */
   AttachLIPFilters() {}
 
   ~AttachLIPFilters() override {}
@@ -59,6 +65,9 @@ class AttachLIPFilters : public Rule<physical::Physical> {
   physical::PhysicalPtr apply(const physical::PhysicalPtr &input) override;
 
  private:
+  /**
+   * @brief Internal data structure for passing around LIPFilter information.
+   */
   struct LIPFilterInfo {
     LIPFilterInfo(const expressions::AttributeReferencePtr &attribute_in,
                   const physical::PhysicalPtr &source_in,
@@ -77,6 +86,7 @@ class AttachLIPFilters : public Rule<physical::Physical> {
                   : source_attribute_in) {
 
     }
+
     static bool isBetterThan(const LIPFilterInfo &a, const LIPFilterInfo &b) {
       if (a.estimated_selectivity == b.estimated_selectivity) {
         return a.depth > b.depth;
@@ -84,6 +94,7 @@ class AttachLIPFilters : public Rule<physical::Physical> {
         return a.estimated_selectivity < b.estimated_selectivity;
       }
     }
+
     expressions::AttributeReferencePtr attribute;
     physical::PhysicalPtr source;
     int depth;
@@ -94,12 +105,16 @@ class AttachLIPFilters : public Rule<physical::Physical> {
 
   typedef std::shared_ptr<const LIPFilterInfo> LIPFilterInfoPtr;
 
+  /**
+   * @brief Functional list data structure for internal use.
+   */
   struct NodeList {
     NodeList(const physical::PhysicalPtr &node_in)
         : node(node_in),
           next(nullptr),
           depth(0) {
     }
+
     NodeList(const physical::PhysicalPtr &node_in,
              const NodeList *next_in,
              const int depth_in)
@@ -107,12 +122,15 @@ class AttachLIPFilters : public Rule<physical::Physical> {
           next(next_in),
           depth(depth_in) {
     }
+
     inline const NodeList *cdr() const {
       return next;
     }
+
     inline const NodeList cons(const physical::PhysicalPtr &new_node) const {
       return NodeList(new_node, this, depth+1);
     }
+
     const physical::PhysicalPtr node;
     const NodeList *next;
     const int depth;

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/3cfea1d5/query_optimizer/rules/StarSchemaHashJoinOrderOptimization.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/StarSchemaHashJoinOrderOptimization.hpp 
b/query_optimizer/rules/StarSchemaHashJoinOrderOptimization.hpp
index 8dea1ba..998a5d5 100644
--- a/query_optimizer/rules/StarSchemaHashJoinOrderOptimization.hpp
+++ b/query_optimizer/rules/StarSchemaHashJoinOrderOptimization.hpp
@@ -45,7 +45,11 @@ namespace optimizer {
  */
 
 /**
- * @brief TODO
+ * @brief Rule that applies to a physical plan to optimize hash join orders.
+ *
+ * This optimization applies a greedy algorithm to favor smaller cardinality
+ * and selective tables to be joined first, which is suitable for queries on
+ * star-schema or snowflake-schema tables.
  */
 class StarSchemaHashJoinOrderOptimization : public Rule<physical::Physical> {
  public:

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/3cfea1d5/utility/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/utility/CMakeLists.txt b/utility/CMakeLists.txt
index 1863089..f3f3fa3 100644
--- a/utility/CMakeLists.txt
+++ b/utility/CMakeLists.txt
@@ -234,7 +234,7 @@ target_link_libraries(quickstep_utility_DAG
                       glog
                       quickstep_utility_Macros)
 target_link_libraries(quickstep_utility_DisjointTreeForest
-                      quickstep_utility_Macros)
+                      glog)
 target_link_libraries(quickstep_utility_ExecutionDAGVisualizer
                       quickstep_catalog_CatalogRelationSchema
                       quickstep_queryexecution_QueryExecutionTypedefs
@@ -391,7 +391,7 @@ target_link_libraries(DisjointTreeForest_unittest
                       gtest
                       gtest_main
                       quickstep_utility_DisjointTreeForest)
-add_test(TemplateUtil_unittest TemplateUtil_unittest)
+add_test(DisjointTreeForest_unittest DisjointTreeForest_unittest)
 
 add_executable(EqualsAnyConstant_unittest 
"${CMAKE_CURRENT_SOURCE_DIR}/tests/EqualsAnyConstant_unittest.cpp")
 target_link_libraries(EqualsAnyConstant_unittest

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/3cfea1d5/utility/DisjointTreeForest.hpp
----------------------------------------------------------------------
diff --git a/utility/DisjointTreeForest.hpp b/utility/DisjointTreeForest.hpp
index a274bfa..ce9e23c 100644
--- a/utility/DisjointTreeForest.hpp
+++ b/utility/DisjointTreeForest.hpp
@@ -22,6 +22,7 @@
 #include <limits>
 #include <utility>
 #include <unordered_map>
+#include <vector>
 
 #include "glog/logging.h"
 

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/3cfea1d5/utility/lip_filter/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/utility/lip_filter/CMakeLists.txt 
b/utility/lip_filter/CMakeLists.txt
index 3b3131b..2232abe 100644
--- a/utility/lip_filter/CMakeLists.txt
+++ b/utility/lip_filter/CMakeLists.txt
@@ -16,4 +16,4 @@
 # under the License.
 
 # Declare micro-libs:
-add_library(quickstep_utility_lipfilter_LIPFilter ../../empty_src.cpp 
LIPFilter.hpp)
+add_library(quickstep_utility_lipfilter_LIPFilter ../../empty_src.cpp 
LIPFilter.hpp)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/3cfea1d5/utility/lip_filter/LIPFilter.hpp
----------------------------------------------------------------------
diff --git a/utility/lip_filter/LIPFilter.hpp b/utility/lip_filter/LIPFilter.hpp
index 76c5640..33165ed 100644
--- a/utility/lip_filter/LIPFilter.hpp
+++ b/utility/lip_filter/LIPFilter.hpp
@@ -20,20 +20,8 @@
 #ifndef QUICKSTEP_UTILITY_LIP_FILTER_LIP_FILTER_HPP_
 #define QUICKSTEP_UTILITY_LIP_FILTER_LIP_FILTER_HPP_
 
-#include <cstddef>
-#include <vector>
-
-#include "catalog/CatalogTypedefs.hpp"
-#include "storage/StorageBlockInfo.hpp"
-#include "utility/Macros.hpp"
-
-#include "glog/logging.h"
-
 namespace quickstep {
 
-class Type;
-class ValueAccessor;
-
 /** \addtogroup Utility
  *  @{
  */

Reply via email to