package squill.tree;
import squill.query.Expression;
import squill.query.MultiPartExpression;
import squill.query.QueryPart;
import squill.query.select.Column;
import squill.query.select.ReadableTable;
public class TreeTraverser {
public <T> T traverse(QueryPart queryPart, QueryPartHandler<T> handler,T initial) {
handler.handle(queryPart,initial);
if (queryPart instanceof ReadableTable<?>) {
for (Column column : ((ReadableTable<?>) queryPart).getColumns()) {
traverse(column,handler, initial);
}
}
if (queryPart instanceof MultiPartExpression) {
for (Expression<?> expression : ((MultiPartExpression<?>) queryPart).getParts()) {
traverse(expression, handler, initial);
}
}
return initial;
}
}