#pragma once
#include "logical_operator_visitor.h"
#include "planner/operator/logical_plan.h"
namespace lbug {
namespace optimizer {
class AggKeyDependencyOptimizer : public LogicalOperatorVisitor {
public:
void rewrite(planner::LogicalPlan* plan);
private:
void visitOperator(planner::LogicalOperator* op);
void visitAggregate(planner::LogicalOperator* op) override;
void visitDistinct(planner::LogicalOperator* op) override;
std::pair<binder::expression_vector, binder::expression_vector> resolveKeysAndDependentKeys(
const binder::expression_vector& keys);
};
} }