Class QueryToSQLMapper
- java.lang.Object
-
- org.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
- org.datanucleus.store.rdbms.query.QueryToSQLMapper
-
- All Implemented Interfaces:
org.datanucleus.store.query.expression.ExpressionEvaluator,QueryGenerator
public class QueryToSQLMapper extends org.datanucleus.store.query.expression.AbstractExpressionEvaluator implements QueryGenerator
Class which maps a compiled (generic) query to an SQL query for RDBMS datastores. Takes in an SQLStatement, and use of compile() will update the SQLStatement to reflect the filter, result, grouping, having, ordering etc.Supports the following extensions currently :-
- datanucleus.query.jdoql.{varName}.join defines the join type for that alias. This only currently applies if the variable is (finally) bound using the equality operator (e.g var.field == this.field). The extension should be set to "LEFTOUTERJOIN", "INNERJOIN"
TODO This class currently takes in an SQLStatement and updates it with filter, result, from etc. If the input statement is a UNION of statements it tries to update the statement by applying the filter, result etc across all UNIONs. This can cause problems in some situations, particularly around looking up tables when using COMPLETE_TABLE inheritance, or with TYPE/instanceOf operations. We currently work around these by some fixes to getSQLTableMappingForPrimaryExpression, and by manually going around the UNIONs. What may be a better long term solution would be to run this class on each of the UNIONed statements separately and merge them.
-
-
Field Summary
Fields Modifier and Type Field Description static StringMAP_KEY_ALIAS_SUFFIXstatic StringMAP_VALUE_ALIAS_SUFFIXstatic StringOPTION_BULK_UPDATE_VERSIONstatic StringOPTION_CASE_INSENSITIVEstatic StringOPTION_EXPLICIT_JOINSstatic StringOPTION_NON_DISTINCT_IMPLICIT_JOINSstatic StringOPTION_NULL_PARAM_USE_IS_NULLstatic StringOPTION_SELECT_CANDIDATE_ID_ONLYQueryToSQLMapperparentMapperParent mapper if we are processing a subquery.protected booleanprocessingCase
-
Constructor Summary
Constructors Constructor Description QueryToSQLMapper(SQLStatement stmt, org.datanucleus.store.query.compiler.QueryCompilation compilation, Map parameters, StatementClassMapping resultDefForClass, StatementResultMapping resultDef, org.datanucleus.metadata.AbstractClassMetaData cmd, boolean subclasses, org.datanucleus.FetchPlan fetchPlan, org.datanucleus.ExecutionContext ec, org.datanucleus.util.Imports importsDefinition, Set<String> options, Map<String,Object> extensions)Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidbindParameter(String paramName, Class type)Method to bind the specified parameter to the defined type.voidbindVariable(String varName, org.datanucleus.metadata.AbstractClassMetaData cmd, SQLTable sqlTbl, JavaTypeMapping mapping)Method to bind the specified variable to the table and mapping.SQLExpressionbindVariable(UnboundExpression expr, Class type)Method to bind the specified unbound variable (as cross join) on the assumption that the type is a persistable class.voidcompile()Method to update the supplied SQLStatement with the components of the specified query.protected voidcompileFilter()Method to compile the WHERE clause of the query into the SQLStatement.protected voidcompileFrom()Method to compile the FROM clause of the query into the SQLStatement.protected voidcompileFromClassExpression(org.datanucleus.store.query.expression.ClassExpression clsExpr)Method to take a ClassExpression (in a FROM clause) and process the candidate and any linked JoinExpression(s), adding joins to the SQLStatement as required.protected voidcompileGrouping(SelectStatement stmt)Method to compile the grouping clause of the query into the SQLStatement.protected voidcompileHaving(SelectStatement stmt)Method to compile the having clause of the query into the SQLStatement.protected voidcompileOrdering(SelectStatement stmt)Method to compile the ordering clause of the query into the SQLStatement.protected voidcompileResult(SelectStatement stmt)Method to compile the result clause of the query into the SQLStatement.protected voidcompileUpdate(UpdateStatement stmt)Method to compile the result clause of the query into the SQLStatement.StringgetAliasForSQLTable(SQLTable tbl)Returns the alias used for the specified SQLTable.StringgetAliasForSQLTableMapping(org.datanucleus.store.rdbms.query.QueryToSQLMapper.SQLTableMapping tblMapping)protected BooleanExpressiongetBooleanExpressionForUseInFilter(BooleanExpression expr)Convenience method to return a boolean expression suitable for using in a filter.org.datanucleus.ClassLoaderResolvergetClassLoaderResolver()Accessor for the ClassLoader resolver to use when looking up classes.org.datanucleus.store.query.compiler.CompilationComponentgetCompilationComponent()Accessor for the current query component being compiled.org.datanucleus.ExecutionContextgetExecutionContext()Accessor for the ExecutionContext for this query.protected SQLExpressiongetInvokedSqlExpressionForInvokeExpression(org.datanucleus.store.query.expression.InvokeExpression expr)Map<Integer,String>getParameterNameByPosition()Convenience accessor for a map of the parameter name keyed by its position.ObjectgetProperty(String name)Accessor for a property affecting the query compilation.StringgetQueryLanguage()Accessor for the query language that this query pertains to.SQLJoin.JoinTypegetRequiredJoinTypeForAlias(String alias)Convenience method to return the required join type for the specified alias.protected SQLExpressiongetSQLLiteralForLiteralValue(Object litValue)protected org.datanucleus.store.rdbms.query.QueryToSQLMapper.SQLTableMappinggetSQLTableMappingForAlias(String alias)protected StatementNewObjectMappinggetStatementMappingForNewObjectExpression(NewObjectExpression expr, SelectStatement stmt)Convenience method to convert a NewObjectExpression into a StatementNewObjectMapping.ClassgetTypeOfVariable(String varName)Accessor for the type of a variable if already known (declared?).ObjectgetValueForExtension(String key)Accessor for the value of the specified query extension (or null if not defined).protected ObjectgetValueForObjectField(Object obj, String fieldName)Convenience method to return the value of a field of the supplied object.booleanhasExplicitJoins()Accessor for whether the query has explicit variables.booleanhasExtension(String key)Accessor for whether the query being generated has the specified extension.protected booleanhasSQLTableMappingForAlias(String alias)booleanisPrecompilable()Accessor for whether the query is precompilable (doesn't need to know parameter values to be able to compile it).protected ObjectprocessAddExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessAndExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessBitAndExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessBitOrExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessBitXorExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessCaseExpression(org.datanucleus.store.query.expression.CaseExpression expr)protected ObjectprocessCaseExpression(org.datanucleus.store.query.expression.CaseExpression expr, SQLExpression typeExpr)protected ObjectprocessCastExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessComExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessCreatorExpression(org.datanucleus.store.query.expression.CreatorExpression expr)protected ObjectprocessDistinctExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessDivExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessEqExpression(org.datanucleus.store.query.expression.Expression expr)protected voidprocessFromClauseSubquery(org.datanucleus.store.query.expression.ClassExpression clsExpr, SQLTable candSqlTbl, org.datanucleus.metadata.MetaDataManager mmgr)Method to process a ClassExpression where it represents a subquery.protected ObjectprocessGteqExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessGtExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessInExpression(org.datanucleus.store.query.expression.Expression expr)booleanprocessingOnClause()protected ObjectprocessInvokeExpression(org.datanucleus.store.query.expression.InvokeExpression expr)protected SQLExpressionprocessInvokeExpression(org.datanucleus.store.query.expression.InvokeExpression expr, SQLExpression invokedSqlExpr)Internal method to handle the processing of an InvokeExpression.protected ObjectprocessIsExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessIsnotExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessLikeExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessLiteral(org.datanucleus.store.query.expression.Literal expr)protected ObjectprocessLteqExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessLtExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessModExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessMulExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessNegExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessNoteqExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessNotExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessNotInExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessOrExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessParameterExpression(org.datanucleus.store.query.expression.ParameterExpression expr)protected ObjectprocessParameterExpression(org.datanucleus.store.query.expression.ParameterExpression expr, boolean asLiteral)Method to process a parameter expression.protected ObjectprocessPrimaryExpression(org.datanucleus.store.query.expression.PrimaryExpression expr)protected ObjectprocessSubExpression(org.datanucleus.store.query.expression.Expression expr)protected ObjectprocessSubqueryExpression(org.datanucleus.store.query.expression.SubqueryExpression expr)protected SQLExpressionprocessUnboundExpression(UnboundExpression expr)protected ObjectprocessVariableExpression(org.datanucleus.store.query.expression.VariableExpression expr)ClassresolveClass(String className)Convenience method to resolve a class name.protected voidselectFetchPlanForCandidate(SelectStatement stmt, StatementClassMapping resultClassMapping, int maxFetchDepth)protected voidsetNotPrecompilable()protected voidsetSQLTableMappingForAlias(String alias, org.datanucleus.store.rdbms.query.QueryToSQLMapper.SQLTableMapping mapping)voiduseParameterExpressionAsLiteral(SQLLiteral paramLiteral)Method to instruct the generator to convert the provided parameter expression to just be a literal using the value of the parameter (hence the statement cannot be precompilable since the value needs to be known).protected voidvalidateExpressionForResult(SQLExpression sqlExpr)Method that validates that the specified expression is valid for use in a result clause.
-
-
-
Field Detail
-
OPTION_CASE_INSENSITIVE
public static final String OPTION_CASE_INSENSITIVE
- See Also:
- Constant Field Values
-
OPTION_EXPLICIT_JOINS
public static final String OPTION_EXPLICIT_JOINS
- See Also:
- Constant Field Values
-
OPTION_NON_DISTINCT_IMPLICIT_JOINS
public static final String OPTION_NON_DISTINCT_IMPLICIT_JOINS
- See Also:
- Constant Field Values
-
OPTION_BULK_UPDATE_VERSION
public static final String OPTION_BULK_UPDATE_VERSION
- See Also:
- Constant Field Values
-
OPTION_SELECT_CANDIDATE_ID_ONLY
public static final String OPTION_SELECT_CANDIDATE_ID_ONLY
- See Also:
- Constant Field Values
-
OPTION_NULL_PARAM_USE_IS_NULL
public static final String OPTION_NULL_PARAM_USE_IS_NULL
- See Also:
- Constant Field Values
-
MAP_KEY_ALIAS_SUFFIX
public static final String MAP_KEY_ALIAS_SUFFIX
- See Also:
- Constant Field Values
-
MAP_VALUE_ALIAS_SUFFIX
public static final String MAP_VALUE_ALIAS_SUFFIX
- See Also:
- Constant Field Values
-
parentMapper
public QueryToSQLMapper parentMapper
Parent mapper if we are processing a subquery.
-
processingCase
protected boolean processingCase
-
-
Constructor Detail
-
QueryToSQLMapper
public QueryToSQLMapper(SQLStatement stmt, org.datanucleus.store.query.compiler.QueryCompilation compilation, Map parameters, StatementClassMapping resultDefForClass, StatementResultMapping resultDef, org.datanucleus.metadata.AbstractClassMetaData cmd, boolean subclasses, org.datanucleus.FetchPlan fetchPlan, org.datanucleus.ExecutionContext ec, org.datanucleus.util.Imports importsDefinition, Set<String> options, Map<String,Object> extensions)
Constructor.- Parameters:
stmt- SQL Statement to update with the query contents.compilation- The generic query compilationparameters- Parameters neededresultDefForClass- Definition of results for the statement (populated here)resultDef- Definition of results if we have a result clause (populated here)cmd- Metadata for the candidate classsubclasses- Whether to include subclassesfetchPlan- Fetch Plan to applyec- execution contextimportsDefinition- Import definition to use in class lookups (optional)options- Options controlling behaviourextensions- Any query extensions that may define compilation behaviour
-
-
Method Detail
-
getQueryLanguage
public String getQueryLanguage()
Accessor for the query language that this query pertains to. Can be used to decide how to handle the input.- Specified by:
getQueryLanguagein interfaceQueryGenerator- Returns:
- The query language
-
getClassLoaderResolver
public org.datanucleus.ClassLoaderResolver getClassLoaderResolver()
Description copied from interface:QueryGeneratorAccessor for the ClassLoader resolver to use when looking up classes.- Specified by:
getClassLoaderResolverin interfaceQueryGenerator- Returns:
- The classloader resolver
-
getCompilationComponent
public org.datanucleus.store.query.compiler.CompilationComponent getCompilationComponent()
Description copied from interface:QueryGeneratorAccessor for the current query component being compiled.- Specified by:
getCompilationComponentin interfaceQueryGenerator- Returns:
- Component being compiled (if any)
-
getExecutionContext
public org.datanucleus.ExecutionContext getExecutionContext()
Description copied from interface:QueryGeneratorAccessor for the ExecutionContext for this query.- Specified by:
getExecutionContextin interfaceQueryGenerator- Returns:
- ExecutionContext
-
getProperty
public Object getProperty(String name)
Description copied from interface:QueryGeneratorAccessor for a property affecting the query compilation. This can be something like whether there is an OR in the filter, which can then impact on the type of SQL used.- Specified by:
getPropertyin interfaceQueryGenerator- Parameters:
name- The property name- Returns:
- Its value
-
isPrecompilable
public boolean isPrecompilable()
Accessor for whether the query is precompilable (doesn't need to know parameter values to be able to compile it).- Returns:
- Whether the query is precompilable and hence cacheable
-
setNotPrecompilable
protected void setNotPrecompilable()
-
getParameterNameByPosition
public Map<Integer,String> getParameterNameByPosition()
Convenience accessor for a map of the parameter name keyed by its position. This is only available aftercompile
is called.- Returns:
- Map of parameter name keyed by position
-
compile
public void compile()
Method to update the supplied SQLStatement with the components of the specified query. During the compilation process this updates the SQLStatement "compileComponent" to the component of the query being compiled.
-
compileFrom
protected void compileFrom()
Method to compile the FROM clause of the query into the SQLStatement.
-
compileFilter
protected void compileFilter()
Method to compile the WHERE clause of the query into the SQLStatement.
-
compileResult
protected void compileResult(SelectStatement stmt)
Method to compile the result clause of the query into the SQLStatement. Note that this also compiles queries of the candidate (no specified result), selecting the candidate field(s).- Parameters:
stmt- SELECT statement
-
selectFetchPlanForCandidate
protected void selectFetchPlanForCandidate(SelectStatement stmt, StatementClassMapping resultClassMapping, int maxFetchDepth)
-
getStatementMappingForNewObjectExpression
protected StatementNewObjectMapping getStatementMappingForNewObjectExpression(NewObjectExpression expr, SelectStatement stmt)
Convenience method to convert a NewObjectExpression into a StatementNewObjectMapping. Handles recursive new object calls (where a new object is an argument to a new object construction).- Parameters:
expr- The NewObjectExpressionstmt- SelectStatement- Returns:
- The mapping for the new object
-
compileUpdate
protected void compileUpdate(UpdateStatement stmt)
Method to compile the result clause of the query into the SQLStatement.- Parameters:
stmt- UPDATE statement
-
validateExpressionForResult
protected void validateExpressionForResult(SQLExpression sqlExpr)
Method that validates that the specified expression is valid for use in a result clause. Throws a NucleusUserException if it finds a multi-value mapping selected (collection, map).- Parameters:
sqlExpr- The SQLExpression
-
compileGrouping
protected void compileGrouping(SelectStatement stmt)
Method to compile the grouping clause of the query into the SQLStatement.- Parameters:
stmt- SELECT statement
-
compileHaving
protected void compileHaving(SelectStatement stmt)
Method to compile the having clause of the query into the SQLStatement.- Parameters:
stmt- SELECT statement
-
compileOrdering
protected void compileOrdering(SelectStatement stmt)
Method to compile the ordering clause of the query into the SQLStatement.- Parameters:
stmt- SELECT statement
-
compileFromClassExpression
protected void compileFromClassExpression(org.datanucleus.store.query.expression.ClassExpression clsExpr)
Method to take a ClassExpression (in a FROM clause) and process the candidate and any linked JoinExpression(s), adding joins to the SQLStatement as required.- Parameters:
clsExpr- The ClassExpression
-
processingOnClause
public boolean processingOnClause()
- Specified by:
processingOnClausein interfaceQueryGenerator
-
processFromClauseSubquery
protected void processFromClauseSubquery(org.datanucleus.store.query.expression.ClassExpression clsExpr, SQLTable candSqlTbl, org.datanucleus.metadata.MetaDataManager mmgr)Method to process a ClassExpression where it represents a subquery. User defined the candidate of the subquery as an implied join to the outer query, for example "SELECT c FROM Customer c WHERE EXISTS (SELECT o FROM c.orders o ...)" so this method will add the join(s) to the outer query.- Parameters:
clsExpr- The ClassExpressioncandSqlTbl- Candidate SQL Tablemmgr- MetaData Manager
-
processAndExpression
protected Object processAndExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processAndExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processOrExpression
protected Object processOrExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processOrExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processBitAndExpression
protected Object processBitAndExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processBitAndExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processBitOrExpression
protected Object processBitOrExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processBitOrExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processBitXorExpression
protected Object processBitXorExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processBitXorExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processEqExpression
protected Object processEqExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processEqExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processNoteqExpression
protected Object processNoteqExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processNoteqExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processGteqExpression
protected Object processGteqExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processGteqExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processGtExpression
protected Object processGtExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processGtExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processLteqExpression
protected Object processLteqExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processLteqExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processLtExpression
protected Object processLtExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processLtExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processLiteral
protected Object processLiteral(org.datanucleus.store.query.expression.Literal expr)
- Overrides:
processLiteralin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
getSQLLiteralForLiteralValue
protected SQLExpression getSQLLiteralForLiteralValue(Object litValue)
-
processPrimaryExpression
protected Object processPrimaryExpression(org.datanucleus.store.query.expression.PrimaryExpression expr)
- Overrides:
processPrimaryExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processParameterExpression
protected Object processParameterExpression(org.datanucleus.store.query.expression.ParameterExpression expr)
- Overrides:
processParameterExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processParameterExpression
protected Object processParameterExpression(org.datanucleus.store.query.expression.ParameterExpression expr, boolean asLiteral)
Method to process a parameter expression. The optional argument controls whether we should create this as a parameter or as a literal (i.e the param value is known etc). If the parameter doesn't have its value defined then returns ParameterLiteral otherwise we get an XXXLiteral of the (declared) type of the parameter- Parameters:
expr- The ParameterExpressionasLiteral- Whether to create a SQLLiteral rather than a parameter literal- Returns:
- The processed expression
-
getInvokedSqlExpressionForInvokeExpression
protected SQLExpression getInvokedSqlExpressionForInvokeExpression(org.datanucleus.store.query.expression.InvokeExpression expr)
-
processInvokeExpression
protected Object processInvokeExpression(org.datanucleus.store.query.expression.InvokeExpression expr)
- Overrides:
processInvokeExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processInvokeExpression
protected SQLExpression processInvokeExpression(org.datanucleus.store.query.expression.InvokeExpression expr, SQLExpression invokedSqlExpr)
Internal method to handle the processing of an InvokeExpression.- Parameters:
expr- The InvokeExpressioninvokedSqlExpr- The SQLExpression that we are invoking the method on.- Returns:
- The resultant SQLExpression
-
processSubqueryExpression
protected Object processSubqueryExpression(org.datanucleus.store.query.expression.SubqueryExpression expr)
- Overrides:
processSubqueryExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processAddExpression
protected Object processAddExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processAddExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processDivExpression
protected Object processDivExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processDivExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processMulExpression
protected Object processMulExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processMulExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processSubExpression
protected Object processSubExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processSubExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processDistinctExpression
protected Object processDistinctExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processDistinctExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processComExpression
protected Object processComExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processComExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processModExpression
protected Object processModExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processModExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processNegExpression
protected Object processNegExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processNegExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processNotExpression
protected Object processNotExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processNotExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processCastExpression
protected Object processCastExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processCastExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processCaseExpression
protected Object processCaseExpression(org.datanucleus.store.query.expression.CaseExpression expr)
- Overrides:
processCaseExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processCaseExpression
protected Object processCaseExpression(org.datanucleus.store.query.expression.CaseExpression expr, SQLExpression typeExpr)
-
processIsExpression
protected Object processIsExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processIsExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processIsnotExpression
protected Object processIsnotExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processIsnotExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processInExpression
protected Object processInExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processInExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processNotInExpression
protected Object processNotInExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processNotInExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processCreatorExpression
protected Object processCreatorExpression(org.datanucleus.store.query.expression.CreatorExpression expr)
- Overrides:
processCreatorExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processLikeExpression
protected Object processLikeExpression(org.datanucleus.store.query.expression.Expression expr)
- Overrides:
processLikeExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processVariableExpression
protected Object processVariableExpression(org.datanucleus.store.query.expression.VariableExpression expr)
- Overrides:
processVariableExpressionin classorg.datanucleus.store.query.expression.AbstractExpressionEvaluator
-
processUnboundExpression
protected SQLExpression processUnboundExpression(UnboundExpression expr)
-
useParameterExpressionAsLiteral
public void useParameterExpressionAsLiteral(SQLLiteral paramLiteral)
Description copied from interface:QueryGeneratorMethod to instruct the generator to convert the provided parameter expression to just be a literal using the value of the parameter (hence the statement cannot be precompilable since the value needs to be known).- Specified by:
useParameterExpressionAsLiteralin interfaceQueryGenerator- Parameters:
paramLiteral- The parameter expression
-
hasExtension
public boolean hasExtension(String key)
Description copied from interface:QueryGeneratorAccessor for whether the query being generated has the specified extension.- Specified by:
hasExtensionin interfaceQueryGenerator- Parameters:
key- Extension name- Returns:
- Whether it is present
-
getValueForExtension
public Object getValueForExtension(String key)
Description copied from interface:QueryGeneratorAccessor for the value of the specified query extension (or null if not defined).- Specified by:
getValueForExtensionin interfaceQueryGenerator- Parameters:
key- Extension name- Returns:
- The value for the extension
-
getRequiredJoinTypeForAlias
public SQLJoin.JoinType getRequiredJoinTypeForAlias(String alias)
Convenience method to return the required join type for the specified alias. If the table has a join type defined as an extension "datanucleus.query.jdoql.{alias}.join" then this returns the type. Otherwise returns null.- Parameters:
alias- The alias- Returns:
- The join type required (if any)
-
getValueForObjectField
protected Object getValueForObjectField(Object obj, String fieldName)
Convenience method to return the value of a field of the supplied object. If the object is null then returns null for the field.- Parameters:
obj- The objectfieldName- The field name- Returns:
- The field value
-
getSQLTableMappingForAlias
protected org.datanucleus.store.rdbms.query.QueryToSQLMapper.SQLTableMapping getSQLTableMappingForAlias(String alias)
-
getAliasForSQLTableMapping
public String getAliasForSQLTableMapping(org.datanucleus.store.rdbms.query.QueryToSQLMapper.SQLTableMapping tblMapping)
-
getAliasForSQLTable
public String getAliasForSQLTable(SQLTable tbl)
Returns the alias used for the specified SQLTable. If we have a variable "var1" and there is an access to a field also, then we may have entries for "var1" and "var1.field". In this case we return the shortest.- Parameters:
tbl- The table- Returns:
- The query name alias for this table
-
setSQLTableMappingForAlias
protected void setSQLTableMappingForAlias(String alias, org.datanucleus.store.rdbms.query.QueryToSQLMapper.SQLTableMapping mapping)
-
hasSQLTableMappingForAlias
protected boolean hasSQLTableMappingForAlias(String alias)
-
bindVariable
public void bindVariable(String varName, org.datanucleus.metadata.AbstractClassMetaData cmd, SQLTable sqlTbl, JavaTypeMapping mapping)
Method to bind the specified variable to the table and mapping.- Specified by:
bindVariablein interfaceQueryGenerator- Parameters:
varName- Variable namecmd- Metadata for this variable typesqlTbl- Table for this variablemapping- The mapping of this variable in the table
-
bindVariable
public SQLExpression bindVariable(UnboundExpression expr, Class type)
Method to bind the specified unbound variable (as cross join) on the assumption that the type is a persistable class.- Specified by:
bindVariablein interfaceQueryGenerator- Parameters:
expr- Unbound expressiontype- The type to bind as- Returns:
- The bound expression to use instead
-
bindParameter
public void bindParameter(String paramName, Class type)
Method to bind the specified parameter to the defined type. If the parameter is already bound (declared in the query perhaps, or bound via an earlier usage) then does nothing.- Specified by:
bindParameterin interfaceQueryGenerator- Parameters:
paramName- Name of the parametertype- The type (or subclass)
-
getTypeOfVariable
public Class getTypeOfVariable(String varName)
Accessor for the type of a variable if already known (declared?).- Specified by:
getTypeOfVariablein interfaceQueryGenerator- Parameters:
varName- Name of the variable- Returns:
- The type if it is known
-
hasExplicitJoins
public boolean hasExplicitJoins()
Accessor for whether the query has explicit variables. If not then has implicit variables, meaning that they could potentially be rebound later if prematurely bound in a particular way.- Specified by:
hasExplicitJoinsin interfaceQueryGenerator- Returns:
- Whether the query has explicit variables
-
getBooleanExpressionForUseInFilter
protected BooleanExpression getBooleanExpressionForUseInFilter(BooleanExpression expr)
Convenience method to return a boolean expression suitable for using in a filter. Will return the input expression unless it is simply a reference to a field of a class such as in a filter clause likemyBoolField
. In that case we return a boolean likemyBoolField == TRUE
.- Parameters:
expr- The expression to check- Returns:
- The expression valid for use in the filter
-
resolveClass
public Class resolveClass(String className)
Convenience method to resolve a class name.- Specified by:
resolveClassin interfaceQueryGenerator- Parameters:
className- The class name- Returns:
- The class it relates to (if found)
-
-