#pragma once
#include "logical_operator_visitor.h"
#include "planner/operator/logical_plan.h"
namespace lbug {
namespace optimizer {
class UnwindDedupOptimizer : public LogicalOperatorVisitor {
public:
void rewrite(planner::LogicalPlan* plan);
private:
std::shared_ptr<planner::LogicalOperator> visitOperator(
const std::shared_ptr<planner::LogicalOperator>& op, bool isRoot = false);
std::shared_ptr<planner::LogicalOperator> visitMergeReplace(
std::shared_ptr<planner::LogicalOperator> op) override;
bool canRewriteCurrentMerge = false;
};
} }