/*
* Copyright (c) 2006-2011 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.emulation.hibernate3.ast.whereClause;
import java.util.*;
import mockit.emulation.hibernate3.ast.*;
final class LogicalOrExpr extends Expr
{
final List<Expr> andExprs;
LogicalOrExpr(List<Expr> andExprs)
{
this.andExprs = andExprs;
}
public static Expr parse(Tokens tokens)
{
Expr andExpr = LogicalAndExpr.parse(tokens);
List<Expr> andExprs = new LinkedList<Expr>();
andExprs.add(andExpr);
while (tokens.hasNext()) {
if (!"or".equals(tokens.next())) {
tokens.pushback();
break;
}
andExpr = LogicalAndExpr.parse(tokens);
if (andExpr == null) {
throw new QuerySyntaxException(tokens);
}
andExprs.add(andExpr);
}
return andExprs.size() == 1 ? andExpr : new LogicalOrExpr(andExprs);
}
@Override
public Boolean evaluate(QueryEval eval)
{
for (Expr andExpr : andExprs) {
if ((Boolean) andExpr.evaluate(eval)) {
return true;
}
}
return false;
}
}