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, UNDERSCORE
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
Constructor and Description |
---|
JPQLExpression(java.lang.CharSequence query,
JPQLGrammar jpqlGrammar)
Creates a new
JPQLExpression , which is the root of the JPQL parsed tree. |
JPQLExpression(java.lang.CharSequence query,
JPQLGrammar jpqlGrammar,
boolean tolerant)
Creates a new
JPQLExpression , which is the root of the JPQL parsed tree. |
JPQLExpression(java.lang.CharSequence jpqlFragment,
JPQLGrammar jpqlGrammar,
java.lang.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(java.util.Collection<Expression> children)
Adds the children of this
AbstractExpression to the given collection. |
protected void |
addOrderedChildrenTo(java.util.List<Expression> children)
Adds the children of this
AbstractExpression to the given list. |
QueryPosition |
buildPosition(java.lang.String actualQuery,
int position)
Creates a map of the position of the cursor within each
Expression of the parsed tree. |
Expression |
getExpression(java.lang.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(java.lang.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, toString
public JPQLExpression(java.lang.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(java.lang.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(java.lang.CharSequence jpqlFragment, JPQLGrammar jpqlGrammar, java.lang.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 JPQLQueryBNF
tolerant
- 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(java.util.Collection<Expression> children)
AbstractExpression
to the given collection.addChildrenTo
in class AbstractExpression
children
- The collection used to store the childrenprotected void addOrderedChildrenTo(java.util.List<Expression> children)
AbstractExpression
to the given list.addOrderedChildrenTo
in class AbstractExpression
children
- The list used to store the string representation of this AbstractExpression
public QueryPosition buildPosition(java.lang.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 queryQueryPosition
public Expression getExpression(java.lang.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 Expression
Expression
located at the given position in the given querypublic JPQLGrammar getGrammar()
JPQLGrammar
that defines how the JPQL query was parsed.getGrammar
in interface Expression
getGrammar
in class AbstractExpression
JPQLGrammar
that was used to parse this Expression
public JPAVersion getJPAVersion()
getJPAVersion
in class AbstractExpression
JPQLGrammar
public JPQLQueryBNF getQueryBNF()
Expression
.JPQLQueryBNF
, which represents the grammar of this Expression
public 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 AbstractExpression
true
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 AbstractExpression
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 void toParsedText(java.lang.StringBuilder writer, boolean actual)
Expression
, including its children,
if it has any.toParsedText
in class AbstractExpression
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 identifiers