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/07/10 20:36:53 UTC
incubator-quickstep git commit: Refactored
PartitionAwareInsertDestination::getPartitionId.
Repository: incubator-quickstep
Updated Branches:
refs/heads/master f35bd8f60 -> aebe60af8
Refactored PartitionAwareInsertDestination::getPartitionId.
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/aebe60af
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/aebe60af
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/aebe60af
Branch: refs/heads/master
Commit: aebe60af8d73a382eead24dee3c9eb5b840bc666
Parents: f35bd8f
Author: Zuyu Zhang <zu...@apache.org>
Authored: Tue Jun 27 20:16:35 2017 -0500
Committer: Zuyu Zhang <zu...@cs.wisc.edu>
Committed: Mon Jul 10 14:41:58 2017 -0500
----------------------------------------------------------------------
storage/InsertDestination.cpp | 16 ++++++----------
storage/InsertDestination.hpp | 34 +++++++++++++++++++++++++---------
2 files changed, 31 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/aebe60af/storage/InsertDestination.cpp
----------------------------------------------------------------------
diff --git a/storage/InsertDestination.cpp b/storage/InsertDestination.cpp
index 3caa80f..ff39c55 100644
--- a/storage/InsertDestination.cpp
+++ b/storage/InsertDestination.cpp
@@ -619,19 +619,17 @@ void PartitionAwareInsertDestination::bulkInsertTuples(ValueAccessor *accessor,
[this,
&always_mark_full,
&num_partitions](auto *accessor) -> void { // NOLINT(build/c++11)
- std::vector<std::unique_ptr<TupleIdSequence>> partition_membership;
+ std::vector<std::unique_ptr<TupleIdSequence>> partition_membership(num_partitions);
// Create a tuple-id sequence for each partition.
for (std::size_t partition = 0; partition < num_partitions; ++partition) {
- partition_membership.emplace_back(std::make_unique<TupleIdSequence>(accessor->getEndPosition()));
+ partition_membership[partition] = std::make_unique<TupleIdSequence>(accessor->getEndPosition());
}
// Iterate over ValueAccessor for each tuple,
// set a bit in the appropriate TupleIdSequence.
accessor->beginIteration();
- while (accessor->next()) {
- partition_membership[this->getPartitionId(accessor)]->set(accessor->getCurrentPosition(), true);
- }
+ this->setPartitionMembership(&partition_membership, accessor);
// For each partition, create an adapter around Value Accessor and
// TupleIdSequence.
@@ -670,19 +668,17 @@ void PartitionAwareInsertDestination::bulkInsertTuplesWithRemappedAttributes(
&attribute_map,
&always_mark_full,
&num_partitions](auto *accessor) -> void { // NOLINT(build/c++11)
- std::vector<std::unique_ptr<TupleIdSequence>> partition_membership;
+ std::vector<std::unique_ptr<TupleIdSequence>> partition_membership(num_partitions);
// Create a tuple-id sequence for each partition.
for (std::size_t partition = 0; partition < num_partitions; ++partition) {
- partition_membership.emplace_back(std::make_unique<TupleIdSequence>(accessor->getEndPosition()));
+ partition_membership[partition] = std::make_unique<TupleIdSequence>(accessor->getEndPosition());
}
// Iterate over ValueAccessor for each tuple,
// set a bit in the appropriate TupleIdSequence.
accessor->beginIteration();
- while (accessor->next()) {
- partition_membership[this->getPartitionId(accessor)]->set(accessor->getCurrentPosition(), true);
- }
+ this->setPartitionMembership(&partition_membership, accessor);
// For each partition, create an adapter around Value Accessor and
// TupleIdSequence.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/aebe60af/storage/InsertDestination.hpp
----------------------------------------------------------------------
diff --git a/storage/InsertDestination.hpp b/storage/InsertDestination.hpp
index 878ebb4..c3d5641 100644
--- a/storage/InsertDestination.hpp
+++ b/storage/InsertDestination.hpp
@@ -36,6 +36,7 @@
#include "storage/StorageBlock.hpp"
#include "storage/StorageBlockInfo.hpp"
#include "storage/StorageBlockLayout.hpp"
+#include "storage/TupleIdSequence.hpp"
#include "storage/ValueAccessor.hpp"
#include "threading/SpinMutex.hpp"
#include "threading/ThreadIDBasedMap.hpp"
@@ -612,21 +613,35 @@ class PartitionAwareInsertDestination : public InsertDestination {
}
partition_id getPartitionId(const Tuple &tuple) const {
- PartitionSchemeHeader::PartitionValues values;
- for (const attribute_id attr_id : partition_scheme_header_->getPartitionAttributeIds()) {
- values.push_back(tuple.getAttributeValue(attr_id));
+ const auto &partition_attr_ids = partition_scheme_header_->getPartitionAttributeIds();
+
+ PartitionSchemeHeader::PartitionValues values(partition_attr_ids.size());
+ for (std::size_t i = 0; i < partition_attr_ids.size(); ++i) {
+ values[i] = tuple.getAttributeValue(partition_attr_ids[i]);
}
return values.empty() ? input_partition_id_ : partition_scheme_header_->getPartitionId(values);
}
- partition_id getPartitionId(ValueAccessor *accessor) const {
- PartitionSchemeHeader::PartitionValues values;
- for (const attribute_id attr_id : partition_scheme_header_->getPartitionAttributeIds()) {
- values.push_back(accessor->getTypedValueVirtual(attr_id));
+ template<typename ValueAccessorT>
+ void setPartitionMembership(std::vector<std::unique_ptr<TupleIdSequence>> *partition_membership,
+ ValueAccessorT *accessor) const {
+ const auto &partition_attr_ids = partition_scheme_header_->getPartitionAttributeIds();
+
+ if (partition_attr_ids.empty()) {
+ while (accessor->next()) {
+ (*partition_membership)[input_partition_id_]->set(accessor->getCurrentPosition(), true);
+ }
+ } else {
+ PartitionSchemeHeader::PartitionValues values(partition_attr_ids.size());
+ while (accessor->next()) {
+ for (std::size_t i = 0; i < partition_attr_ids.size(); ++i) {
+ values[i] = accessor->getTypedValue(partition_attr_ids[i]);
+ }
+ (*partition_membership)[partition_scheme_header_->getPartitionId(values)]->set(
+ accessor->getCurrentPosition(), true);
+ }
}
-
- return values.empty() ? input_partition_id_ : partition_scheme_header_->getPartitionId(values);
}
std::unique_ptr<const PartitionSchemeHeader> partition_scheme_header_;
@@ -646,6 +661,7 @@ class PartitionAwareInsertDestination : public InsertDestination {
DISALLOW_COPY_AND_ASSIGN(PartitionAwareInsertDestination);
};
+
/** @} */
} // namespace quickstep