public Expression visit()

in src/main/java/net/hydromatic/linq4j/expressions/OptimizeVisitor.java [271:303]


  public Expression visit(UnaryExpression unaryExpression,
      Expression expression) {
    switch (unaryExpression.getNodeType()) {
    case Convert:
      if (expression.getType() == unaryExpression.getType()) {
        return expression;
      }
      if (expression instanceof ConstantExpression) {
        return Expressions.constant(((ConstantExpression) expression).value,
            unaryExpression.getType());
      }
      break;
    case Not:
      Boolean always = always(expression);
      if (always != null) {
        return always ? FALSE_EXPR : TRUE_EXPR;
      }
      if (expression instanceof UnaryExpression) {
        UnaryExpression arg = (UnaryExpression) expression;
        if (arg.getNodeType() == ExpressionType.Not) {
          return arg.expression;
        }
      }
      if (expression instanceof BinaryExpression) {
        BinaryExpression bin = (BinaryExpression) expression;
        ExpressionType comp = NOT_BINARY_COMPLEMENT.get(bin.getNodeType());
        if (comp != null) {
          return Expressions.makeBinary(comp, bin.expression0, bin.expression1);
        }
      }
    }
    return super.visit(unaryExpression, expression);
  }