/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content.index.queryexpression;
/**
* This class implements the compare expression.
*/
public final class CompareExpr
extends BinaryExpr
{
/**
* Operator constants.
*/
public final static int EQ = 0;
public final static int NEQ = 1;
public final static int LT = 2;
public final static int LTE = 3;
public final static int GT = 4;
public final static int GTE = 5;
public final static int LIKE = 6;
public final static int IN = 7;
public final static int NOT_LIKE = 8;
public final static int NOT_IN = 9;
public final static int FT = 10;
/**
* Operator type.
*/
private final int op;
/**
* Construct the operator expression.
*/
public CompareExpr( int op, Expression left, Expression right )
{
super( left, right );
this.op = op;
}
/**
* Return the operator.
*/
public int getOperator()
{
return this.op;
}
/**
* Return true if relational operator.
*/
public boolean isRelationalOperator()
{
return this.op < LIKE;
}
/**
* Return true if match operator.
*/
public boolean isMatchOperator()
{
return this.op >= LIKE;
}
/**
* Return the operator as string.
*/
public String getToken()
{
switch ( this.op )
{
case EQ:
return "=";
case NEQ:
return "!=";
case LT:
return "<";
case LTE:
return "<=";
case GT:
return ">";
case GTE:
return ">=";
case LIKE:
return "LIKE";
case IN:
return "IN";
case NOT_LIKE:
return "NOT LIKE";
case NOT_IN:
return "NOT IN";
case FT:
return "FT";
default:
return null;
}
}
/**
* Return the expression as string.
*/
public String toString()
{
StringBuffer str = new StringBuffer();
str.append( getLeft().toString() );
str.append( " " );
str.append( getToken() );
str.append( " " );
str.append( getRight().toString() );
return str.toString();
}
/**
* Evaluate the expression.
*/
public Object evaluate( QueryEvaluator evaluator )
{
return evaluator.evaluate( this );
}
}