Untitled
unknown
c_cpp
2 years ago
1.9 kB
6
Indexable
#include <memory>
#include "execution/plans/abstract_plan.h"
#include "execution/plans/limit_plan.h"
#include "execution/plans/sort_plan.h"
#include "execution/plans/topn_plan.h"
#include "optimizer/optimizer.h"
namespace bustub {
auto Optimizer::OptimizeSortLimitAsTopN(const AbstractPlanNodeRef &plan) -> AbstractPlanNodeRef {
// TODO(student): implement sort + limit -> top N optimizer rule
std::cout << "Plan's type = " << static_cast<int>(plan->GetType()) << std::endl;
std::vector<AbstractPlanNodeRef> children;
for (const auto &child : plan->GetChildren()) {
children.emplace_back(OptimizeOrderByAsIndexScan(child));
}
auto children_size = children.size();
auto optimized_plan = plan->CloneWithChildren(std::move(children));
std::cout << children_size << std::endl;
if (static_cast<int>(children_size) == 1) {
std::cout << "parent type = " << static_cast<int>(optimized_plan->GetType()) << std::endl;
std::cout << "child type = " << static_cast<int>(optimized_plan->GetChildAt(0)->GetType()) << std::endl;
if (optimized_plan->GetType() == PlanType::Limit && optimized_plan->GetChildAt(0)->GetType() == PlanType::Sort) {
std::cout << "type match" << std::endl;
const auto &limit_plan = dynamic_cast<const LimitPlanNode &>(*optimized_plan);
const auto &sort_plan = dynamic_cast<const SortPlanNode &>(*optimized_plan->GetChildAt(0));
return std::make_shared<TopNPlanNode>(sort_plan.output_schema_, optimized_plan->GetChildAt(0),
sort_plan.GetOrderBy(), limit_plan.GetLimit());
}
// TODO(chien-yu-liu): update optimized_plan to GetChildAt(0)
auto test = optimized_plan->GetChildAt(0);
// optimized_plan = std::unique_ptr<const bustub::AbstractPlanNode>(optimized_plan->GetChildAt(0));
// optimized_plan = std::make_unique(optimized_plan->GetChildAt(0));
}
return plan;
}
} // namespace bustub
Editor is loading...
Leave a Comment