Class VarThisCompilationOptimiser
- java.lang.Object
-
- org.datanucleus.store.query.compiler.VarThisCompilationOptimiser
-
- All Implemented Interfaces:
CompilationOptimiser
public class VarThisCompilationOptimiser extends java.lang.Object implements CompilationOptimiser
Optimiser for query compilation that searches for variable equality like "var == this". Since the variable is the same as the candidate it will replace all instances of the variable with the candidate. TODO We should only update "var == this" in the same branch of the filter (i.e not if used in other branches of the filter) Applies to the FILTER only.
-
-
Field Summary
Fields Modifier and Type Field Description (package private) QueryCompilationcompilationThe compilation that we are optimising.
-
Constructor Summary
Constructors Constructor Description VarThisCompilationOptimiser(QueryCompilation compilation, MetaDataManager unused, ClassLoaderResolver clr)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidfindRedundantFilterVariables(Expression filterExpr, java.util.Set<java.lang.String> varNames)Method to process the provided filter expression and find any variables that are to all intents and purposes redundant.voidoptimise()Method to perform the optimisation.private ExpressionreplaceVariableWithCandidateInExpression(java.lang.String varName, Expression expr)Method that replaces any occurrence of the specified variable in the provided expression with the candidate primary expression.
-
-
-
Field Detail
-
compilation
QueryCompilation compilation
The compilation that we are optimising.
-
-
Constructor Detail
-
VarThisCompilationOptimiser
public VarThisCompilationOptimiser(QueryCompilation compilation, MetaDataManager unused, ClassLoaderResolver clr)
-
-
Method Detail
-
optimise
public void optimise()
Description copied from interface:CompilationOptimiserMethod to perform the optimisation.- Specified by:
optimisein interfaceCompilationOptimiser
-
replaceVariableWithCandidateInExpression
private Expression replaceVariableWithCandidateInExpression(java.lang.String varName, Expression expr)
Method that replaces any occurrence of the specified variable in the provided expression with the candidate primary expression. Recurses to sub-expressions.- Parameters:
varName- Variable nameexpr- The expression to update- Returns:
- Updated expression
-
findRedundantFilterVariables
private void findRedundantFilterVariables(Expression filterExpr, java.util.Set<java.lang.String> varNames)
Method to process the provided filter expression and find any variables that are to all intents and purposes redundant. Checks for "var == this". In this case we can just replace the variable occurrences with "this".- Parameters:
filterExpr- The filtervarNames- The variable names that are redundant (updated by this method)
-
-