32 lines
515 B
Scala
32 lines
515 B
Scala
@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
|
|
}
|
|
} |