@import com.astraldb.spec.Definition @(ctx:Definition) object Optimizer { val rules = Seq[Rule[LogicalPlan]]( @for(rule <- ctx.rules){ @rule.safeLabel, } ) def MAX_ITERATIONS = 100 def rewrite(plan: LogicalPlan): LogicalPlan = { var current = plan var last = plan for(i <- 0 until MAX_ITERATIONS) { for(rule <- rules) { current = rule(plan) } if(last.fastEquals(current)) { return current } } return current } }