/* Generated By:JJTree: Do not edit this line. OrderBy.java Version 4.3 */ /* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ package org.teiid.query.sql.lang; import java.util.ArrayList; import java.util.List; import org.teiid.designer.query.sql.lang.IOrderBy; import org.teiid.query.parser.LanguageVisitor; import org.teiid.query.parser.TeiidNodeFactory.ASTNodes; import org.teiid.designer.runtime.version.spi.ITeiidServerVersion; import org.teiid.query.sql.symbol.Expression; import org.teiid.runtime.client.Messages; /** * */ public class OrderBy extends SimpleNode implements IOrderBy<Expression, OrderByItem, LanguageVisitor> { private List<OrderByItem> orderByItems = new ArrayList<OrderByItem>(); /** * @param p * @param id */ public OrderBy(ITeiidServerVersion p, int id) { super(p, id); } @Override public List<OrderByItem> getOrderByItems() { return this.orderByItems; } /** * Returns the ORDER BY element at the specified index. * @param index Index to get * @return The element at the index */ public Expression getVariable( int index ) { return orderByItems.get(index).getSymbol(); } /** * Adds a new variable to the list of order by elements. * @param element Element to add */ @Override public void addVariable( Expression element ) { addVariable(element, true); } /** * Adds a new variable to the list of order by elements with the * specified sort order * @param element Element to add * @param type True for ascending, false for descending */ @Override public void addVariable( Expression element, boolean type ) { if(element == null) throw new IllegalArgumentException(Messages.getString(Messages.ERR.ERR_015_010_0021)); OrderByItem orderByItem = createASTNode(ASTNodes.ORDER_BY_ITEM); orderByItem.setSymbol(element); orderByItem.setAscending(type); orderByItems.add(orderByItem); } @Override public int getVariableCount() { return orderByItems.size(); } /** * @param orderIndex * @return expression position set during resolving */ public int getExpressionPosition(int orderIndex) { return this.orderByItems.get(orderIndex).getExpressionPosition(); } /** * @param orderIndex * @param selectIndex */ public void setExpressionPosition(int orderIndex, int selectIndex) { this.orderByItems.get(orderIndex).setExpressionPosition(selectIndex); } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + ((this.orderByItems == null) ? 0 : this.orderByItems.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (!super.equals(obj)) return false; if (getClass() != obj.getClass()) return false; OrderBy other = (OrderBy)obj; if (this.orderByItems == null) { if (other.orderByItems != null) return false; } else if (!this.orderByItems.equals(other.orderByItems)) return false; return true; } /** Accept the visitor. **/ @Override public void acceptVisitor(LanguageVisitor visitor) { visitor.visit(this); } @Override public OrderBy clone() { OrderBy clone = new OrderBy(getTeiidVersion(), this.id); clone.getOrderByItems().addAll(cloneList(orderByItems)); return clone; } } /* JavaCC - OriginalChecksum=6b23125e8c3c5abfe22f4f4ae93fb66d (do not edit this line) */