/* Generated By:JJTree: Do not edit this line. OrderByItem.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 org.teiid.designer.query.sql.lang.IOrderByItem;
import org.teiid.designer.runtime.version.spi.TeiidServerVersion.Version;
import org.teiid.language.SortSpecification;
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.Constant;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.ExpressionSymbol;
import org.teiid.query.sql.symbol.Symbol;
/**
*
*/
public class OrderByItem extends SimpleNode
implements SortSpecification, IOrderByItem<Expression, LanguageVisitor> {
private boolean ascending = true;
private Expression symbol;
private NullOrdering nullOrdering;
private Integer expressionPosition; //set during resolving to the select clause position
/**
* @param p
* @param id
*/
public OrderByItem(ITeiidServerVersion p, int id) {
super(p, id);
}
@Override
public boolean isAscending() {
return ascending;
}
/**
* @param ascending
*/
public void setAscending(boolean ascending) {
this.ascending = ascending;
}
@Override
public Expression getSymbol() {
return symbol;
}
@Override
public void setSymbol(Expression symbol) {
if (symbol != null
&& !(symbol instanceof Symbol) && !(symbol instanceof Constant)) {
ExpressionSymbol ex = createASTNode(ASTNodes.EXPRESSION_SYMBOL);
ex.setName("expr"); //$NON-NLS-1$
ex.setExpression(symbol);
symbol = ex;
}
this.symbol = symbol;
}
/**
* @return ordering value
*/
public NullOrdering getNullOrdering() {
return nullOrdering;
}
/**
* @param nullOrdering
*/
public void setNullOrdering(NullOrdering nullOrdering) {
this.nullOrdering = nullOrdering;
}
/**
* @return expression position set during resolving
*/
public int getExpressionPosition() {
return expressionPosition == null?-1:expressionPosition;
}
/**
* @param expressionPosition
*/
public void setExpressionPosition(int expressionPosition) {
this.expressionPosition = expressionPosition;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + (this.ascending ? 1231 : 1237);
result = prime * result + ((this.nullOrdering == null) ? 0 : this.nullOrdering.hashCode());
result = prime * result + ((this.symbol == null) ? 0 : this.symbol.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;
OrderByItem other = (OrderByItem)obj;
if (this.ascending != other.ascending) return false;
if (this.nullOrdering != other.nullOrdering) return false;
if (this.symbol == null) {
if (other.symbol != null) return false;
} else if (!this.symbol.equals(other.symbol)) return false;
return true;
}
/**
*
* @return true if the expression does not appear in the select clause
*/
public boolean isUnrelated() {
return getExpressionPosition() == -1;
}
/** Accept the visitor. **/
@Override
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
@Override
public OrderByItem clone() {
OrderByItem clone = new OrderByItem(getTeiidVersion(), this.id);
if(getSymbol() != null)
clone.setSymbol(getSymbol().clone());
if(getNullOrdering() != null)
clone.setNullOrdering(getNullOrdering());
clone.setAscending(isAscending());
return clone;
}
}
/* JavaCC - OriginalChecksum=8206369bce4a105220b34cfd64063716 (do not edit this line) */