package eu.leads.processor.sql.select; import eu.leads.processor.sql.Plan; import eu.leads.processor.sql.PlanNode; import eu.leads.processor.sql.PlanTraverser; import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.statement.select.*; import org.apache.log4j.Logger; import java.util.Iterator; import java.util.List; /** * Created with IntelliJ IDEA. * User: vagvaz * Date: 9/3/13 * Time: 10:38 AM * To change this template use File | Settings | File Templates. */ public class LeadsSelectVisitor implements SelectVisitor, SelectItemVisitor { private final Plan plan; private final PlanTraverser traverser; static final Logger log = Logger.getLogger(LeadsSelectVisitor.class.getName()); public LeadsSelectVisitor(Plan plan, PlanTraverser traverser) { this.plan = plan; this.traverser = traverser; } @Override public void visit(PlainSelect plainSelect) { //First check the limit of the query Limit limit = plainSelect.getLimit(); if (limit != null) { PlanNode limitNode; // limitNode = plan.createNodeWithOutput(traverser.getCurrent().getName()); // limitNode.addParameter("offset", Long.toString(limit.getOffset())); // limitNode.addParameter("rowCount", Long.toString(limit.getRowCount())); // limitNode.addParameter("limitAll", Boolean.toString(limit.isLimitAll())); // traverser.goTo(limitNode.getName()); } List<OrderByElement> orderby = plainSelect.getOrderByElements(); if (orderby != null) { for (Iterator<OrderByElement> iterator = orderby.iterator(); iterator.hasNext(); ) { OrderByElement next = iterator.next(); if (next.getExpression() instanceof Column) { } else { log.error("ORDER BY not coumn but " + next.getExpression().toString()); } } } // We will not check the plainSelect.getTop(); plainSelect.getGroupByColumnReferences(); plainSelect.getFromItem(); plainSelect.getJoins(); plainSelect.getHaving(); plainSelect.getWhere(); plainSelect.getDistinct(); plainSelect.getSelectItems(); plainSelect.getInto(); } @Override public void visit(SetOperationList setOpList) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void visit(WithItem withItem) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void visit(AllColumns allColumns) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void visit(AllTableColumns allTableColumns) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void visit(SelectExpressionItem selectExpressionItem) { //To change body of implemented methods use File | Settings | File Templates. } }