Repository: incubator-quickstep
Updated Branches:
  refs/heads/tpch-all-in-one 49ef7284a -> 27d43d54e


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

Branch: refs/heads/tpch-all-in-one
Commit: 27d43d54ed0d4799b13d6513bc2cae97f7a558eb
Parents: 49ef728
Author: Jianqiao Zhu <jianq...@cs.wisc.edu>
Authored: Sun Jan 29 16:28:13 2017 -0600
Committer: Jianqiao Zhu <jianq...@cs.wisc.edu>
Committed: Sun Jan 29 16:28:13 2017 -0600

----------------------------------------------------------------------
 query_optimizer/CMakeLists.txt                  |   1 +
 query_optimizer/ExecutionGenerator.cpp          |   1 +
 query_optimizer/ExecutionGenerator.hpp          |   2 +
 query_optimizer/PhysicalGenerator.cpp           |   2 +
 query_optimizer/physical/HashJoin.hpp           |   5 +-
 query_optimizer/rules/CMakeLists.txt            |  15 ++
 query_optimizer/rules/CoalesceLeftOuterJoin.cpp |  67 +++++++++
 query_optimizer/rules/CoalesceLeftOuterJoin.hpp |  60 ++++++++
 query_optimizer/rules/SwapProbeBuild.cpp        |   5 +-
 query_optimizer/rules/SwapProbeBuild.hpp        |  20 ++-
 relational_operators/CMakeLists.txt             |  21 +++
 .../CoalesceAggregationStateOperator.cpp        |  69 +++++++++
 .../CoalesceAggregationStateOperator.hpp        | 146 +++++++++++++++++++
 storage/AggregationOperationState.hpp           |   1 +
 14 files changed, 402 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/query_optimizer/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_optimizer/CMakeLists.txt b/query_optimizer/CMakeLists.txt
index 6091d2d..3b9f0c7 100644
--- a/query_optimizer/CMakeLists.txt
+++ b/query_optimizer/CMakeLists.txt
@@ -214,6 +214,7 @@ 
target_link_libraries(quickstep_queryoptimizer_PhysicalGenerator
                       quickstep_queryoptimizer_logical_Logical
                       quickstep_queryoptimizer_physical_Physical
                       quickstep_queryoptimizer_rules_AttachLIPFilters
+                      quickstep_queryoptimizer_rules_CoalesceLeftOuterJoin
                       quickstep_queryoptimizer_rules_InjectJoinFilters
                       quickstep_queryoptimizer_rules_PruneColumns
                       
quickstep_queryoptimizer_rules_PushDownLowCostDisjunctivePredicate

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/query_optimizer/ExecutionGenerator.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/ExecutionGenerator.cpp 
b/query_optimizer/ExecutionGenerator.cpp
index a86b1f3..ce40141 100644
--- a/query_optimizer/ExecutionGenerator.cpp
+++ b/query_optimizer/ExecutionGenerator.cpp
@@ -96,6 +96,7 @@
 #include "relational_operators/AggregationOperator.hpp"
 #include "relational_operators/BuildHashOperator.hpp"
 #include "relational_operators/BuildLIPFilterOperator.hpp"
+#include "relational_operators/CoalesceAggregationStateOperator.hpp"
 #include "relational_operators/CreateIndexOperator.hpp"
 #include "relational_operators/CreateTableOperator.hpp"
 #include "relational_operators/DeleteOperator.hpp"

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/query_optimizer/ExecutionGenerator.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/ExecutionGenerator.hpp 
b/query_optimizer/ExecutionGenerator.hpp
index 36f3bd7..b940550 100644
--- a/query_optimizer/ExecutionGenerator.hpp
+++ b/query_optimizer/ExecutionGenerator.hpp
@@ -264,6 +264,8 @@ class ExecutionGenerator {
    */
   void convertHashJoin(const physical::HashJoinPtr &physical_plan);
 
+//  void convertHashLeftOuterJoinCoalesceZero(const physical::HashJoinPtr 
&physical_plan);
+
   /**
    * @brief Converts a NestedLoopsJoin to a NestedLoopsJoin operator.
    *

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/query_optimizer/PhysicalGenerator.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/PhysicalGenerator.cpp 
b/query_optimizer/PhysicalGenerator.cpp
index 3828be6..9517ed6 100644
--- a/query_optimizer/PhysicalGenerator.cpp
+++ b/query_optimizer/PhysicalGenerator.cpp
@@ -27,6 +27,7 @@
 #include "query_optimizer/logical/Logical.hpp"
 #include "query_optimizer/physical/Physical.hpp"
 #include "query_optimizer/rules/AttachLIPFilters.hpp"
+#include "query_optimizer/rules/CoalesceLeftOuterJoin.hpp"
 #include "query_optimizer/rules/InjectJoinFilters.hpp"
 #include "query_optimizer/rules/PruneColumns.hpp"
 #include "query_optimizer/rules/PushDownLowCostDisjunctivePredicate.hpp"
@@ -110,6 +111,7 @@ P::PhysicalPtr PhysicalGenerator::optimizePlan() {
   rules.emplace_back(new PruneColumns());
   rules.emplace_back(new PushDownLowCostDisjunctivePredicate());
   rules.emplace_back(new ReduceGroupByAttributes(optimizer_context_));
+  rules.emplace_back(new CoalesceLeftOuterJoin());
   if (FLAGS_reorder_hash_joins) {
     rules.emplace_back(new StarSchemaHashJoinOrderOptimization());
     rules.emplace_back(new PruneColumns());

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/query_optimizer/physical/HashJoin.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/physical/HashJoin.hpp 
b/query_optimizer/physical/HashJoin.hpp
index c513f77..5180d35 100644
--- a/query_optimizer/physical/HashJoin.hpp
+++ b/query_optimizer/physical/HashJoin.hpp
@@ -58,7 +58,8 @@ class HashJoin : public BinaryJoin {
     kInnerJoin = 0,
     kLeftSemiJoin,
     kLeftAntiJoin,
-    kLeftOuterJoin
+    kLeftOuterJoin,
+    kLeftOuterJoinCoalesceZero
   };
 
   PhysicalType getPhysicalType() const override { return 
PhysicalType::kHashJoin; }
@@ -73,6 +74,8 @@ class HashJoin : public BinaryJoin {
         return "HashLeftAntiJoin";
       case JoinType::kLeftOuterJoin:
         return "HashLeftOuterJoin";
+      case JoinType::kLeftOuterJoinCoalesceZero:
+        return "HashLeftOuterJoinCoalesceZero";
       default:
         LOG(FATAL) << "Invalid JoinType: "
                    << static_cast<typename 
std::underlying_type<JoinType>::type>(join_type_);

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/query_optimizer/rules/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/CMakeLists.txt 
b/query_optimizer/rules/CMakeLists.txt
index 0994b68..2e64c7a 100644
--- a/query_optimizer/rules/CMakeLists.txt
+++ b/query_optimizer/rules/CMakeLists.txt
@@ -20,6 +20,9 @@ add_subdirectory(tests)
 # Declare micro-libs:
 add_library(quickstep_queryoptimizer_rules_AttachLIPFilters 
AttachLIPFilters.cpp AttachLIPFilters.hpp)
 add_library(quickstep_queryoptimizer_rules_BottomUpRule ../../empty_src.cpp 
BottomUpRule.hpp)
+add_library(quickstep_queryoptimizer_rules_CoalesceLeftOuterJoin
+            CoalesceLeftOuterJoin.cpp
+            CoalesceLeftOuterJoin.hpp)
 add_library(quickstep_queryoptimizer_rules_CollapseProject CollapseProject.cpp 
CollapseProject.hpp)
 
add_library(quickstep_queryoptimizer_rules_EliminateSemiAntiJoinResidualPredicate
             EliminateSemiAntiJoinResidualPredicate.cpp
@@ -67,6 +70,17 @@ 
target_link_libraries(quickstep_queryoptimizer_rules_BottomUpRule
                       glog
                       quickstep_queryoptimizer_rules_Rule
                       quickstep_utility_Macros)
+target_link_libraries(quickstep_queryoptimizer_rules_CoalesceLeftOuterJoin
+                      glog
+                      
quickstep_queryoptimizer_costmodel_StarSchemaSimpleCostModel
+                      quickstep_queryoptimizer_expressions_AttributeReference
+                      quickstep_queryoptimizer_physical_Aggregate
+                      quickstep_queryoptimizer_physical_HashJoin
+                      quickstep_queryoptimizer_physical_PatternMatcher
+                      quickstep_queryoptimizer_physical_Physical
+                      quickstep_queryoptimizer_physical_TopLevelPlan
+                      quickstep_queryoptimizer_rules_BottomUpRule
+                      quickstep_utility_Macros)
 target_link_libraries(quickstep_queryoptimizer_rules_CollapseProject
                       glog
                       quickstep_queryoptimizer_expressions_NamedExpression
@@ -300,6 +314,7 @@ add_library(quickstep_queryoptimizer_rules 
../../empty_src.cpp OptimizerRulesMod
 target_link_libraries(quickstep_queryoptimizer_rules
                       quickstep_queryoptimizer_rules_AttachLIPFilters
                       quickstep_queryoptimizer_rules_BottomUpRule
+                      quickstep_queryoptimizer_rules_CoalesceLeftOuterJoin
                       quickstep_queryoptimizer_rules_CollapseProject
                       
quickstep_queryoptimizer_rules_EliminateSemiAntiJoinResidualPredicate
                       quickstep_queryoptimizer_rules_GenerateJoins

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/query_optimizer/rules/CoalesceLeftOuterJoin.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/CoalesceLeftOuterJoin.cpp 
b/query_optimizer/rules/CoalesceLeftOuterJoin.cpp
new file mode 100644
index 0000000..cbd27a4
--- /dev/null
+++ b/query_optimizer/rules/CoalesceLeftOuterJoin.cpp
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ **/
+
+#include "query_optimizer/rules/CoalesceLeftOuterJoin.hpp"
+
+#include <cstddef>
+#include <memory>
+#include <vector>
+
+#include "query_optimizer/cost_model/StarSchemaSimpleCostModel.hpp"
+#include "query_optimizer/expressions/AttributeReference.hpp"
+#include "query_optimizer/physical/Aggregate.hpp"
+#include "query_optimizer/physical/HashJoin.hpp"
+#include "query_optimizer/physical/PatternMatcher.hpp"
+#include "query_optimizer/physical/Physical.hpp"
+#include "query_optimizer/physical/TopLevelPlan.hpp"
+
+#include "glog/logging.h"
+
+namespace quickstep {
+namespace optimizer {
+
+namespace P = ::quickstep::optimizer::physical;
+namespace E = ::quickstep::optimizer::expressions;
+
+P::PhysicalPtr CoalesceLeftOuterJoin::applyToNode(const P::PhysicalPtr &input) 
{
+  P::AggregatePtr aggregate;
+  if (!P::SomeAggregate::MatchesWithConditionalCast(input, &aggregate)) {
+    return input;
+  }
+
+  P::HashJoinPtr hash_join;
+  if (!P::SomeHashJoin::MatchesWithConditionalCast(aggregate->input(), 
&hash_join) ||
+      hash_join->join_type() != P::HashJoin::JoinType::kLeftOuterJoin) {
+    return input;
+  }
+
+  std::cout << "HERE!\n";
+  std::cout << aggregate->toString() << "\n";
+
+  return input;
+}
+
+void CoalesceLeftOuterJoin::init(const P::PhysicalPtr &input) {
+  DCHECK(input->getPhysicalType() == P::PhysicalType::kTopLevelPlan);
+  cost_model_.reset(new cost::StarSchemaSimpleCostModel(
+      std::static_pointer_cast<const 
P::TopLevelPlan>(input)->shared_subplans()));
+}
+
+}  // namespace optimizer
+}  // namespace quickstep

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/query_optimizer/rules/CoalesceLeftOuterJoin.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/CoalesceLeftOuterJoin.hpp 
b/query_optimizer/rules/CoalesceLeftOuterJoin.hpp
new file mode 100644
index 0000000..b3752b2
--- /dev/null
+++ b/query_optimizer/rules/CoalesceLeftOuterJoin.hpp
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ **/
+
+#ifndef QUICKSTEP_QUERY_OPTIMIZER_RULES_COALESCE_LEFT_OUTER_JOIN_HPP_
+#define QUICKSTEP_QUERY_OPTIMIZER_RULES_COALESCE_LEFT_OUTER_JOIN_HPP_
+
+#include <memory>
+#include <string>
+
+#include "query_optimizer/cost_model/StarSchemaSimpleCostModel.hpp"
+#include "query_optimizer/physical/Physical.hpp"
+#include "query_optimizer/rules/BottomUpRule.hpp"
+#include "utility/Macros.hpp"
+
+namespace quickstep {
+namespace optimizer {
+
+/** \addtogroup OptimizerRules
+ *  @{
+ */
+
+class CoalesceLeftOuterJoin : public BottomUpRule<physical::Physical> {
+ public:
+  CoalesceLeftOuterJoin() {
+  }
+
+  std::string getName() const override {
+      return "CoalesceLeftOuterJoin";
+  }
+
+ protected:
+  physical::PhysicalPtr applyToNode(const physical::PhysicalPtr &input) 
override;
+  void init(const physical::PhysicalPtr &input) override;
+
+ private:
+  std::unique_ptr<cost::StarSchemaSimpleCostModel> cost_model_;
+
+  DISALLOW_COPY_AND_ASSIGN(CoalesceLeftOuterJoin);
+};
+
+}  // namespace optimizer
+}  // namespace quickstep
+
+#endif  // QUICKSTEP_QUERY_OPTIMIZER_RULES_COALESCE_LEFT_OUTER_JOIN_HPP_

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/query_optimizer/rules/SwapProbeBuild.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/SwapProbeBuild.cpp 
b/query_optimizer/rules/SwapProbeBuild.cpp
index c51776b..501f740 100644
--- a/query_optimizer/rules/SwapProbeBuild.cpp
+++ b/query_optimizer/rules/SwapProbeBuild.cpp
@@ -35,6 +35,9 @@
 namespace quickstep {
 namespace optimizer {
 
+namespace P = ::quickstep::optimizer::physical;
+namespace E = ::quickstep::optimizer::expressions;
+
 P::PhysicalPtr SwapProbeBuild::applyToNode(const P::PhysicalPtr &input) {
   P::HashJoinPtr hash_join;
 
@@ -65,7 +68,7 @@ P::PhysicalPtr SwapProbeBuild::applyToNode(const 
P::PhysicalPtr &input) {
 
 void SwapProbeBuild::init(const P::PhysicalPtr &input) {
   DCHECK(input->getPhysicalType() == P::PhysicalType::kTopLevelPlan);
-  cost_model_.reset(new C::SimpleCostModel(
+  cost_model_.reset(new cost::SimpleCostModel(
       std::static_pointer_cast<const 
P::TopLevelPlan>(input)->shared_subplans()));
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/query_optimizer/rules/SwapProbeBuild.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/rules/SwapProbeBuild.hpp 
b/query_optimizer/rules/SwapProbeBuild.hpp
index ad756fb..f50f6ec 100644
--- a/query_optimizer/rules/SwapProbeBuild.hpp
+++ b/query_optimizer/rules/SwapProbeBuild.hpp
@@ -36,27 +36,25 @@ namespace optimizer {
  *  @{
  */
 
-namespace P = ::quickstep::optimizer::physical;
-namespace E = ::quickstep::optimizer::expressions;
-namespace C = ::quickstep::optimizer::cost;
-
 /**
  * @brief Rule that applies to a physical plan to arrange probe and
  *        build side based on the cardinalities.
  */
-class SwapProbeBuild : public BottomUpRule<P::Physical> {
+class SwapProbeBuild : public BottomUpRule<physical::Physical> {
  public:
-  SwapProbeBuild() {
-  }
+  /**
+   * @brief Constructor.
+   */
+  SwapProbeBuild() {}
 
   std::string getName() const override { return "SwapProbeBuild"; }
 
  protected:
-  P::PhysicalPtr applyToNode(const P::PhysicalPtr &input) override;
-  void init(const P::PhysicalPtr &input) override;
+  physical::PhysicalPtr applyToNode(const physical::PhysicalPtr &input) 
override;
+  void init(const physical::PhysicalPtr &input) override;
 
  private:
-  std::unique_ptr<C::SimpleCostModel> cost_model_;
+  std::unique_ptr<cost::SimpleCostModel> cost_model_;
 
   DISALLOW_COPY_AND_ASSIGN(SwapProbeBuild);
 };
@@ -64,4 +62,4 @@ class SwapProbeBuild : public BottomUpRule<P::Physical> {
 }  // namespace optimizer
 }  // namespace quickstep
 
-#endif
+#endif  // QUICKSTEP_QUERY_OPTIMIZER_RULES_SWAP_PROBE_BUILD_HPP_

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/relational_operators/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/relational_operators/CMakeLists.txt 
b/relational_operators/CMakeLists.txt
index 82460dc..b68831f 100644
--- a/relational_operators/CMakeLists.txt
+++ b/relational_operators/CMakeLists.txt
@@ -39,6 +39,9 @@ endif()
 add_library(quickstep_relationaloperators_AggregationOperator 
AggregationOperator.cpp AggregationOperator.hpp)
 add_library(quickstep_relationaloperators_BuildHashOperator 
BuildHashOperator.cpp BuildHashOperator.hpp)
 add_library(quickstep_relationaloperators_BuildLIPFilterOperator 
BuildLIPFilterOperator.cpp BuildLIPFilterOperator.hpp)
+add_library(quickstep_relationaloperators_CoalesceAggregationStateOperator
+            CoalesceAggregationStateOperator.cpp
+            CoalesceAggregationStateOperator.hpp)
 add_library(quickstep_relationaloperators_CreateIndexOperator 
CreateIndexOperator.cpp CreateIndexOperator.hpp)
 add_library(quickstep_relationaloperators_CreateTableOperator 
CreateTableOperator.cpp CreateTableOperator.hpp)
 add_library(quickstep_relationaloperators_DestroyAggregationStateOperator 
@@ -141,6 +144,24 @@ 
target_link_libraries(quickstep_relationaloperators_BuildLIPFilterOperator
                       quickstep_utility_lipfilter_LIPFilterBuilder
                       quickstep_utility_lipfilter_LIPFilterUtil
                       tmb)
+target_link_libraries(quickstep_relationaloperators_CoalesceAggregationStateOperator
+                      glog
+                      quickstep_catalog_CatalogRelation
+                      quickstep_catalog_CatalogTypedefs
+                      quickstep_queryexecution_QueryContext
+                      quickstep_queryexecution_WorkOrderProtosContainer
+                      quickstep_queryexecution_WorkOrdersContainer
+                      quickstep_relationaloperators_RelationalOperator
+                      quickstep_relationaloperators_WorkOrder
+                      quickstep_relationaloperators_WorkOrder_proto
+                      quickstep_storage_StorageBlock
+                      quickstep_storage_StorageBlockInfo
+                      quickstep_storage_StorageManager
+                      quickstep_storage_TupleStorageSubBlock
+                      quickstep_storage_ValueAccessor
+                      quickstep_utility_ConcurrentBitVector
+                      quickstep_utility_Macros
+                      tmb)
 target_link_libraries(quickstep_relationaloperators_CreateIndexOperator
                       glog
                       quickstep_catalog_CatalogRelation

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/relational_operators/CoalesceAggregationStateOperator.cpp
----------------------------------------------------------------------
diff --git a/relational_operators/CoalesceAggregationStateOperator.cpp 
b/relational_operators/CoalesceAggregationStateOperator.cpp
new file mode 100644
index 0000000..83c0755
--- /dev/null
+++ b/relational_operators/CoalesceAggregationStateOperator.cpp
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ **/
+
+//#include "relational_operators/InitializeAggregationStateOperator.hpp"
+//
+//#include <vector>
+//
+//#include "query_execution/QueryContext.hpp"
+//#include "query_execution/WorkOrderProtosContainer.hpp"
+//#include "query_execution/WorkOrdersContainer.hpp"
+//#include "relational_operators/WorkOrder.pb.h"
+//#include "storage/AggregationOperationState.hpp"
+//
+//#include "tmb/id_typedefs.h"
+//
+//namespace quickstep {
+//
+//bool InitializeAggregationStateOperator::getAllWorkOrders(
+//    WorkOrdersContainer *container,
+//    QueryContext *query_context,
+//    StorageManager *storage_manager,
+//    const tmb::client_id scheduler_client_id,
+//    tmb::MessageBus *bus) {
+//  if (!started_) {
+//    AggregationOperationState *agg_state =
+//        query_context->getAggregationState(aggr_state_index_);
+//    DCHECK(agg_state != nullptr);
+//
+//    for (std::size_t partition_id = 0;
+//         partition_id < agg_state->getNumInitializePartitions();
+//         ++partition_id) {
+//      container->addNormalWorkOrder(
+//          new InitializeAggregationStateWorkOrder(
+//              query_id_,
+//              partition_id,
+//              agg_state),
+//          op_index_);
+//    }
+//    started_ = true;
+//  }
+//  return started_;
+//}
+//
+//bool 
InitializeAggregationStateOperator::getAllWorkOrderProtos(WorkOrderProtosContainer
 *container) {
+//  // TODO
+//  LOG(FATAL) << "Not implemented";
+//}
+//
+//void InitializeAggregationStateWorkOrder::execute() {
+//  state_->initializeState(partition_id_);
+//}
+//
+//}  // namespace quickstep

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/relational_operators/CoalesceAggregationStateOperator.hpp
----------------------------------------------------------------------
diff --git a/relational_operators/CoalesceAggregationStateOperator.hpp 
b/relational_operators/CoalesceAggregationStateOperator.hpp
new file mode 100644
index 0000000..d19dab4
--- /dev/null
+++ b/relational_operators/CoalesceAggregationStateOperator.hpp
@@ -0,0 +1,146 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ **/
+
+#ifndef QUICKSTEP_RELATIONAL_OPERATORS_COALESCE_AGGREGATION_STATE_OPERATOR_HPP_
+#define QUICKSTEP_RELATIONAL_OPERATORS_COALESCE_AGGREGATION_STATE_OPERATOR_HPP_
+
+#include <string>
+
+#include "catalog/CatalogRelation.hpp"
+#include "catalog/CatalogTypedefs.hpp"
+#include "query_execution/QueryContext.hpp"
+#include "relational_operators/RelationalOperator.hpp"
+#include "relational_operators/WorkOrder.hpp"
+#include "utility/Macros.hpp"
+
+#include "glog/logging.h"
+
+#include "tmb/id_typedefs.h"
+
+namespace tmb { class MessageBus; }
+
+namespace quickstep {
+
+class AggregationOperationState;
+class CatalogRelationSchema;
+class StorageManager;
+class WorkOrderProtosContainer;
+class WorkOrdersContainer;
+
+namespace serialization { class WorkOrder; }
+
+/** \addtogroup RelationalOperators
+ *  @{
+ */
+
+class CoalesceAggregationStateOperator : public RelationalOperator {
+ public:
+  CoalesceAggregationStateOperator(const std::size_t query_id,
+                                   const CatalogRelation &input_relation,
+                                   const bool input_relation_is_stored,
+                                   const attribute_id key_attribute_id)
+    : RelationalOperator(query_id),
+      input_relation_(input_relation),
+      input_relation_is_stored_(input_relation_is_stored),
+      key_attribute_id_(key_attribute_id),
+      input_relation_block_ids_(input_relation_is_stored ? 
input_relation.getBlocksSnapshot()
+                                                         : 
std::vector<block_id>()),
+      num_workorders_generated_(0),
+      started_(false) {}
+
+  ~CoalesceAggregationStateOperator() override {}
+
+  const CatalogRelation& input_relation() const {
+    return input_relation_;
+  }
+
+  std::string getName() const override {
+    return "CoalesceAggregationStateOperator";
+  }
+
+  bool getAllWorkOrders(WorkOrdersContainer *container,
+                        QueryContext *query_context,
+                        StorageManager *storage_manager,
+                        const tmb::client_id scheduler_client_id,
+                        tmb::MessageBus *bus) override;
+
+  bool getAllWorkOrderProtos(WorkOrderProtosContainer *container) override;
+
+  void feedInputBlock(const block_id input_block_id,
+                      const relation_id input_relation_id) override {
+    input_relation_block_ids_.push_back(input_block_id);
+  }
+
+  void feedInputBlocks(const relation_id rel_id,
+                       std::vector<block_id> *partially_filled_blocks) 
override {
+    input_relation_block_ids_.insert(input_relation_block_ids_.end(),
+                                     partially_filled_blocks->begin(),
+                                     partially_filled_blocks->end());
+  }
+
+ private:
+  const CatalogRelation &input_relation_;
+  const bool input_relation_is_stored_;
+  const attribute_id key_attribute_id_;
+
+  std::vector<block_id> input_relation_block_ids_;
+  std::vector<block_id>::size_type num_workorders_generated_;
+
+  bool started_;
+
+  DISALLOW_COPY_AND_ASSIGN(CoalesceAggregationStateOperator);
+};
+
+class CoalesceAggregationStateWorkOrder : public WorkOrder {
+ public:
+  CoalesceAggregationStateWorkOrder(const std::size_t query_id,
+                                    const CatalogRelationSchema 
&input_relation,
+                                    const block_id build_block_id,
+                                    AggregationOperationState *state,
+                                    StorageManager *storage_manager)
+      : WorkOrder(query_id),
+        input_relation_(input_relation),
+        build_block_id_(build_block_id),
+        state_(DCHECK_NOTNULL(state)),
+        storage_manager_(DCHECK_NOTNULL(storage_manager)) {}
+
+  ~CoalesceAggregationStateWorkOrder() override {}
+
+  const CatalogRelationSchema& input_relation() const {
+    return input_relation_;
+  }
+
+  void execute() override;
+
+ private:
+  const CatalogRelationSchema &input_relation_;
+  const block_id build_block_id_;
+
+  AggregationOperationState *state_;
+
+  StorageManager *storage_manager_;
+
+  DISALLOW_COPY_AND_ASSIGN(CoalesceAggregationStateWorkOrder);
+};
+
+/** @} */
+
+}  // namespace quickstep
+
+#endif  // 
QUICKSTEP_RELATIONAL_OPERATORS_COALESCE_AGGREGATION_STATE_OPERATOR_HPP_

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/27d43d54/storage/AggregationOperationState.hpp
----------------------------------------------------------------------
diff --git a/storage/AggregationOperationState.hpp 
b/storage/AggregationOperationState.hpp
index 233256c..17c5ea4 100644
--- a/storage/AggregationOperationState.hpp
+++ b/storage/AggregationOperationState.hpp
@@ -35,6 +35,7 @@
 #include "storage/PartitionedHashTablePool.hpp"
 #include "storage/StorageBlock.hpp"
 #include "storage/StorageBlockInfo.hpp"
+#include "utility/ConcurrentBitVector.hpp"
 #include "utility/Macros.hpp"
 
 #include "gflags/gflags.h"

Reply via email to