Added Partition rules for Sort.
diff --git a/query_optimizer/rules/CMakeLists.txt b/query_optimizer/rules/CMakeLists.txt
index 7abe0d1..73a80d2 100644
--- a/query_optimizer/rules/CMakeLists.txt
+++ b/query_optimizer/rules/CMakeLists.txt
@@ -182,6 +182,7 @@
quickstep_queryoptimizer_physical_Physical
quickstep_queryoptimizer_physical_PhysicalType
quickstep_queryoptimizer_physical_Selection
+ quickstep_queryoptimizer_physical_Sort
quickstep_queryoptimizer_physical_TableReference
quickstep_queryoptimizer_physical_TopLevelPlan
quickstep_queryoptimizer_rules_BottomUpRule
diff --git a/query_optimizer/rules/Partition.cpp b/query_optimizer/rules/Partition.cpp
index 5f8b2c6..5f68cd3 100644
--- a/query_optimizer/rules/Partition.cpp
+++ b/query_optimizer/rules/Partition.cpp
@@ -46,6 +46,7 @@
#include "query_optimizer/physical/Physical.hpp"
#include "query_optimizer/physical/PhysicalType.hpp"
#include "query_optimizer/physical/Selection.hpp"
+#include "query_optimizer/physical/Sort.hpp"
#include "query_optimizer/physical/TableReference.hpp"
#include "query_optimizer/physical/TopLevelPlan.hpp"
#include "types/operations/binary_operations/BinaryOperation.hpp"
@@ -566,6 +567,16 @@
return selection->copyWithNewOutputPartitionSchemeHeader(output_partition_scheme_header.release(),
false /* has_repartition */);
}
+ case P::PhysicalType::kSort: {
+ const P::SortPtr sort = static_pointer_cast<const P::Sort>(node);
+ const P::PhysicalPtr input = sort->input();
+ if (P::SomeTableReference::Matches(input) ||
+ !input->getOutputPartitionSchemeHeader()) {
+ break;
+ }
+
+ return sort->copyWithNewChildren({ input->copyWithNewOutputPartitionSchemeHeader(nullptr) });
+ }
default:
break;
}