|
Oracle Fusion Middleware Java API Reference for Oracle TopLink 11g Release 1 (11.1.1) E28847-01 |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object
org.eclipse.persistence.jpa.internal.jpql.JPQLQueryContext
public class JPQLQueryContext
This context is used to store information related to the JPQL query.
Nested Class Summary | |
---|---|
private class |
JPQLQueryContext.InputParameterVisitor This visitor is responsible to find the InputParameters with a certain parameter name. |
private static class |
JPQLQueryContext.QueryExpressionVisitor This visitor is responsible to retrieve the Expression that is the beginning of a query. |
Field Summary | |
---|---|
private java.util.Map<Expression,JPQLQueryContext> |
contexts This map caches the contexts in order to keep them in memory and for fast access to the information of any query (top-level query and subqueries). |
protected JPQLQueryContext |
currentContext The current JPQLQueryContext is the context used for the current query or subquery. |
private Expression |
currentQuery The parsed JPQL Expression currently visited. |
private DeclarationResolver |
declarationResolver The resolver of the current query's declaration. |
private JPQLQueryContext.InputParameterVisitor |
inputParameterVisitor This visitor is responsible to find the InputParameter with a specific named parameter or positional parameter. |
private JPQLExpression |
jpqlExpression The parsed tree representation of the JPQL query. |
private LiteralVisitor |
literalVisitor This visitor is used to retrieve a variable name from various type of JPQL Expression . |
private ParameterTypeVisitor |
parameterTypeVisitor This visitor is responsible to calculate the closest type of any input parameter. |
protected JPQLQueryContext |
parent When this context is a sub-context used for a subquery, then this is the context for the parent query. |
private IQuery |
query The external form of the JPQL query being manipulated. |
private JPQLQueryContext.QueryExpressionVisitor |
queryExpressionVisitor This visitor is responsible to retrieve the Expression that is the beginning of a query. |
private ResolverBuilder |
resolverBuilder This visitor creates a Resolver that gives information about the visited Expression . |
private boolean |
traversed Internal flag used to determine if the declaration portion of the query was visited. |
Constructor Summary | |
---|---|
|
JPQLQueryContext() Creates a new JPQLQueryContext . |
protected |
JPQLQueryContext(JPQLQueryContext parent, Expression currentQuery) Creates a new sub- JPQLQueryContext . |
Method Summary | |
---|---|
private DeclarationResolver |
buildDeclarationResolver() |
protected void |
convertUnqualifiedDeclaration(DeclarationResolver.Declaration declaration) Converts the given DeclarationResolver.Declaration from being set as a range variable declaration to a path expression declaration. |
void |
dispose() Disposes the internal data. |
void |
disposeSubqueryContext() Disposes this context, which is the current context being used for a subquery. |
protected java.util.Collection<InputParameter> |
findInputParameters(java.lang.String parameterName) Retrieves all the InputParameters with the given parameter name. |
DeclarationResolver |
getActualDeclarationResolver() Returns the DeclarationResolver of this context and not from the current query's declaration. |
protected JPQLQueryContext |
getCurrentContext() Returns the current JPQLQueryContext , i.e. the context of the query being manipulated, which can either be the top-level query or a subquery. |
Expression |
getCurrentQuery() Returns the current Expression being manipulated, which is either the top-level query or a subquery. |
protected DeclarationResolver |
getDeclarationResolver() Returns the DeclarationResolver of the current query's declaration. |
protected DeclarationResolver |
getDeclarationResolver(Expression expression) Returns the DeclarationResolver of the current query's declaration. |
private DeclarationResolver |
getDeclarationResolverImp() |
java.util.List<DeclarationResolver.Declaration> |
getDeclarations() Returns the ordered list of Declarations . |
IType |
getEnumType(java.lang.String enumTypeName) Returns the IType representing the possible given enum type. |
java.util.Collection<JoinFetch> |
getJoinFetches(java.lang.String variableName) Returns the parsed representation of a JOIN FETCH that were defined in the same declaration than the given range identification variable name. |
JPQLExpression |
getJPQLExpression() Returns the parsed tree representation of the JPQL query. |
java.lang.String |
getJPQLQuery() Returns the string representation of the JPQL query. |
IMapping |
getMapping(Expression expression) Returns the IMapping for the field represented by the given Expession . |
IType |
getParameterType(InputParameter inputParameter) Retrieves, if it can be determined, the type of the given InputParameter . |
JPQLQueryContext |
getParent() Returns the parent context if the current context is not the root context. |
IManagedTypeProvider |
getProvider() Retrieves the provider of managed types. |
IQuery |
getQuery() Returns the external form of the JPQL query. |
Resolver |
getResolver(Expression expression) Creates or retrieved the cached Resolver for the given Expression . |
Resolver |
getResolver(java.lang.String variableName) Retrieves the Resolver mapped with the given identification variable. |
java.util.Set<java.lang.String> |
getResultVariables() Returns the variables that got defined in the select expression. |
IType |
getType(java.lang.Class<?> type) Retrieves the external type for the given Java type. |
IType |
getType(Expression expression) Returns the IType of the given Expression . |
IType |
getType(java.lang.String typeName) Retrieves the external class for the given fully qualified class name. |
ITypeDeclaration |
getTypeDeclaration(Expression expression) Returns the ITypeDeclaration of the field handled by this Resolver . |
TypeHelper |
getTypeHelper() Returns a helper that gives access to the most common types . |
ITypeRepository |
getTypeRepository() Returns the type repository for the application. |
boolean |
hasJoins() Determines whether the JPQL expression has JOIN expressions. |
protected void |
initialize() Initializes this JPQLQueryContext . |
private void |
initializeRoot() |
private JPQLQueryContext.InputParameterVisitor |
inputParameterVisitor() |
boolean |
isCollectionVariableName(java.lang.String variableName) Determines whether the given identification variable is defining a join or a collection member declaration expressions. |
boolean |
isRangeIdentificationVariable(java.lang.String variableName) Determines whether the given variable name is an identification variable name used to define an abstract schema name. |
java.lang.String |
literal(Expression expression, LiteralType type) Retrieves the "literal" from the given Expression . |
private LiteralVisitor |
literalVisitor() |
void |
newSubqueryContext(Expression currentQuery) Changes the state of this context to use the given subquery. |
private ParameterTypeVisitor |
parameterTypeVisitor() |
private Expression |
queryExpression(Expression expression) |
private JPQLQueryContext.QueryExpressionVisitor |
queryExpressionVisitor() |
private ResolverBuilder |
resolverBuilder() |
void |
setJPQLExpression(JPQLExpression jpqlExpression) Sets the parsed tree representation of the JPQL query. |
void |
setQuery(IQuery query) Sets the external form of the JPQL query, which will be parsed and information will be extracted for later access. |
protected void |
store(JPQLQueryContext parent, Expression currentQuery) Stores the information contained in the given parent into this one. |
java.lang.String |
toString() |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
private java.util.Map<Expression,JPQLQueryContext> contexts
contexts
in order to keep them in memory and for fast access to the information of any query (top-level query and subqueries).protected JPQLQueryContext currentContext
JPQLQueryContext
is the context used for the current query or subquery. If the current context is not the global context, then its parent is non null
.private Expression currentQuery
JPQL Expression
currently visited.private DeclarationResolver declarationResolver
private JPQLQueryContext.InputParameterVisitor inputParameterVisitor
InputParameter
with a specific named parameter or positional parameter.private JPQLExpression jpqlExpression
private LiteralVisitor literalVisitor
JPQL Expression
.private ParameterTypeVisitor parameterTypeVisitor
protected JPQLQueryContext parent
private IQuery query
private JPQLQueryContext.QueryExpressionVisitor queryExpressionVisitor
Expression
that is the beginning of a query. For a subquery, it will retrieve SimpleSelectStatement
and for a top-level query, it will retrieve JPQLExpression
. The search goes through the parent hierarchy.private ResolverBuilder resolverBuilder
Resolver
that gives information about the visited Expression
. The actual Resolver
will calculate the proper IType
as well.private boolean traversed
Constructor Detail |
---|
public JPQLQueryContext()
JPQLQueryContext
.protected JPQLQueryContext(JPQLQueryContext parent, Expression currentQuery)
JPQLQueryContext
.
parent
- The parent contextcurrentQuery
- The parsed tree representation of the subqueryquery
- The ReportQuery
that will be populated by visiting the parsed tree representation of the subqueryMethod Detail |
---|
private DeclarationResolver buildDeclarationResolver()
protected void convertUnqualifiedDeclaration(DeclarationResolver.Declaration declaration)
DeclarationResolver.Declaration
from being set as a range variable declaration to a path expression declaration.
In this query "UPDATE Employee SET firstName = 'MODIFIED' WHERE (SELECT COUNT(m) FROM managedEmployees m) > 0
" managedEmployees is an unqualified collection-valued path expression (employee.managedEmployees
).
declaration
- The DeclarationResolver.Declaration
that was parsed to range over an abstract schema name but is actually ranging over a path expressionpublic void dispose()
public void disposeSubqueryContext()
protected java.util.Collection<InputParameter> findInputParameters(java.lang.String parameterName)
InputParameters
with the given parameter name.parameterName
- The parameter used to find the InputParameters
with the same valueInputParameters
that has the given parameter or an empty collectionpublic DeclarationResolver getActualDeclarationResolver()
DeclarationResolver
of this context and not from the current query's declaration.DeclarationResolver
for this contextprotected JPQLQueryContext getCurrentContext()
JPQLQueryContext
, i.e. the context of the query being manipulated, which can either be the top-level query or a subquery.public Expression getCurrentQuery()
Expression
being manipulated, which is either the top-level query or a subquery.protected DeclarationResolver getDeclarationResolver()
DeclarationResolver
of the current query's declaration. For a SELECT query, it contains the information defined in the FROM clause. For DELETE and UPDATE queries, it contains a single range declaration variable. If the current query is a subquery, then it contains the information defined in the FROM
clause.DeclarationResolver
for the current query being visitedprotected DeclarationResolver getDeclarationResolver(Expression expression)
DeclarationResolver
of the current query's declaration. For a SELECT query, it contains the information defined in the FROM clause. For DELETE and UPDATE queries, it contains a single range declaration variable. If the current query is a subquery, then it contains the information defined in the FROM
clause.DeclarationResolver
for the current query being visitedprivate DeclarationResolver getDeclarationResolverImp()
public java.util.List<DeclarationResolver.Declaration> getDeclarations()
Declarations
.Declarations
of the current query that was parsedpublic IType getEnumType(java.lang.String enumTypeName)
IType
representing the possible given enum type. If the type nameenumTypeName
- The fully qualified enum type with the constantpublic java.util.Collection<JoinFetch> getJoinFetches(java.lang.String variableName)
variableName
- The name of the identification variable that should be used to define an abstract schema namepublic JPQLExpression getJPQLExpression()
public java.lang.String getJPQLQuery()
public IMapping getMapping(Expression expression)
IMapping
for the field represented by the given Expession
.expression
- The Expression
representing a state field path expression or a collection-valued path expressionIMapping
or null
if none existspublic IType getParameterType(InputParameter inputParameter)
InputParameter
. The type will be guessed based on its location within expression.
Note: Both named and positional input parameter can be used.
inputParameter
- The InputParameter
to retrieve its typenull
if the type could not be determinedpublic JPQLQueryContext getParent()
null
if the current context is the rootpublic IManagedTypeProvider getProvider()
public IQuery getQuery()
public Resolver getResolver(Expression expression)
Resolver
for the given Expression
. The Resolver
can return the IType
and ITypeDeclaration
of the Expression
and either the IManagedType
or the IMapping
.expression
- The Expression
for which its Resolver
will be retrievedResolver
for the given Expression
public Resolver getResolver(java.lang.String variableName)
Resolver
mapped with the given identification variable. If the identification is not defined in the declaration traversed by this resolver, than the search will traverse the parent hierarchy.variableName
- The identification variable that maps a Resolver
Resolver
mapped with the given identification variablepublic java.util.Set<java.lang.String> getResultVariables()
public IType getType(java.lang.Class<?> type)
type
- The Java type to wrap with an external formpublic IType getType(Expression expression)
IType
of the given Expression
.expression
- The Expression
for which its type will be calculatedIType
that was resolved by this Resolver
or the IType
for IType.UNRESOLVABLE_TYPE
if it could not be resolvedpublic IType getType(java.lang.String typeName)
name
- The fully qualified class name of the class to retrievepublic ITypeDeclaration getTypeDeclaration(Expression expression)
ITypeDeclaration
of the field handled by this Resolver
.expression
- The Expression
for which its type declaration will be calculatedITypeDeclaration
that was resolved by this Resolver
or the ITypeDeclaration
for IType.UNRESOLVABLE_TYPE
if it could not be resolvedpublic TypeHelper getTypeHelper()
types
.IType
public ITypeRepository getTypeRepository()
ITypes
public boolean hasJoins()
true
if the query or subquery being traversed contains JOIN expressions; false
otherwiseprotected void initialize()
JPQLQueryContext
.private void initializeRoot()
private JPQLQueryContext.InputParameterVisitor inputParameterVisitor()
public boolean isCollectionVariableName(java.lang.String variableName)
variableName
- The identification variable to check for what it mapstrue
if the given identification variable maps a collection-valued field defined in a JOIN
or IN
expression; false
if it's not defined or it's mapping an abstract schema namepublic boolean isRangeIdentificationVariable(java.lang.String variableName)
variableName
- The name of the variable to verify if it's defined in a range variable declaration in the current query or any parent querytrue
if the variable name is mapping an abstract schema name; false
if it's defined in a collection member declarationpublic java.lang.String literal(Expression expression, LiteralType type)
Expression
. The literal to retrieve depends on the given type
. The literal is basically a string value like an identification variable name, an input parameter, a path expression, an abstract schema name, etc.expression
- The Expression
to visittype
- The LiteralType
helps to determine what to retrieve from the visited Expression
Expression
or an empty string if the given Expression
and the LiteralType
do not matchprivate LiteralVisitor literalVisitor()
public void newSubqueryContext(Expression currentQuery)
currentQuery
- The parsed tree representation of the subquery that will become the current query#disposeSubQueryContext()
private ParameterTypeVisitor parameterTypeVisitor()
private Expression queryExpression(Expression expression)
private JPQLQueryContext.QueryExpressionVisitor queryExpressionVisitor()
private ResolverBuilder resolverBuilder()
public void setJPQLExpression(JPQLExpression jpqlExpression)
setQuery(IQuery)
because the JPQL query is automatically parsed by that method.jpqlExpression
- The parsed representation of the JPQL query to manipulatesetQuery(IQuery)
public void setQuery(IQuery query)
query
- The external form of the JPQL querysetJPQLExpression(JPQLExpression)
protected void store(JPQLQueryContext parent, Expression currentQuery)
parent
- The parent context, which is the context of the parent querycurrentQuery
- The subquery becoming the current querypublic java.lang.String toString()
toString
in class java.lang.Object
|
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |