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 == nullwill 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 MethodBOOLEAN_VALUEOF_BOOLstatic MemberExpressionBOXED_FALSE_EXPRstatic MemberExpressionBOXED_TRUE_EXPRstatic StatementEMPTY_STATEMENTstatic ConstantExpressionFALSE_EXPRprivate static Set<Method>KNOWN_NON_NULL_METHODSprivate static Map<ExpressionType,ExpressionType>NOT_BINARY_COMPLEMENTstatic ConstantExpressionTRUE_EXPR
-
Constructor Summary
Constructors Constructor Description OptimizeShuttle()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static voidaddComplement(ExpressionType eq, ExpressionType ne)private static Booleanalways(Expression x)Returns whether an expression always evaluates to true or false.private static booleaneq(Expression a, Expression b)Treats two expressions equal even if they represent different null typesprivate booleanisConstantNull(Expression expression)protected booleanisKnownNotNull(Expression expression)Returns whether an expression always returns a non-null result.Expressionvisit(BinaryExpression binary, Expression expression0, Expression expression1)Statementvisit(ConditionalStatement conditionalStatement, List<Node> list)Expressionvisit(MethodCallExpression methodCallExpression, Expression targetExpression, List<Expression> expressions)Expressionvisit(TernaryExpression ternary, Expression expression0, Expression expression1, Expression expression2)Expressionvisit(UnaryExpression unaryExpression, Expression expression)private Expressionvisit0(BinaryExpression binary, Expression expression0, Expression expression1)-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
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
-
NOT_BINARY_COMPLEMENT
private static final Map<ExpressionType,ExpressionType> NOT_BINARY_COMPLEMENT
-
BOOLEAN_VALUEOF_BOOL
private static final 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, List<Node> list)
-
visit
public Expression visit(MethodCallExpression methodCallExpression, Expression targetExpression, List<Expression> expressions)
-
isConstantNull
private boolean isConstantNull(Expression expression)
-
always
private static 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
-
-