You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by ji...@apache.org on 2017/01/28 03:01:39 UTC

[04/12] incubator-quickstep git commit: Refactored SelectorOperator regarding partitions.

Refactored SelectorOperator regarding partitions.


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

Branch: refs/heads/reorder-attrs
Commit: 60e34060a8a9e82330442fa32b3f7030fa3a615d
Parents: e26cc1e
Author: Zuyu Zhang <zu...@apache.org>
Authored: Tue Jan 17 18:38:25 2017 -0800
Committer: Zuyu Zhang <zu...@apache.org>
Committed: Tue Jan 17 18:38:25 2017 -0800

----------------------------------------------------------------------
 relational_operators/SelectOperator.cpp | 10 +----
 relational_operators/SelectOperator.hpp | 62 +++++++++++++---------------
 2 files changed, 31 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/60e34060/relational_operators/SelectOperator.cpp
----------------------------------------------------------------------
diff --git a/relational_operators/SelectOperator.cpp b/relational_operators/SelectOperator.cpp
index d2759c4..5419cf8 100644
--- a/relational_operators/SelectOperator.cpp
+++ b/relational_operators/SelectOperator.cpp
@@ -67,10 +67,7 @@ bool SelectOperator::getAllWorkOrders(
     }
 
     if (input_relation_.hasPartitionScheme()) {
-      const std::size_t num_partitions =
-          input_relation_.getPartitionScheme()->getPartitionSchemeHeader().getNumPartitions();
-
-      for (std::size_t part_id = 0; part_id < num_partitions; ++part_id) {
+      for (std::size_t part_id = 0; part_id < num_partitions_; ++part_id) {
         for (const block_id input_block_id : input_relation_block_ids_in_partition_[part_id]) {
           numa_node_id numa_node = 0;
 #ifdef QUICKSTEP_HAVE_LIBNUMA
@@ -98,10 +95,7 @@ bool SelectOperator::getAllWorkOrders(
     return true;
   } else {
     if (input_relation_.hasPartitionScheme()) {
-      const std::size_t num_partitions =
-          input_relation_.getPartitionScheme()->getPartitionSchemeHeader().getNumPartitions();
-
-      for (std::size_t part_id = 0; part_id < num_partitions; ++part_id) {
+      for (std::size_t part_id = 0; part_id < num_partitions_; ++part_id) {
         while (num_workorders_generated_in_partition_[part_id] <
                input_relation_block_ids_in_partition_[part_id].size()) {
           const block_id block_in_partition

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/60e34060/relational_operators/SelectOperator.hpp
----------------------------------------------------------------------
diff --git a/relational_operators/SelectOperator.hpp b/relational_operators/SelectOperator.hpp
index 989eaac..9c0767b 100644
--- a/relational_operators/SelectOperator.hpp
+++ b/relational_operators/SelectOperator.hpp
@@ -100,9 +100,6 @@ class SelectOperator : public RelationalOperator {
         output_destination_index_(output_destination_index),
         predicate_index_(predicate_index),
         selection_index_(selection_index),
-        input_relation_block_ids_(input_relation_is_stored
-                                      ? input_relation.getBlocksSnapshot()
-                                      : std::vector<block_id>()),
         num_workorders_generated_(0),
         simple_projection_(false),
         input_relation_is_stored_(input_relation_is_stored),
@@ -112,20 +109,20 @@ class SelectOperator : public RelationalOperator {
 #endif
     if (input_relation.hasPartitionScheme()) {
       const PartitionScheme &part_scheme = *input_relation.getPartitionScheme();
-      const PartitionSchemeHeader &part_scheme_header = part_scheme.getPartitionSchemeHeader();
-      const std::size_t num_partitions = part_scheme_header.getNumPartitions();
-      input_relation_block_ids_in_partition_.resize(num_partitions);
-      num_workorders_generated_in_partition_.resize(num_partitions);
-      num_workorders_generated_in_partition_.assign(num_partitions, 0);
-      for (std::size_t part_id = 0; part_id < num_partitions; ++part_id) {
-        if (input_relation_is_stored) {
-          input_relation_block_ids_in_partition_[part_id] =
-              part_scheme.getBlocksInPartition(part_id);
-        } else {
-          input_relation_block_ids_in_partition_[part_id] =
-              std::vector<block_id>();
+      num_partitions_ = part_scheme.getPartitionSchemeHeader().getNumPartitions();
+
+      num_workorders_generated_in_partition_.resize(num_partitions_);
+
+      if (input_relation_is_stored) {
+        for (std::size_t part_id = 0; part_id < num_partitions_; ++part_id) {
+          input_relation_block_ids_in_partition_.push_back(
+              part_scheme.getBlocksInPartition(part_id));
         }
+      } else {
+        input_relation_block_ids_in_partition_.resize(num_partitions_);
       }
+    } else if (input_relation_is_stored) {
+      input_relation_block_ids_ = input_relation.getBlocksSnapshot();
     }
   }
 
@@ -163,9 +160,6 @@ class SelectOperator : public RelationalOperator {
         predicate_index_(predicate_index),
         selection_index_(QueryContext::kInvalidScalarGroupId),
         simple_selection_(std::move(selection)),
-        input_relation_block_ids_(input_relation_is_stored
-                                      ? input_relation.getBlocksSnapshot()
-                                      : std::vector<block_id>()),
         num_workorders_generated_(0),
         simple_projection_(true),
         input_relation_is_stored_(input_relation_is_stored),
@@ -175,20 +169,20 @@ class SelectOperator : public RelationalOperator {
 #endif
     if (input_relation.hasPartitionScheme()) {
       const PartitionScheme &part_scheme = *input_relation.getPartitionScheme();
-      const PartitionSchemeHeader &part_scheme_header = part_scheme.getPartitionSchemeHeader();
-      const std::size_t num_partitions = part_scheme_header.getNumPartitions();
-      input_relation_block_ids_in_partition_.resize(num_partitions);
-      num_workorders_generated_in_partition_.resize(num_partitions);
-      num_workorders_generated_in_partition_.assign(num_partitions, 0);
-      for (std::size_t part_id = 0; part_id < num_partitions; ++part_id) {
-        if (input_relation_is_stored) {
-          input_relation_block_ids_in_partition_[part_id] =
-              part_scheme.getBlocksInPartition(part_id);
-        } else {
-          input_relation_block_ids_in_partition_[part_id] =
-              std::vector<block_id>();
+      num_partitions_ = part_scheme.getPartitionSchemeHeader().getNumPartitions();
+
+      num_workorders_generated_in_partition_.resize(num_partitions_);
+
+      if (input_relation_is_stored) {
+        for (std::size_t part_id = 0; part_id < num_partitions_; ++part_id) {
+          input_relation_block_ids_in_partition_.push_back(
+              part_scheme.getBlocksInPartition(part_id));
         }
+      } else {
+        input_relation_block_ids_in_partition_.resize(num_partitions_);
       }
+    } else if (input_relation_is_stored) {
+      input_relation_block_ids_ = input_relation.getBlocksSnapshot();
     }
   }
 
@@ -245,14 +239,16 @@ class SelectOperator : public RelationalOperator {
   const std::vector<attribute_id> simple_selection_;
 
   std::vector<block_id> input_relation_block_ids_;
+  // A single workorder is generated for each block of input relation.
+  std::vector<block_id>::size_type num_workorders_generated_;
+
+  // Used for the partition case only.
   // A vector of vectors V where V[i] indicates the list of block IDs of the
   // input relation that belong to the partition i.
   std::vector<std::vector<block_id>> input_relation_block_ids_in_partition_;
-
-  // A single workorder is generated for each block of input relation.
-  std::vector<block_id>::size_type num_workorders_generated_;
   // A single workorder is generated for each block in each partition of input relation.
   std::vector<std::size_t> num_workorders_generated_in_partition_;
+  std::size_t num_partitions_;
 
   const bool simple_projection_;
   const bool input_relation_is_stored_;