public final class JPQLExpression extends AbstractExpression
JPQLExpression is the root of the parsed tree representation of a JPQL query. The
query is parsed based on what was registered in the JPQLGrammar's ExpressionRegistry.
A JPQL statement may be either a SELECT statement, an UPDATE statement, or a DELETE FROM statement.
QL_statement ::= select_statement |
update_statement |
delete_statement
It is possible to parse a portion of a JPQL query. The ID of the JPQLQueryBNF is used to
parse that portion and getQueryStatement() then returns only the parsed tree representation
of that JPQL fragment.
COMMA, DOT, DOUBLE_QUOTE, LEFT_CURLY_BRACKET, LEFT_PARENTHESIS, NOT_DEFINED, RIGHT_CURLY_BRACKET, RIGHT_PARENTHESIS, SINGLE_QUOTE, SPACE, UNDERSCOREABS, 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| Constructor and Description |
|---|
JPQLExpression(CharSequence query,
JPQLGrammar jpqlGrammar)
Creates a new
JPQLExpression, which is the root of the JPQL parsed tree. |
JPQLExpression(CharSequence query,
JPQLGrammar jpqlGrammar,
boolean tolerant)
Creates a new
JPQLExpression, which is the root of the JPQL parsed tree. |
JPQLExpression(CharSequence jpqlFragment,
JPQLGrammar jpqlGrammar,
String queryBNFId,
boolean tolerant)
Creates a new
JPQLExpression that will parse the given fragment of a JPQL query. |
| Modifier and Type | Method and Description |
|---|---|
void |
accept(ExpressionVisitor visitor)
Visits this
Expression by the given visitor. |
void |
acceptChildren(ExpressionVisitor visitor)
Visits the children of this
Expression. |
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. |
QueryPosition |
buildPosition(String actualQuery,
int position)
Creates a map of the position of the cursor within each
Expression of the parsed tree. |
Expression |
getExpression(String actualQuery,
int position)
Returns the deepest
Expression for the given position. |
JPQLGrammar |
getGrammar()
Returns the
JPQLGrammar that defines how the JPQL query was parsed. |
JPAVersion |
getJPAVersion()
Returns the version of the Java Persistence to support.
|
JPQLQueryBNF |
getQueryBNF()
Returns the BNF of this
Expression. |
Expression |
getQueryStatement()
Returns the
Expression representing the query, which is either a SELECT, a
DELETE or an UPDATE clause. |
Expression |
getUnknownEndingStatement()
Returns the
Expression that may contain a portion of the query that could not be
parsed, this happens when the query is either incomplete or malformed. |
boolean |
hasQueryStatement()
Determines whether a query was parsed.
|
boolean |
hasUnknownEndingStatement()
Determines whether the query that got parsed had some malformed or unknown information.
|
protected boolean |
isTolerant()
Determines if the parser is in tolerant mode or is in fast mode.
|
protected void |
parse(WordParser wordParser,
boolean tolerant)
Parses the query by starting at the current position, which is part of the given
WordParser. |
protected void |
toParsedText(StringBuilder writer,
boolean actual)
Generates a string representation of this
Expression, including its children,
if it has any. |
acceptUnknownVisitor, acceptUnknownVisitor, buildExpressionFromFallingBack, buildNullExpression, buildStringExpression, buildStringExpression, buildUnknownExpression, calculatePosition, children, findFallBackExpressionFactory, findQueryBNF, getExpressionFactory, getExpressionRegistry, getIdentifierVersion, getLength, getOffset, getParent, getQueryBNF, getRoot, getText, handleAggregate, handleCollection, isAncestor, isIdentifier, isNull, isParsingComplete, isUnknown, isVirtual, orderedChildren, parse, parseUsingExpressionFactory, populatePosition, rebuildActualText, rebuildParsedText, setParent, setText, shouldParseWithFactoryFirst, shouldSkipLiteral, toActualText, toParsedText, toStringpublic JPQLExpression(CharSequence query, JPQLGrammar jpqlGrammar)
JPQLExpression, which is the root of the JPQL parsed tree.query - The string representation of the JPQL query to parsejpqlGrammar - The JPQL grammar that defines how to parse a JPQL querypublic JPQLExpression(CharSequence query, JPQLGrammar jpqlGrammar, boolean tolerant)
JPQLExpression, which is the root of the JPQL parsed tree.query - The string representation of the JPQL query to parsejpqlGrammar - The JPQL grammar that defines how to parse a JPQL querytolerant - Determines if the parsing system should be tolerant, meaning if it should try
to parse invalid or incomplete queriespublic JPQLExpression(CharSequence jpqlFragment, JPQLGrammar jpqlGrammar, String queryBNFId, boolean tolerant)
JPQLExpression that will parse the given fragment of a JPQL query.
This means getQueryStatement() will not return a query statement (select, delete or
update) but only the parsed tree representation of the fragment if the query BNF can pare it.
If the fragment of the JPQL query could not be parsed using the given JPQLQueryBNF,
then getUnknownEndingStatement() will contain the non-parsable fragment.jpqlFragment - A fragment of a JPQL query, which is a portion of a complete JPQL queryjpqlGrammar - The JPQL grammar that defines how to parse a JPQL queryqueryBNFId - The unique identifier of the JPQLQueryBNFtolerant - Determines if the parsing system should be tolerant, meaning if it should try
to parse invalid or incomplete queriespublic void accept(ExpressionVisitor visitor)
Expression by the given visitor.visitor - The ExpressionVisitor to visit this objectpublic void acceptChildren(ExpressionVisitor visitor)
Expression. This method can be used to optimize traversing
the children since a new list is not created every time Expression.children() is called.
This does not traverse the Expression sub-hierarchy, use a subclass of
AbstractTraverseChildrenVisitor in order to traverse the entire sub-hierarchy.
visitor - The visitor to visit the children of this object.protected void addChildrenTo(Collection<Expression> children)
AbstractExpression to the given collection.addChildrenTo in class AbstractExpressionchildren - The collection used to store the childrenprotected void addOrderedChildrenTo(List<Expression> children)
AbstractExpression to the given list.addOrderedChildrenTo in class AbstractExpressionchildren - The list used to store the string representation of this AbstractExpressionpublic QueryPosition buildPosition(String actualQuery, int position)
Expression of the parsed tree.actualQuery - The actual query is a string representation of the query that may contain
extra whitespaceposition - The position of the cursor in the actual query, which is used to retrieve the
deepest Expression. The position will be adjusted to fit into the beautified version
of the queryQueryPositionpublic Expression getExpression(String actualQuery, int position)
Expression for the given position.actualQuery - The actual query is the text version of the query that may contain extra
whitespace and different formatting than the trim down version generated by the parsed treeposition - The position in the actual query used to retrieve the ExpressionExpression located at the given position in the given querypublic JPQLGrammar getGrammar()
JPQLGrammar that defines how the JPQL query was parsed.getGrammar in interface ExpressiongetGrammar in class AbstractExpressionJPQLGrammar that was used to parse this Expressionpublic JPAVersion getJPAVersion()
getJPAVersion in class AbstractExpressionJPQLGrammarpublic JPQLQueryBNF getQueryBNF()
Expression.JPQLQueryBNF, which represents the grammar of this Expressionpublic Expression getQueryStatement()
Expression representing the query, which is either a SELECT, a
DELETE or an UPDATE clause.public Expression getUnknownEndingStatement()
Expression that may contain a portion of the query that could not be
parsed, this happens when the query is either incomplete or malformed.public boolean hasQueryStatement()
true the query was parsed; false otherwisepublic boolean hasUnknownEndingStatement()
true if the query could not be parsed correctly
because it is either incomplete or malformedprotected boolean isTolerant()
isTolerant in class AbstractExpressiontrue if the parsing system should parse invalid or incomplete queries;
false when the query is well-formed and validprotected void parse(WordParser wordParser, boolean tolerant)
WordParser.parse in class AbstractExpressionwordParser - 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 void toParsedText(StringBuilder writer, boolean actual)
Expression, including its children,
if it has any.toParsedText in class AbstractExpressionwriter - 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.