public class DeclarationResolver extends Resolver
Resolver is responsible to visit the current query (which is either the top-level
query or a subquery) and gathers the information from the declaration clause. For a SELECT
or DELETE clause, the information will be retrieved from the FROM clause. For an
UDPATE clause, it will be retrieved from the unique identification range variable
declaration.| Modifier and Type | Class and Description |
|---|---|
static class |
DeclarationResolver.Declaration
A
Declaration represents either an identification variable declaration or a
collection member declaration. |
protected class |
DeclarationResolver.DeclarationVisitor |
protected class |
DeclarationResolver.QualifyRangeDeclarationVisitor |
protected class |
DeclarationResolver.RootObjectExpressionVisitor
This visitor takes care to support a subquery defined as a "root" object.
|
| Constructor and Description |
|---|
DeclarationResolver(DeclarationResolver parent,
JPQLQueryContext queryContext)
Creates a new
DeclarationResolver. |
| Modifier and Type | Method and Description |
|---|---|
void |
accept(ResolverVisitor visitor)
|
protected void |
addDeclaration(DeclarationResolver.Declaration declaration)
Adds the given
DeclarationResolver.Declaration at the end of the list. |
void |
addRangeVariableDeclaration(java.lang.String entityName,
java.lang.String variableName)
Registers a range variable declaration that will be used when a JPQL fragment is parsed.
|
protected DeclarationResolver.DeclarationVisitor |
buildDeclarationVisitor() |
protected DeclarationResolver.RootObjectExpressionVisitor |
buildRootObjectExpressionVisitor() |
protected IType |
buildType()
|
protected ITypeDeclaration |
buildTypeDeclaration()
Resolves the
ITypeDeclaration of the property handled by this Resolver. |
protected void |
checkParent(Resolver parent) |
void |
convertUnqualifiedDeclaration(DeclarationResolver.Declaration declaration,
java.lang.String outerVariableName)
Converts the given
DeclarationResolver.Declaration from being set as a range variable declaration to
a path expression declaration. |
void |
dispose()
Disposes the internal data.
|
java.util.List<DeclarationResolver.Declaration> |
getDeclarations()
Returns the ordered list of
Declarations. |
protected DeclarationResolver.DeclarationVisitor |
getDeclarationVisitor() |
java.util.Collection<Join> |
getJoins(java.lang.String variableName)
Returns the parsed representation of a JOIN and JOIN FETCH that were defined in
the same declaration than the given range identification variable name.
|
protected java.util.Collection<Join> |
getJoinsImp(java.lang.String variableName) |
DeclarationResolver |
getParent()
Returns the parent of this
Resolver. |
protected IQuery |
getQuery()
Returns the external form representing the JPQL query.
|
protected JPQLQueryContext |
getQueryContext()
Returns the
JPQLQueryContext that is used by this visitor. |
Resolver |
getResolver(java.lang.String variableName)
Retrieves the
Resolver mapped with the given identification variable. |
protected Resolver |
getResolverImp(java.lang.String variableName) |
java.util.Set<java.lang.String> |
getResultVariables()
Returns the variables that got defined in the select expression.
|
java.util.Map<IdentificationVariable,java.lang.String> |
getResultVariablesMap()
Returns the map of result variables that got used to define a select expression.
|
protected DeclarationResolver.RootObjectExpressionVisitor |
getRootObjectExpressionVisitor() |
boolean |
hasJoins()
Determines whether the JPQL expression has JOIN expressions.
|
protected void |
initialize(JPQLQueryContext queryContext)
Initializes this
DeclarationResolver. |
boolean |
isCollectionIdentificationVariable(java.lang.String variableName)
Determines whether the given identification variable is defining a JOIN or
IN
expressions for a collection-valued field. |
protected boolean |
isCollectionIdentificationVariableImp(java.lang.String variableName) |
boolean |
isRangeIdentificationVariable(java.lang.String variableName)
Determines whether the given variable name is an identification variable name used to define
an abstract schema name.
|
protected boolean |
isRangeIdentificationVariableImp(java.lang.String variableName) |
boolean |
isResultVariable(java.lang.String variable)
Determines if the given variable is a result variable.
|
void |
populate(Expression expression)
Visits the current query (which is either the top-level query or a subquery) and gathers the
information from the declaration clause.
|
protected DeclarationResolver.QualifyRangeDeclarationVisitor |
qualifyRangeDeclarationVisitor() |
protected Resolver |
resolveRootObject(Expression expression)
Resolves the "root" object represented by the given
Expression. |
protected java.lang.String |
visitDeclaration(Expression expression,
Expression identificationVariable) |
addChild, getChild, getManagedType, getMapping, getParentManagedType, getParentMapping, getParentType, getParentTypeDeclaration, getProvider, getType, getType, getType, getTypeDeclaration, getTypeHelper, getTypeRepository, isNullAllowed, setNullAllowedpublic DeclarationResolver(DeclarationResolver parent, JPQLQueryContext queryContext)
DeclarationResolver.parent - The parent resolver if this is used for a subquery or null if it's used for the
top-level queryqueryContext - The context used to query information about the querypublic void accept(ResolverVisitor visitor)
protected final void addDeclaration(DeclarationResolver.Declaration declaration)
DeclarationResolver.Declaration at the end of the list.declaration - The DeclarationResolver.Declaration representing a single variable declarationpublic void addRangeVariableDeclaration(java.lang.String entityName,
java.lang.String variableName)
entityName - The name of the entity to be accessible with the given variable namevariableName - The identification variable used to navigate to the entityprotected DeclarationResolver.DeclarationVisitor buildDeclarationVisitor()
protected DeclarationResolver.RootObjectExpressionVisitor buildRootObjectExpressionVisitor()
protected IType buildType()
protected ITypeDeclaration buildTypeDeclaration()
ITypeDeclaration of the property handled by this Resolver.buildTypeDeclaration in class ResolverITypeDeclaration that was resolved by this Resolver or the
ITypeDeclaration for IType.UNRESOLVABLE_TYPE if it could not be resolvedprotected void checkParent(Resolver parent)
checkParent in class Resolverpublic void convertUnqualifiedDeclaration(DeclarationResolver.Declaration declaration, java.lang.String outerVariableName)
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 expressionouterVariableName - The identification variable coming from the parent identification
variable declarationpublic void dispose()
public java.util.List<DeclarationResolver.Declaration> getDeclarations()
Declarations.Declarations of the current query that was parsedprotected DeclarationResolver.DeclarationVisitor getDeclarationVisitor()
public java.util.Collection<Join> getJoins(java.lang.String variableName)
variableName - The name of the identification variable that should be used to define an
abstract schema nameprotected java.util.Collection<Join> getJoinsImp(java.lang.String variableName)
public DeclarationResolver getParent()
Resolver.protected IQuery getQuery()
protected JPQLQueryContext getQueryContext()
JPQLQueryContext that is used by this visitor.JPQLQueryContext holding onto the JPQL query and the cached informationpublic 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.protected Resolver getResolverImp(java.lang.String variableName)
public java.util.Set<java.lang.String> getResultVariables()
public java.util.Map<IdentificationVariable,java.lang.String> getResultVariablesMap()
protected DeclarationResolver.RootObjectExpressionVisitor getRootObjectExpressionVisitor()
public boolean hasJoins()
true if the query or subquery being traversed contains JOIN
expressions; false otherwiseprotected void initialize(JPQLQueryContext queryContext)
DeclarationResolver.queryContext - The context used to query information about the querypublic boolean isCollectionIdentificationVariable(java.lang.String variableName)
IN
expressions for a collection-valued field.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 nameprotected boolean isCollectionIdentificationVariableImp(java.lang.String variableName)
public 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 declarationprotected boolean isRangeIdentificationVariableImp(java.lang.String variableName)
public boolean isResultVariable(java.lang.String variable)
variable - The variable to check if it's a result variabletrue if the given variable is defined as a result variable; false
otherwisepublic void populate(Expression expression)
expression - The Expression to visit in order to retrieve the information
contained in the given query's declarationprotected DeclarationResolver.QualifyRangeDeclarationVisitor qualifyRangeDeclarationVisitor()
protected Resolver resolveRootObject(Expression expression)
Expression. This will also handle
using a subquery in the FROM clause. This is only support for EclipseLink.expression - protected java.lang.String visitDeclaration(Expression expression, Expression identificationVariable)