Package org.apache.openjpa.kernel.jpql
Class JPQLExpressionBuilder
java.lang.Object
org.apache.openjpa.kernel.exps.AbstractExpressionBuilder
org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder
- All Implemented Interfaces:
JPQLTreeConstants
Builder for JPQL expressions. This class takes the query parsed
in
JPQL
and converts it to an expression tree using
an ExpressionFactory
. Public for unit testing purposes.- Author:
- Marc Prud'hommeaux, Patrick Linskey
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected static class
Base node that will be generated by the JPQLExpressionBuilder; base class of theSimpleNode
that is used byJPQL
.static class
Public for unit testing purposes. -
Field Summary
Fields inherited from class org.apache.openjpa.kernel.exps.AbstractExpressionBuilder
CONTAINS_TYPE_ELEMENT, CONTAINS_TYPE_KEY, CONTAINS_TYPE_VALUE, EX_FATAL, EX_UNSUPPORTED, EX_USER, factory, resolver, TYPE_CHAR_OBJ, TYPE_COLLECTION, TYPE_MAP, TYPE_NUMBER, TYPE_OBJECT, TYPE_STRING
Fields inherited from interface org.apache.openjpa.kernel.jpql.JPQLTreeConstants
JJTABS, JJTABSTRACTSCHEMANAME, JJTADD, JJTAGGREGATE, JJTALL, JJTAND, JJTANY, JJTASCENDING, JJTAVERAGE, JJTBETWEEN, JJTBOOLEANLITERAL, JJTCASE, JJTCLASSNAME, JJTCOALESCE, JJTCOLLECTIONPARAMETER, JJTCONCAT, JJTCONSTRUCTOR, JJTCONSTRUCTORPARAM, JJTCONSTRUCTORPARAMS, JJTCOUNT, JJTCURRENTDATE, JJTCURRENTTIME, JJTCURRENTTIMESTAMP, JJTDATELITERAL, JJTDECIMALLITERAL, JJTDELETE, JJTDESCENDING, JJTDISTINCT, JJTDISTINCTPATH, JJTDIVIDE, JJTENTRY, JJTEQUALS, JJTESCAPECHARACTER, JJTEXISTS, JJTFROM, JJTFROMITEM, JJTGENERALCASE, JJTGENERALIDENTIFIER, JJTGREATEROREQUAL, JJTGREATERTHAN, JJTGROUPBY, JJTGROUPBYEXTENSION, JJTHAVING, JJTIDENTIFICATIONVARIABLE, JJTIDENTIFIER, JJTIN, JJTINDEX, JJTINNERFETCHJOIN, JJTINNERJOIN, JJTINTEGERLITERAL, JJTISEMPTY, JJTISNULL, JJTKEY, JJTLENGTH, JJTLESSOREQUAL, JJTLESSTHAN, JJTLIKE, JJTLOCATE, JJTLOWER, JJTMAX, JJTMEMBEROF, JJTMIN, JJTMOD, JJTMULTIPLY, JJTNAMEDINPUTPARAMETER, JJTNEGATIVE, jjtNodeName, JJTNOT, JJTNOTEQUALS, JJTNULLIF, JJTOR, JJTORDERBY, JJTORDERBYEXTENSION, JJTORDERBYITEM, JJTOUTERFETCHJOIN, JJTOUTERJOIN, JJTPATH, JJTPATTERNVALUE, JJTPOSITIONALINPUTPARAMETER, JJTQUALIFIEDIDENTIFIER, JJTQUALIFIEDPATH, JJTSCALAREXPRESSION, JJTSELECT, JJTSELECTCLAUSE, JJTSELECTEXPRESSION, JJTSELECTEXPRESSIONS, JJTSELECTEXTENSION, JJTSIMPLECASE, JJTSIZE, JJTSQRT, JJTSTRINGLITERAL, JJTSTRINGLITERAL2, JJTSUBSELECT, JJTSUBSTRING, JJTSUBTRACT, JJTSUM, JJTTIMELITERAL, JJTTIMESTAMPLITERAL, JJTTOK, JJTTRIM, JJTTRIMBOTH, JJTTRIMCHARACTER, JJTTRIMLEADING, JJTTRIMTRAILING, JJTTYPE, JJTTYPELITERAL, JJTUPDATE, JJTUPDATEITEM, JJTUPDATEVALUE, JJTUPPER, JJTVALUE, JJTVOID, JJTWHEN, JJTWHENSCALAR, JJTWHERE
-
Constructor Summary
ConstructorDescriptionJPQLExpressionBuilder
(ExpressionFactory factory, ExpressionStoreQuery query, Object parsedQuery) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
addSchemaToContext
(String id, ClassMetaData meta) Register the schema alias to the current JPQL query context.protected void
addVariableToContext
(String id, Value var) Register the variable associated with the schema alias (id) to the current JPQL query context.static void
checkEmbeddable
(Value val, String currentQuery) static Value
convertSubstringArguments
(ExpressionFactory factory, Value val1, Value val2, Value val3) Converts JPQL substring() function to OpenJPA ExpressionFactory substring() arguments.protected String
Returns the current string being parsed; used for error messages.protected Expression
protected void
protected ClassMetaData
protected ClassLoader
Returns the class loader that should be used for resolving class names (in addition to the resolver in the query).protected Class<?>
Returns the type of the named variable if it has been declared.protected Value
protected Localizer
Used for obtaining theLocalizer
to use for translating error messages.protected JPQLExpressionBuilder.ParsedJPQL
protected JPQLExpressionBuilder.ParsedJPQL
getParsedQuery
(String jpql) protected Value
getVariable
(String var) Returns the variable associated with the schema alias (id).protected Value
getVariable
(String id, boolean bind) Identification variables in JPQL are case insensitive, so lower-case all variables we are going to bind.protected boolean
isDeclaredVariable
(String name) Returns whether the specified variable name has been explicitly declared.protected boolean
isSeenVariable
(String var) Return whether the given id has been used as a variable.protected ClassMetaData
void
setImplicitTypes
(Value val1, Value val2, Class<?> expected) Set the implicit types of the given values based on the fact that they're used together, and based on the operator type.static void
setImplicitTypes
(Value val1, Value val2, Class<?> expected, Resolver resolver, OrderedMap<Object, Class<?>> parameterTypes, String currentQuery) Methods inherited from class org.apache.openjpa.kernel.exps.AbstractExpressionBuilder
addAccessPath, assertUnboundVariablesValid, bind, convertTypes, convertTypesQuotedNumbers, createVariable, getAccessPath, getMetaData, getMetaData, isBound, isNumeric, parseException, setImplicitContainsTypes, setImplicitType, setImplicitTypes, traversePath, traversePath, traverseStaticField, traverseXPath
-
Constructor Details
-
JPQLExpressionBuilder
public JPQLExpressionBuilder(ExpressionFactory factory, ExpressionStoreQuery query, Object parsedQuery) Constructor.- Parameters:
factory
- the expression factory to usequery
- used to resolve variables, parameters, and class names used in the queryparsedQuery
- the parsed query
-
-
Method Details
-
getLocalizer
Description copied from class:AbstractExpressionBuilder
Used for obtaining theLocalizer
to use for translating error messages.- Specified by:
getLocalizer
in classAbstractExpressionBuilder
-
getClassLoader
Description copied from class:AbstractExpressionBuilder
Returns the class loader that should be used for resolving class names (in addition to the resolver in the query).- Specified by:
getClassLoader
in classAbstractExpressionBuilder
-
getParsedQuery
-
getParsedQuery
-
resolveClassMetaData
-
getCandidateMetaData
-
currentQuery
Description copied from class:AbstractExpressionBuilder
Returns the current string being parsed; used for error messages.- Specified by:
currentQuery
in classAbstractExpressionBuilder
-
evalFetchJoins
-
evalSetClause
-
isDeclaredVariable
Description copied from class:AbstractExpressionBuilder
Returns whether the specified variable name has been explicitly declared. Note all query languages necessarily support declaring variables.- Specified by:
isDeclaredVariable
in classAbstractExpressionBuilder
- Parameters:
name
- the variable to check- Returns:
- true if the variabe has been explicitely declared
-
getVariable
Identification variables in JPQL are case insensitive, so lower-case all variables we are going to bind.- Overrides:
getVariable
in classAbstractExpressionBuilder
-
getDefinedVariable
-
isSeenVariable
Description copied from class:AbstractExpressionBuilder
Return whether the given id has been used as a variable.- Overrides:
isSeenVariable
in classAbstractExpressionBuilder
-
checkEmbeddable
-
convertSubstringArguments
public static Value convertSubstringArguments(ExpressionFactory factory, Value val1, Value val2, Value val3) Converts JPQL substring() function to OpenJPA ExpressionFactory substring() arguments.- Parameters:
val1
- the original Stringval2
- the 1-based start index as per JPQL substring() semanticsval3
- the length of the returned string as per JPQL semantics
-
setImplicitTypes
Description copied from class:AbstractExpressionBuilder
Set the implicit types of the given values based on the fact that they're used together, and based on the operator type.- Overrides:
setImplicitTypes
in classAbstractExpressionBuilder
-
setImplicitTypes
-
getDeclaredVariableType
Description copied from class:AbstractExpressionBuilder
Returns the type of the named variable if it has been declared.- Specified by:
getDeclaredVariableType
in classAbstractExpressionBuilder
-
addSchemaToContext
Description copied from class:AbstractExpressionBuilder
Register the schema alias to the current JPQL query context.- Specified by:
addSchemaToContext
in classAbstractExpressionBuilder
-
addVariableToContext
Description copied from class:AbstractExpressionBuilder
Register the variable associated with the schema alias (id) to the current JPQL query context.- Specified by:
addVariableToContext
in classAbstractExpressionBuilder
-
getVariable
Description copied from class:AbstractExpressionBuilder
Returns the variable associated with the schema alias (id).- Specified by:
getVariable
in classAbstractExpressionBuilder
-