/* Generated By:JJTree: Do not edit this line. CompareCriteria.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.ICompareCriteria;
import org.teiid.designer.runtime.version.spi.ITeiidServerVersion;
import org.teiid.query.parser.LanguageVisitor;
import org.teiid.query.sql.symbol.Expression;
/**
*
*/
public class CompareCriteria extends AbstractCompareCriteria implements ICompareCriteria<Expression, LanguageVisitor> {
/** The right-hand expression. */
private Expression rightExpression;
// null means existing, but implied
// true means completely derived
// false means required
private Boolean isOptional = Boolean.FALSE;
/**
* @param p
* @param id
*/
public CompareCriteria(ITeiidServerVersion p, int id) {
super(p, id);
}
/**
* Set right expression.
* @param expression Right expression
*/
@Override
public void setRightExpression(Expression expression) {
this.rightExpression = expression;
}
/**
* Get right expression.
* @return right expression
*/
@Override
public Expression getRightExpression() {
return this.rightExpression;
}
/**
* Set during planning to indicate that this criteria is no longer needed
* to correctly process a join
* @param isOptional
*/
public void setOptional(Boolean isOptional) {
if (isOptional == null && Boolean.TRUE.equals(this.isOptional)) {
return;
}
this.isOptional = isOptional;
}
/**
* @return true if the compare criteria is used as join criteria, but not needed
* during processing.
*/
public boolean isOptional() {
return isOptional == null || isOptional;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((this.isOptional == null) ? 0 : this.isOptional.hashCode());
result = prime * result + ((this.rightExpression == null) ? 0 : this.rightExpression.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;
CompareCriteria other = (CompareCriteria)obj;
if (this.isOptional == null) {
if (other.isOptional != null) return false;
} else if (!this.isOptional.equals(other.isOptional)) return false;
if (this.rightExpression == null) {
if (other.rightExpression != null) return false;
} else if (!this.rightExpression.equals(other.rightExpression)) return false;
return true;
}
/** Accept the visitor. **/
@Override
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
@Override
public CompareCriteria clone() {
CompareCriteria clone = new CompareCriteria(getTeiidVersion(), this.id);
if(getRightExpression() != null)
clone.setRightExpression(getRightExpression().clone());
clone.setOptional(isOptional());
if(operator != null)
clone.setOperator(operator);
if(getLeftExpression() != null)
clone.setLeftExpression(getLeftExpression().clone());
return clone;
}
/**
* TODO Refactor {@link CriteriaOperator} to spi
* and replace int with {@link CriteriaOperator.Operator}
*/
@Deprecated
@Override
public void setOperator(int operator) {
this.operator = Operator.findOperator(operator);
}
}
/* JavaCC - OriginalChecksum=b3e2979ada751b1aae0903db53c85d1c (do not edit this line) */