public Object evaluate()

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();
    }
  }