stmt = booleanNormalizer.normalize(stmt);
typeComputer.compute(stmt);
stmt = subqueryFlattener.flatten((DMLStatementNode)stmt);
// Turn parsed AST into intermediate form as starting point.
PlanContext plan = new PlanContext(rules,
new AST((DMLStatementNode)stmt,
parser.getParameterList()));
rules.applyRules(plan);
Map<Set<Map<String,Boolean>>,Integer> result = new HashMap<>();
Collection<EquivalenceScope> scopes = new ColumnFinder().find(plan.getPlan());