in src/main/java/net/hydromatic/linq4j/expressions/BinaryExpression.java [48:153]
public Object evaluate(Evaluator evaluator) {
switch (nodeType) {
case AndAlso:
return (Boolean) expression0.evaluate(evaluator)
&& (Boolean) expression1.evaluate(evaluator);
case Add:
switch (primitive) {
case INT:
return (Integer) expression0.evaluate(evaluator) + (Integer) expression1
.evaluate(evaluator);
case DOUBLE:
return (Double) expression0.evaluate(evaluator)
+ (Double) expression1.evaluate(evaluator);
default:
throw cannotEvaluate();
}
case Divide:
switch (primitive) {
case INT:
return (Integer) expression0.evaluate(evaluator) / (Integer) expression1
.evaluate(evaluator);
case DOUBLE:
return (Double) expression0.evaluate(evaluator)
/ (Double) expression1.evaluate(evaluator);
default:
throw cannotEvaluate();
}
case Equal:
return expression0.evaluate(evaluator).equals(expression1.evaluate(
evaluator));
case GreaterThan:
switch (primitive) {
case INT:
return (Integer) expression0.evaluate(evaluator) > (Integer) expression1
.evaluate(evaluator);
case DOUBLE:
return (Double) expression0.evaluate(evaluator)
> (Double) expression1.evaluate(evaluator);
default:
throw cannotEvaluate();
}
case GreaterThanOrEqual:
switch (primitive) {
case INT:
return (Integer) expression0.evaluate(evaluator)
>= (Integer) expression1.evaluate(evaluator);
case DOUBLE:
return (Double) expression0.evaluate(evaluator)
>= (Double) expression1.evaluate(evaluator);
default:
throw cannotEvaluate();
}
case LessThan:
switch (primitive) {
case INT:
return (Integer) expression0.evaluate(evaluator) < (Integer) expression1
.evaluate(evaluator);
case DOUBLE:
return (Double) expression0.evaluate(evaluator)
< (Double) expression1.evaluate(evaluator);
default:
throw cannotEvaluate();
}
case LessThanOrEqual:
switch (primitive) {
case INT:
return (Integer) expression0.evaluate(evaluator)
<= (Integer) expression1.evaluate(evaluator);
case DOUBLE:
return (Double) expression0.evaluate(evaluator)
<= (Double) expression1.evaluate(evaluator);
default:
throw cannotEvaluate();
}
case Multiply:
switch (primitive) {
case INT:
return (Integer) expression0.evaluate(evaluator) * (Integer) expression1
.evaluate(evaluator);
case DOUBLE:
return (Double) expression0.evaluate(evaluator)
* (Double) expression1.evaluate(evaluator);
default:
throw cannotEvaluate();
}
case NotEqual:
return !expression0.evaluate(evaluator).equals(expression1.evaluate(
evaluator));
case OrElse:
return (Boolean) expression0.evaluate(evaluator)
|| (Boolean) expression1.evaluate(evaluator);
case Subtract:
switch (primitive) {
case INT:
return (Integer) expression0.evaluate(evaluator) - (Integer) expression1
.evaluate(evaluator);
case DOUBLE:
return (Double) expression0.evaluate(evaluator)
- (Double) expression1.evaluate(evaluator);
default:
throw cannotEvaluate();
}
default:
throw cannotEvaluate();
}
}