Package org.apache.calcite.linq4j.tree
Class OptimizeShuttle
- java.lang.Object
-
- org.apache.calcite.linq4j.tree.Shuttle
-
- org.apache.calcite.linq4j.tree.OptimizeShuttle
-
public class OptimizeShuttle extends Shuttle
Shuttle that optimizes expressions.The optimizations are essential, not mere tweaks. Without optimization, expressions such as
false == null
will be left in, which are invalid to Janino (because it does not automatically box primitives).
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.reflect.Method
BOOLEAN_VALUEOF_BOOL
static MemberExpression
BOXED_FALSE_EXPR
static MemberExpression
BOXED_TRUE_EXPR
static Statement
EMPTY_STATEMENT
static ConstantExpression
FALSE_EXPR
private static java.util.Set<java.lang.reflect.Method>
KNOWN_NON_NULL_METHODS
private static java.util.Map<ExpressionType,ExpressionType>
NOT_BINARY_COMPLEMENT
static ConstantExpression
TRUE_EXPR
-
Constructor Summary
Constructors Constructor Description OptimizeShuttle()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static void
addComplement(ExpressionType eq, ExpressionType ne)
private static java.lang.Boolean
always(Expression x)
Returns whether an expression always evaluates to true or false.private static boolean
eq(Expression a, Expression b)
Treats two expressions equal even if they represent different null typesprivate boolean
isConstantNull(Expression expression)
protected boolean
isKnownNotNull(Expression expression)
Returns whether an expression always returns a non-null result.Expression
visit(BinaryExpression binary, Expression expression0, Expression expression1)
Statement
visit(ConditionalStatement conditionalStatement, java.util.List<Node> list)
Expression
visit(MethodCallExpression methodCallExpression, Expression targetExpression, java.util.List<Expression> expressions)
Expression
visit(TernaryExpression ternary, Expression expression0, Expression expression1, Expression expression2)
Expression
visit(UnaryExpression unaryExpression, Expression expression)
private Expression
visit0(BinaryExpression binary, Expression expression0, Expression expression1)
-
Methods inherited from class org.apache.calcite.linq4j.tree.Shuttle
preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, preVisit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit
-
-
-
-
Field Detail
-
FALSE_EXPR
public static final ConstantExpression FALSE_EXPR
-
TRUE_EXPR
public static final ConstantExpression TRUE_EXPR
-
BOXED_FALSE_EXPR
public static final MemberExpression BOXED_FALSE_EXPR
-
BOXED_TRUE_EXPR
public static final MemberExpression BOXED_TRUE_EXPR
-
EMPTY_STATEMENT
public static final Statement EMPTY_STATEMENT
-
KNOWN_NON_NULL_METHODS
private static final java.util.Set<java.lang.reflect.Method> KNOWN_NON_NULL_METHODS
-
NOT_BINARY_COMPLEMENT
private static final java.util.Map<ExpressionType,ExpressionType> NOT_BINARY_COMPLEMENT
-
BOOLEAN_VALUEOF_BOOL
private static final java.lang.reflect.Method BOOLEAN_VALUEOF_BOOL
-
-
Method Detail
-
addComplement
private static void addComplement(ExpressionType eq, ExpressionType ne)
-
visit
public Expression visit(TernaryExpression ternary, Expression expression0, Expression expression1, Expression expression2)
-
visit
public Expression visit(BinaryExpression binary, Expression expression0, Expression expression1)
-
visit0
private Expression visit0(BinaryExpression binary, Expression expression0, Expression expression1)
-
visit
public Expression visit(UnaryExpression unaryExpression, Expression expression)
-
visit
public Statement visit(ConditionalStatement conditionalStatement, java.util.List<Node> list)
-
visit
public Expression visit(MethodCallExpression methodCallExpression, Expression targetExpression, java.util.List<Expression> expressions)
-
isConstantNull
private boolean isConstantNull(Expression expression)
-
always
private static java.lang.Boolean always(Expression x)
Returns whether an expression always evaluates to true or false. Assumes that expression has already been optimized.
-
isKnownNotNull
protected boolean isKnownNotNull(Expression expression)
Returns whether an expression always returns a non-null result. For instance, primitive types cannot contain null values.- Parameters:
expression
- expression to test- Returns:
- true when the expression is known to be not-null
-
eq
private static boolean eq(Expression a, Expression b)
Treats two expressions equal even if they represent different null types
-
-