Ensure Physical node with partitioned inputs has partitioned output, if possible.
diff --git a/query_optimizer/rules/Partition.cpp b/query_optimizer/rules/Partition.cpp
index 4ecdc4a..fd4deb3 100644
--- a/query_optimizer/rules/Partition.cpp
+++ b/query_optimizer/rules/Partition.cpp
@@ -490,10 +490,9 @@
hash_join->project_expressions(),
hash_join->join_type(),
output_partition_scheme_header.release());
- } else if (left_partition_scheme_header) {
- return hash_join->copyWithNewOutputPartitionSchemeHeader(output_partition_scheme_header.release());
}
- break;
+
+ return hash_join->copyWithNewOutputPartitionSchemeHeader(output_partition_scheme_header.release());
}
case P::PhysicalType::kNestedLoopsJoin: {
const P::NestedLoopsJoinPtr nested_loops_join = static_pointer_cast<const P::NestedLoopsJoin>(node);
@@ -549,7 +548,11 @@
return selection->copyWithNewOutputPartitionSchemeHeader(output_partition_scheme_header.release());
}
}
- break;
+
+ // TODO(quickstep-team): Check RangePartitionSchemeHeader against the project expressions.
+ DCHECK(input_partition_scheme_header->partition_type != P::PartitionSchemeHeader::PartitionType::kRange);
+ auto output_partition_scheme_header = make_unique<P::PartitionSchemeHeader>(*input_partition_scheme_header);
+ return selection->copyWithNewOutputPartitionSchemeHeader(output_partition_scheme_header.release());
}
default:
break;