You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by hb...@apache.org on 2016/09/20 17:58:10 UTC

[27/28] incubator-quickstep git commit: Changes due to rebasing.

Changes due to rebasing.


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

Branch: refs/heads/partitioned-aggregation
Commit: 402c99a4639c37bd055b7e4c1ca3e341245f0fb5
Parents: 1db46d6
Author: Harshad Deshmukh <hb...@apache.org>
Authored: Tue Sep 6 15:14:16 2016 -0500
Committer: Harshad Deshmukh <hb...@apache.org>
Committed: Tue Sep 20 12:57:06 2016 -0500

----------------------------------------------------------------------
 query_execution/QueryContext.hpp      | 11 ---------
 relational_operators/CMakeLists.txt   |  1 -
 storage/AggregationOperationState.cpp | 36 ++++++++++++++++--------------
 storage/AggregationOperationState.hpp |  3 +++
 storage/CMakeLists.txt                |  1 +
 storage/StorageBlock.cpp              |  8 ++++---
 6 files changed, 28 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/402c99a4/query_execution/QueryContext.hpp
----------------------------------------------------------------------
diff --git a/query_execution/QueryContext.hpp b/query_execution/QueryContext.hpp
index f6c08ba..a69f607 100644
--- a/query_execution/QueryContext.hpp
+++ b/query_execution/QueryContext.hpp
@@ -195,17 +195,6 @@ class QueryContext {
   }
 
   /**
-   * @brief Destroy the given aggregation state.
-   *
-   * @param id The ID of the AggregationOperationState to destroy.
-   **/
-  inline void destroyAggregationState(const aggregation_state_id id) {
-    DCHECK_LT(id, aggregation_states_.size());
-    DCHECK(aggregation_states_[id]);
-    aggregation_states_[id].reset(nullptr);
-  }
-
-  /**
    * @brief Whether the given BloomFilter id is valid.
    *
    * @param id The BloomFilter id.

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/402c99a4/relational_operators/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/relational_operators/CMakeLists.txt b/relational_operators/CMakeLists.txt
index 2632995..a87e370 100644
--- a/relational_operators/CMakeLists.txt
+++ b/relational_operators/CMakeLists.txt
@@ -44,7 +44,6 @@ add_library(quickstep_relationaloperators_DestroyAggregationStateOperator
             DestroyAggregationStateOperator.cpp 
             DestroyAggregationStateOperator.hpp)
 add_library(quickstep_relationaloperators_DeleteOperator DeleteOperator.cpp DeleteOperator.hpp)
-add_library(quickstep_relationaloperators_DestroyAggregationStateOperator DestroyAggregationStateOperator.cpp DestroyAggregationStateOperator.hpp)
 add_library(quickstep_relationaloperators_DestroyHashOperator DestroyHashOperator.cpp DestroyHashOperator.hpp)
 add_library(quickstep_relationaloperators_DropTableOperator DropTableOperator.cpp DropTableOperator.hpp)
 add_library(quickstep_relationaloperators_FinalizeAggregationOperator

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/402c99a4/storage/AggregationOperationState.cpp
----------------------------------------------------------------------
diff --git a/storage/AggregationOperationState.cpp b/storage/AggregationOperationState.cpp
index 66c4a83..2e88e70 100644
--- a/storage/AggregationOperationState.cpp
+++ b/storage/AggregationOperationState.cpp
@@ -68,7 +68,10 @@ AggregationOperationState::AggregationOperationState(
     const HashTableImplType hash_table_impl_type,
     const std::vector<HashTableImplType> &distinctify_hash_table_impl_types,
     StorageManager *storage_manager)
-    : is_aggregate_partitioned_(estimated_num_entries > kPartitionedAggregateThreshold && !group_by.empty()),
+    : is_aggregate_partitioned_(
+          estimated_num_entries > kPartitionedAggregateThreshold &&
+          !group_by.empty() && !aggregate_functions.empty()),
+      // Use partitioned aggregation only for non-distinct group by.
       input_relation_(input_relation),
       predicate_(predicate),
       group_by_list_(std::move(group_by)),
@@ -197,13 +200,12 @@ AggregationOperationState::AggregationOperationState(
     if (!group_by_handles.empty()) {
       // Aggregation with GROUP BY: create a HashTable pool for per-group states.
       if (!is_aggregate_partitioned_) {
-        group_by_hashtable_pools_.emplace_back(std::unique_ptr<HashTablePool>(
-              new HashTablePool(estimated_num_entries,
-                                hash_table_impl_type,
-                                group_by_types,
-                                payload_sizes,
-                                group_by_handles,
-                                storage_manager)));
+        group_by_hashtable_pool_.reset(new HashTablePool(estimated_num_entries,
+                                                         hash_table_impl_type,
+                                                         group_by_types,
+                                                         payload_sizes,
+                                                         group_by_handles,
+                                                         storage_manager));
         }
       else {
         partitioned_group_by_hashtable_pool_.reset(
@@ -457,16 +459,16 @@ void AggregationOperationState::aggregateBlockHashTable(
     // Call StorageBlock::aggregateGroupBy() to aggregate this block's values
     // directly into the (threadsafe) shared global HashTable for this
     // aggregate.
-    DCHECK(group_by_hashtable_pools_[0] != nullptr);
-    AggregationStateHashTableBase *agg_hash_table = group_by_hashtable_pools_[0]->getHashTableFast();
+    DCHECK(group_by_hashtable_pool_ != nullptr);
+    AggregationStateHashTableBase *agg_hash_table = group_by_hashtable_pool_->getHashTableFast();
     DCHECK(agg_hash_table != nullptr);
-    block->aggregateGroupByFast(arguments_,
-                                group_by_list_,
-                                predicate_.get(),
-                                agg_hash_table,
-                                &reuse_matches,
-                                &reuse_group_by_vectors);
-    group_by_hashtable_pools_[0]->returnHashTable(agg_hash_table);
+    block->aggregateGroupBy(arguments_,
+                            group_by_list_,
+                            predicate_.get(),
+                            agg_hash_table,
+                            &reuse_matches,
+                            &reuse_group_by_vectors);
+    group_by_hashtable_pool_->returnHashTable(agg_hash_table);
   } else {
     block->aggregateGroupByPartitioned(
         arguments_,

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/402c99a4/storage/AggregationOperationState.hpp
----------------------------------------------------------------------
diff --git a/storage/AggregationOperationState.hpp b/storage/AggregationOperationState.hpp
index ab82c2e..ca63055 100644
--- a/storage/AggregationOperationState.hpp
+++ b/storage/AggregationOperationState.hpp
@@ -205,6 +205,9 @@ class AggregationOperationState {
     }
   }
 
+  static void mergeGroupByHashTables(AggregationStateHashTableBase *src,
+                                     AggregationStateHashTableBase *dst);
+
   int dflag;
 
  private:

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/402c99a4/storage/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/storage/CMakeLists.txt b/storage/CMakeLists.txt
index 3d6e8d4..81b4dae 100644
--- a/storage/CMakeLists.txt
+++ b/storage/CMakeLists.txt
@@ -981,6 +981,7 @@ target_link_libraries(quickstep_storage_StorageBlock
                       quickstep_storage_IndexSubBlock
                       quickstep_storage_InsertDestinationInterface
                       quickstep_storage_PackedRowStoreTupleStorageSubBlock
+                      quickstep_storage_PartitionedHashTablePool
                       quickstep_storage_SMAIndexSubBlock
                       quickstep_storage_SplitRowStoreTupleStorageSubBlock
                       quickstep_storage_StorageBlockBase

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/402c99a4/storage/StorageBlock.cpp
----------------------------------------------------------------------
diff --git a/storage/StorageBlock.cpp b/storage/StorageBlock.cpp
index 5ba2a6e..94c46a8 100644
--- a/storage/StorageBlock.cpp
+++ b/storage/StorageBlock.cpp
@@ -1386,7 +1386,7 @@ void StorageBlock::aggregateGroupByPartitioned(
 
   // IDs of 'arguments' as attributes in the ValueAccessor we create below.
   std::vector<attribute_id> arg_ids;
-  std::vector<std::vector<attribute_id>> argument_ids;
+  std::vector<attribute_id> argument_ids;
 
   // IDs of GROUP BY key element(s) in the ValueAccessor we create below.
   std::vector<attribute_id> key_ids;
@@ -1440,9 +1440,11 @@ void StorageBlock::aggregateGroupByPartitioned(
     arg_ids.clear();
     for (const std::unique_ptr<const Scalar> &args : argument) {
       temp_result.addColumn(args->getAllValues(accessor.get(), &sub_blocks_ref));
-      arg_ids.push_back(attr_id++);
+      argument_ids.push_back(attr_id++);
+    }
+    if (argument.empty()) {
+      argument_ids.push_back(kInvalidAttributeID);
     }
-    argument_ids.push_back(arg_ids);
   }
 
   // Compute the partitions for the tuple formed by group by values.