public abstract class AbstractExpression extends Object implements Expression
ExpressionFactory,
JPQLGrammar| Modifier and Type | Field and Description |
|---|---|
static char |
COMMA
The constant for ','.
|
static char |
DOT
The constant for '.'.
|
static char |
DOUBLE_QUOTE
The constant for '"'.
|
static char |
LEFT_CURLY_BRACKET
The constant for '{'.
|
static char |
LEFT_PARENTHESIS
The constant for '('.
|
static char |
NOT_DEFINED
The constant for a character that is not defined.
|
static char |
RIGHT_CURLY_BRACKET
The constant for '}'.
|
static char |
RIGHT_PARENTHESIS
The constant for ')'.
|
static char |
SINGLE_QUOTE
The constant for '''.
|
static char |
SPACE
The constant for ' '.
|
static char |
UNDERSCORE
The constant for '_'.
|
ABS, ALL, AND, ANY, AS, AS_OF, ASC, AVG, BETWEEN, BIT_LENGTH, BOTH, CASE, CAST, CHAR_LENGTH, CHARACTER_LENGTH, CLASS, COALESCE, COLUMN, CONCAT, CONNECT_BY, COUNT, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, DELETE, DELETE_FROM, DESC, DIFFERENT, DISTINCT, DIVISION, ELSE, EMPTY, END, ENTRY, EQUAL, ESCAPE, EXCEPT, EXISTS, EXTRACT, FALSE, FETCH, FIRST, FROM, FUNC, FUNCTION, GREATER_THAN, GREATER_THAN_OR_EQUAL, GROUP_BY, HAVING, IN, INDEX, INNER, INNER_JOIN, INNER_JOIN_FETCH, INTERSECT, IS, IS_EMPTY, IS_NOT_EMPTY, IS_NOT_NULL, IS_NULL, JOIN, JOIN_FETCH, KEY, LAST, LEADING, LEFT, LEFT_JOIN, LEFT_JOIN_FETCH, LEFT_OUTER_JOIN, LEFT_OUTER_JOIN_FETCH, LENGTH, LIKE, LOCATE, LOWER, LOWER_THAN, LOWER_THAN_OR_EQUAL, MAX, MEMBER, MEMBER_OF, MIN, MINUS, MOD, MULTIPLICATION, NAMED_PARAMETER, NEW, NOT, NOT_BETWEEN, NOT_EQUAL, NOT_EXISTS, NOT_IN, NOT_LIKE, NOT_MEMBER, NOT_MEMBER_OF, NULL, NULLIF, NULLS, NULLS_FIRST, NULLS_LAST, OBJECT, OF, ON, OPERATOR, OR, ORDER_BY, ORDER_SIBLINGS_BY, OUTER, PLUS, POSITION, POSITIONAL_PARAMETER, QUOTE, REGEXP, SCN, SELECT, SET, SIZE, SOME, SQL, SQRT, START_WITH, SUBSTRING, SUM, TABLE, THEN, TIMESTAMP, TRAILING, TREAT, TRIM, TRUE, TYPE, UNION, UNKNOWN, UPDATE, UPPER, VALUE, WHEN, WHERE| Modifier | Constructor and Description |
|---|---|
protected |
AbstractExpression(AbstractExpression parent)
Creates a new
AbstractExpression. |
protected |
AbstractExpression(AbstractExpression parent,
String text)
Creates a new
AbstractExpression. |
| Modifier and Type | Method and Description |
|---|---|
protected boolean |
acceptUnknownVisitor(ExpressionVisitor visitor)
The given
ExpressionVisitor needs to visit this class but it is defined by a third-
party provider. |
protected void |
acceptUnknownVisitor(ExpressionVisitor visitor,
Class<?> type,
Class<?> parameterType)
The given
ExpressionVisitor needs to visit this class but it is defined by a third-
party provider. |
protected void |
addChildrenTo(Collection<Expression> children)
Adds the children of this
AbstractExpression to the given collection. |
protected void |
addOrderedChildrenTo(List<Expression> children)
Adds the children of this
AbstractExpression to the given list. |
protected AbstractExpression |
buildExpressionFromFallingBack(WordParser wordParser,
String word,
JPQLQueryBNF queryBNF,
AbstractExpression expression,
boolean tolerant)
No factories were found to create an
Expression with the content of WordParser,
this method will retrieve the fallback ExpressionFactory defined in the given BNF. |
protected AbstractExpression |
buildNullExpression()
Creates a new
null-Expression parented with this one. |
protected Expression |
buildStringExpression(char value)
Creates a new
Expression wrapping the given character value. |
protected Expression |
buildStringExpression(String value)
Creates a new
Expression wrapping the given string value. |
protected AbstractExpression |
buildUnknownExpression(String text)
Creates an
Expression that contains a malformed expression. |
protected int |
calculatePosition(Expression expression,
int length)
Calculates the position of the given
Expression by calculating the length of what is before. |
ListIterable<Expression> |
children()
Returns the children of this
Expression. |
protected ExpressionFactory |
findFallBackExpressionFactory(JPQLQueryBNF queryBNF)
Retrieve the
ExpressionFactory from the given JPQLQueryBNF by following the
path of fallback JPQLQueryBNFs and then returns the ExpressionFactory
from the leaf JPQLQueryBNF. |
JPQLQueryBNF |
findQueryBNF(Expression expression)
Retrieves the
JPQLQueryBNF that represents the fragment of this Expression
that was used when parsing the given Expression. |
protected ExpressionFactory |
getExpressionFactory(String expressionFactoryId)
Retrieves the registered
ExpressionFactory that was registered for the given unique
identifier. |
protected ExpressionRegistry |
getExpressionRegistry()
Returns the registry containing the
JPQLQueryBNFs and the ExpressionFactories that are used
to properly parse a JPQL query. |
JPQLGrammar |
getGrammar()
Returns the
JPQLGrammar that defines how the JPQL query was parsed. |
JPAVersion |
getIdentifierVersion(String identifier)
Retrieves the JPA version in which the identifier was first introduced.
|
protected JPAVersion |
getJPAVersion()
Returns the version of the Java Persistence to support.
|
int |
getLength()
Returns the length of the string representation of this
Expression, which is the
length of the text generated by Expression.toActualText(). |
int |
getOffset()
Returns the position of this
Expression within its parent hierarchy. |
AbstractExpression |
getParent()
Returns the parent of this
Expression. |
JPQLQueryBNF |
getQueryBNF(String queryBNFID)
Retrieves the BNF object that was registered for the given unique identifier.
|
JPQLExpression |
getRoot()
Retrieves the root node of the parsed tree hierarchy.
|
protected String |
getText()
Returns the encapsulated text of this
AbstractExpression, which can be used in various
ways, it can be a keyword, a literal, etc. |
protected boolean |
handleAggregate(JPQLQueryBNF queryBNF)
Determines whether the given
JPQLQueryBNF handles aggregate expressions. |
protected boolean |
handleCollection(JPQLQueryBNF queryBNF)
Determines whether the given
JPQLQueryBNF handles a collection of sub-expressions that
are separated by commas. |
boolean |
isAncestor(Expression expression)
Determines whether this
Expression is a parent of the given Expression. |
protected boolean |
isIdentifier(String word)
Determines if the given word is a JPQL identifier.
|
protected boolean |
isNull()
Determines whether this expression is a
null Expression or any other subclass. |
protected boolean |
isParsingComplete(WordParser wordParser,
String word,
Expression expression)
Determines whether the parsing is complete based on what is left in the given text.
|
protected boolean |
isTolerant()
Determines if the parser is in tolerant mode or is in fast mode.
|
protected boolean |
isUnknown()
Determines whether this expression is an unknown
Expression or any other subclass. |
protected boolean |
isVirtual()
Determines whether this
AbstractExpression is virtual, meaning it's not part of the
query but is required for proper navigability. |
ListIterable<Expression> |
orderedChildren()
Returns the list representing this
Expression and its children. |
protected abstract void |
parse(WordParser wordParser,
boolean tolerant)
Parses the query by starting at the current position, which is part of the given
WordParser. |
protected AbstractExpression |
parse(WordParser wordParser,
String queryBNFId,
boolean tolerant)
Parses the given text by using the specified BNF.
|
protected AbstractExpression |
parseUsingExpressionFactory(WordParser wordParser,
String queryBNFId,
boolean tolerant)
Right away parses the text by retrieving the
ExpressionFactory for the first word that
is extracted from WordParser at the current location. |
void |
populatePosition(QueryPosition queryPosition,
int position)
Retrieves the
Expression located at the given position using the actual query,
which may have extra whitespace. |
protected void |
rebuildActualText()
Rebuilds the actual parsed text if it has been cached.
|
protected void |
rebuildParsedText()
Rebuilds the parsed parsed text if it has been cached.
|
protected void |
setParent(AbstractExpression parent)
Re-parents this
Expression to be a child of the given Expression. |
protected void |
setText(String text)
Sets the text of this
Expression. |
protected boolean |
shouldParseWithFactoryFirst()
Determines whether the parsing of the query should be performed using the
factories first or it should automatically fallback to the fallback factory. |
protected boolean |
shouldSkipLiteral(AbstractExpression expression)
When parsing an invalid or incomplete query, it is possible two literals would be parsed but
in some cases, a CollectionExpression should not be created and the parsing should actually
stop here.
|
String |
toActualText()
Generates a string representation of this
Expression, which needs to include any
characters that are considered virtual, i.e. |
String |
toParsedText()
Returns a string representation of this
Expression and its children. |
protected abstract void |
toParsedText(StringBuilder writer,
boolean actual)
Generates a string representation of this
Expression, including its children,
if it has any. |
String |
toString() |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitaccept, acceptChildren, getQueryBNFpublic static final char COMMA
public static final char DOT
public static final char DOUBLE_QUOTE
public static final char LEFT_CURLY_BRACKET
public static final char LEFT_PARENTHESIS
public static final char NOT_DEFINED
public static final char RIGHT_CURLY_BRACKET
public static final char RIGHT_PARENTHESIS
public static final char SINGLE_QUOTE
public static final char SPACE
public static final char UNDERSCORE
protected AbstractExpression(AbstractExpression parent)
AbstractExpression.parent - The parent of this expressionprotected AbstractExpression(AbstractExpression parent, String text)
AbstractExpression.parent - The parent of this expressiontext - The text to be stored in this expression, null cannot be passedprotected boolean acceptUnknownVisitor(ExpressionVisitor visitor)
ExpressionVisitor needs to visit this class but it is defined by a third-
party provider. This method will programmatically invoke the visit method defined on
the visitor. The method signature should be:
{public|protected|private} void visit(ThirdPartyExpression expression)or
{public|protected|private} void visit(Expression expression)Note: The package protected visibility (default) should be used with care, if the code is running inside OSGi, then the method will not be accessible, even through reflection.
visitor - The ExpressionVisitor to visit this Expression programmaticallytrue if the call was successfully executed; false otherwiseprotected void acceptUnknownVisitor(ExpressionVisitor visitor, Class<?> type, Class<?> parameterType) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
ExpressionVisitor needs to visit this class but it is defined by a third-
party provider. This method will programmatically invoke the visit method defined on
the visitor. The method signature should be:
{public|protected|private} void visit(ThirdPartyExpression expression)or
{public|protected|private} void visit(Expression expression)visitor - The ExpressionVisitor to visit this Expression programmaticallytype - The type found in the hierarchy of the given ExpressionVisitor that will
be used to retrieve the visit methodparameterType - The parameter type of the visit methodNoSuchMethodExceptionIllegalAccessExceptionInvocationTargetExceptionacceptUnknownVisitor(ExpressionVisitor)protected void addChildrenTo(Collection<Expression> children)
AbstractExpression to the given collection.children - The collection used to store the childrenprotected void addOrderedChildrenTo(List<Expression> children)
AbstractExpression to the given list.children - The list used to store the string representation of this AbstractExpressionprotected final AbstractExpression buildExpressionFromFallingBack(WordParser wordParser, String word, JPQLQueryBNF queryBNF, AbstractExpression expression, boolean tolerant)
Expression with the content of WordParser,
this method will retrieve the fallback ExpressionFactory defined in the given BNF.wordParser - The text to parse based on the current position of the cursorword - The word that was retrieved from the given text, which is the first word in the textqueryBNF - The JPQLQueryBNF used to determine how to parse from the current
position of the cursor within the JPQL queryexpression - The Expression that has just been parsed or nulltolerant - Determines whether the parsing system should be tolerant, meaning if it should
try to parse invalid or incomplete queriesExpression representing the given sub-queryprotected final AbstractExpression buildNullExpression()
null-Expression parented with this one.null version of an Expressionprotected final Expression buildStringExpression(char value)
Expression wrapping the given character value.value - The character to wrap as a ExpressionExpression representation of the given identifier where the owning
Expression is this oneprotected final Expression buildStringExpression(String value)
Expression wrapping the given string value.value - The string to wrap as a ExpressionExpression representation of the given identifier where the owning
Expression is this oneprotected final AbstractExpression buildUnknownExpression(String text)
Expression that contains a malformed expression.text - The text causing the expression to be malformedExpression where toActualText() returns the given textprotected final int calculatePosition(Expression expression, int length)
Expression by calculating the length of what is before.expression - The Expression for which its position within the parsed tree needs
to be determinedlength - The current cursor position within the JPQL query while digging into the tree
until the search reaches the expressionExpressionpublic final ListIterable<Expression> children()
Expression.children in interface ExpressionExpression or an empty ListIterableprotected final ExpressionFactory findFallBackExpressionFactory(JPQLQueryBNF queryBNF)
ExpressionFactory from the given JPQLQueryBNF by following the
path of fallback JPQLQueryBNFs and then returns the ExpressionFactory
from the leaf JPQLQueryBNF.queryBNF - The JPQLQueryBNF for which its associated fallback ExpressionFactory
will be searchedExpressionFactory linked to the given JPQLQueryBNF
or null if none was declaredpublic JPQLQueryBNF findQueryBNF(Expression expression)
JPQLQueryBNF that represents the fragment of this Expression
that was used when parsing the given Expression.findQueryBNF in interface Expressionexpression - The Expression that is a descendant of this oneJPQLQueryBNF that was used to parse the given expressionprotected final ExpressionFactory getExpressionFactory(String expressionFactoryId)
ExpressionFactory that was registered for the given unique
identifier.expressionFactoryId - The unique identifier of the ExpressionFactory to retrieveExpressionFactory mapped with the given unique identifierExpressionRegistry.getExpressionFactory(String)protected final ExpressionRegistry getExpressionRegistry()
JPQLQueryBNFs and the ExpressionFactories that are used
to properly parse a JPQL query.public JPQLGrammar getGrammar()
JPQLGrammar that defines how the JPQL query was parsed.getGrammar in interface ExpressionJPQLGrammar that was used to parse this Expressionpublic JPAVersion getIdentifierVersion(String identifier)
protected JPAVersion getJPAVersion()
JPQLGrammarpublic final int getLength()
Expression, which is the
length of the text generated by Expression.toActualText().getLength in interface ExpressionExpressionpublic final int getOffset()
Expression within its parent hierarchy.getOffset in interface Expressionpublic final AbstractExpression getParent()
Expression.getParent in interface ExpressionExpression, which is never null except for the
root of the treepublic JPQLQueryBNF getQueryBNF(String queryBNFID)
queryBNFID - The unique identifier of the JPQLQueryBNF to retrieveJPQLQueryBNF representing a section of the grammarpublic final JPQLExpression getRoot()
getRoot in interface ExpressionExpression treeprotected String getText()
AbstractExpression, which can be used in various
ways, it can be a keyword, a literal, etc.AbstractExpression, the literal it
encapsulates or an empty stringprotected boolean handleAggregate(JPQLQueryBNF queryBNF)
JPQLQueryBNF handles aggregate expressions.queryBNF - The JPQLQueryBNF used to determine if the parsing should handle
aggregate expressionstrue if the given BNF handles aggregate expressions; false
otherwiseprotected boolean handleCollection(JPQLQueryBNF queryBNF)
JPQLQueryBNF handles a collection of sub-expressions that
are separated by commas.queryBNF - The JPQLQueryBNF used to determine if the parsing should handle
collection of sub-expressionstrue if the sub-expression to parse might have several sub-expressions
separated by commas; false otherwisepublic boolean isAncestor(Expression expression)
Expression is a parent of the given Expression.isAncestor in interface Expressionexpression - The Expression to verify its paternity with this Expressiontrue if this Expression is the same as the given Expression
or one of its parent; false otherwiseprotected final boolean isIdentifier(String word)
word - The word to test if it is a JPQL identifiertrue if the word is an identifier, false otherwiseExpressionRegistry.isIdentifier(String)protected boolean isNull()
null Expression or any other subclass.false by defaultprotected boolean isParsingComplete(WordParser wordParser, String word, Expression expression)
wordParser - The text to parse based on the current position of the cursorword - The word that was retrieved from the given text, which is the first word in the textexpression - The Expression that has already been parsedtrue if the text no longer can't be parsed by the current expression;
false if more can be parsedprotected boolean isTolerant()
true if the parsing system should parse invalid or incomplete queries;
false when the query is well-formed and validprotected boolean isUnknown()
Expression or any other subclass.false by defaultprotected boolean isVirtual()
AbstractExpression is virtual, meaning it's not part of the
query but is required for proper navigability.true if this AbstractExpression was virtually created to fully
qualify path expression; false if it was parsedpublic final ListIterable<Expression> orderedChildren()
Expression and its children.orderedChildren in interface ExpressionExpressions representing this Expressionprotected abstract void parse(WordParser wordParser, boolean tolerant)
WordParser.wordParser - The text to parse based on the current position of the cursortolerant - Determines whether the parsing system should be tolerant, meaning if it should
try to parse invalid or incomplete queriesprotected AbstractExpression parse(WordParser wordParser, String queryBNFId, boolean tolerant)
wordParser - The text to parse based on the current position of the cursorqueryBNFId - The unique identifier of the JPQLQueryBNF that is used to determine
how to parse the text at the current cursor position within the JPQL querytolerant - Determines whether the parsing system should be tolerant, meaning if it should
try to parse invalid or incomplete queriesExpression representing the given sub-queryprotected AbstractExpression parseUsingExpressionFactory(WordParser wordParser, String queryBNFId, boolean tolerant)
ExpressionFactory for the first word that
is extracted from WordParser at the current location.wordParser - The text to parse based on the current position of the cursorqueryBNFId - The unique identifier of the JPQLQueryBNF that is used to determine
how to parse the text at the current cursor position within the JPQL querytolerant - Determines whether the parsing system should be tolerant, meaning if it should
try to parse invalid or incomplete queriesExpression representing the given sub-querypublic void populatePosition(QueryPosition queryPosition, int position)
Expression located at the given position using the actual query,
which may have extra whitespace.populatePosition in interface Expressionposition - The array has one element and is the position of the Expression to retrieveprotected final void rebuildActualText()
protected final void rebuildParsedText()
protected final void setParent(AbstractExpression parent)
Expression to be a child of the given Expression.parent - The new parent of this objectprotected final void setText(String text)
Expression.text - The immutable text wrapped by this Expression, which cannot be nullprotected boolean shouldParseWithFactoryFirst()
factories first or it should automatically fallback to the fallback factory.true is returned by default so the factories are used before falling backprotected boolean shouldSkipLiteral(AbstractExpression expression)
expression - The Expression that has just been parsed or nulltruepublic String toActualText()
Expression, which needs to include any
characters that are considered virtual, i.e. that was parsed when the query is incomplete and
is needed for functionality like content assist.toActualText in interface ExpressionExpressionpublic String toParsedText()
Expression and its children. The expression
should contain whitespace even if the beautified version would not have any. For instance,
"SELECT e " should be returned where Expression.toParsedText() would return "SELECT e".toParsedText in interface ExpressionExpressionprotected abstract void toParsedText(StringBuilder writer, boolean actual)
Expression, including its children,
if it has any.writer - The buffer used to append this Expression's string representationactual - Determines whether the string representation should represent what was parsed,
i.e. include any "virtual" whitespace (such as ending whitespace) and the actual case of the
JPQL identifiersCopyright © 2007–2021 Eclipse.org - EclipseLink Project. All rights reserved.