/*
* 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.QueryModelVisitor;
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 regular SQL expression - notation varies between databases.
*
* @author James Leigh
*
*/
public class SqlRegex extends BinarySqlOperator {
/*-----------*
* Variables *
*-----------*/
private SqlExpr flagsArg;
/*--------------*
* Constructors *
*--------------*/
public SqlRegex() {
}
public SqlRegex(SqlExpr expr, SqlExpr pattern) {
super(expr, pattern);
}
public SqlRegex(SqlExpr expr, SqlExpr pattern, SqlExpr flags) {
super(expr, pattern);
setFlagsArg(flags);
}
/*---------*
* Methods *
*---------*/
public SqlExpr getArg() {
return super.getLeftArg();
}
public void setArg(SqlExpr leftArg) {
super.setLeftArg(leftArg);
}
public SqlExpr getPatternArg() {
return super.getRightArg();
}
public void setPatternArg(SqlExpr rightArg) {
super.setRightArg(rightArg);
}
public void setFlagsArg(SqlExpr flags) {
this.flagsArg = flags;
}
public SqlExpr getFlagsArg() {
return flagsArg;
}
@Override
public <X extends Exception> void visitChildren(QueryModelVisitor<X> visitor)
throws X
{
super.visitChildren(visitor);
if (flagsArg != null) {
flagsArg.visit(visitor);
}
}
@Override
public SqlRegex clone() {
SqlRegex clone = (SqlRegex)super.clone();
if (flagsArg != null) {
clone.setFlagsArg(flagsArg.clone());
}
return clone;
}
@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 + ((flagsArg == null) ? 0 : flagsArg.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 SqlRegex other = (SqlRegex)obj;
if (flagsArg == null) {
if (other.flagsArg != null)
return false;
}
else if (!flagsArg.equals(other.flagsArg))
return false;
return true;
}
}