You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by zu...@apache.org on 2016/05/27 03:23:31 UTC
[40/50] [abbrv] incubator-quickstep git commit: Some more changes.
Some more changes.
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/0cd65635
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/0cd65635
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/0cd65635
Branch: refs/heads/partition_aware_hashjoin_with_optimizer_support
Commit: 0cd656351e9fa11fe27a258c27fe97e248eb5a27
Parents: 6abe177
Author: Adalbert Gerald Soosai Raj <ge...@cs.wisc.edu>
Authored: Mon May 23 22:18:35 2016 -0500
Committer: Adalbert Gerald Soosai Raj <ge...@cs.wisc.edu>
Committed: Mon May 23 22:18:35 2016 -0500
----------------------------------------------------------------------
query_optimizer/ExecutionGenerator.cpp | 27 +++++++--------------------
1 file changed, 7 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0cd65635/query_optimizer/ExecutionGenerator.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/ExecutionGenerator.cpp b/query_optimizer/ExecutionGenerator.cpp
index 2a2098c..12dacda 100644
--- a/query_optimizer/ExecutionGenerator.cpp
+++ b/query_optimizer/ExecutionGenerator.cpp
@@ -571,26 +571,13 @@ void ExecutionGenerator::convertSelection(
DCHECK(input_relation_info != nullptr);
bool is_temp_relation_partitioned = false;
- bool is_partitioning_attr_projected = false;
- bool is_input_stored_relation = true;
- const CatalogRelation *referenced_selection_input_relation = nullptr;
- if (input_relation_info->relation->hasPartitionScheme()) {
- const attribute_id input_partition_attr_id = input_relation_info->relation->getPartitionScheme().getPartitionSchemeHeader().getPartitionAttributeId();
- for (const E::AttributeReferencePtr &projected_attr : physical_selection->getOutputAttributes()) {
- // Check if the input is a stored relation.
- referenced_selection_input_relation = optimizer_context_->catalog_database()->getRelationByName(projected_attr->relation_name());
- if (referenced_selection_input_relation == nullptr) {
- is_input_stored_relation = false;
- break;
- } else {
- const attribute_id referenced_selection_attr_id = referenced_selection_input_relation->getAttributeByName(projected_attr->attribute_name())->getID();
- if (referenced_selection_attr_id == input_partition_attr_id) {
- is_partitioning_attr_projected = true;
- break;
- }
- }
- }
- if (is_partitioning_attr_projected && is_input_stored_relation) {
+ P::TableReferencePtr table_reference;
+ if (P::SomeTableReference::MatchesWithConditionalCast(physical_selection->input(), &table_reference) &&
+ table_reference->relation()->hasPartitionScheme()) {
+ const attribute_id partition_attr_id =
+ table_reference->relation()->getPartitionScheme().getPartitionSchemeHeader().getPartitionAttributeId();
+ const E::AttributeReferencePtr &attr = table_reference->attribute_list()[partition_attr_id];
+ if (E::ContainsExpression(physical_selection->getOutputAttributes(), attr)) {
is_temp_relation_partitioned = true;
}
}