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;
     }
   }