/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2008.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.sail.rdbms.algebra;
import org.openrdf.query.algebra.Compare.CompareOp;
import org.openrdf.sail.rdbms.algebra.base.BinarySqlOperator;
import org.openrdf.sail.rdbms.algebra.base.RdbmsQueryModelVisitorBase;
import org.openrdf.sail.rdbms.algebra.base.SqlExpr;
/**
* The SQL compare expressions (>, <, >=, <=).
*
* @author James Leigh
*
*/
public class SqlCompare extends BinarySqlOperator {
public enum Operator {
GT,
LT,
GE,
LE
}
private Operator op;
public SqlCompare(SqlExpr leftArg, CompareOp op, SqlExpr rightArg) {
super(leftArg, rightArg);
switch (op) {
case GT:
this.op = Operator.GT;
break;
case LT:
this.op = Operator.LT;
break;
case GE:
this.op = Operator.GE;
break;
case LE:
this.op = Operator.LE;
break;
default:
throw new AssertionError(op);
}
}
public Operator getOperator() {
return op;
}
@Override
public String getSignature() {
return super.getSignature() + " (" + op + ")";
}
@Override
public <X extends Exception> void visit(RdbmsQueryModelVisitorBase<X> visitor)
throws X
{
visitor.meet(this);
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((op == null) ? 0 : op.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;
final SqlCompare other = (SqlCompare)obj;
if (op == null) {
if (other.op != null)
return false;
}
else if (!op.equals(other.op))
return false;
return true;
}
}