Class AbstractEncapsulatedExpression
- java.lang.Object
-
- org.eclipse.persistence.jpa.jpql.parser.AbstractExpression
-
- org.eclipse.persistence.jpa.jpql.parser.AbstractEncapsulatedExpression
-
- All Implemented Interfaces:
Expression
- Direct Known Subclasses:
AbstractDoubleEncapsulatedExpression,AbstractSingleEncapsulatedExpression,AbstractTripleEncapsulatedExpression,TreatExpression
public abstract class AbstractEncapsulatedExpression extends AbstractExpression
This expression handles parsing the identifier followed by an expression encapsulated within parenthesis.BNF:expression ::= <identifier>(expression)- Version:
- 2.5
- Author:
- Pascal Filion
- Since:
- 2.3
-
-
Field Summary
-
Fields inherited from class org.eclipse.persistence.jpa.jpql.parser.AbstractExpression
COMMA, DOT, DOUBLE_QUOTE, LEFT_CURLY_BRACKET, LEFT_PARENTHESIS, NOT_DEFINED, RIGHT_CURLY_BRACKET, RIGHT_PARENTHESIS, SINGLE_QUOTE, SPACE, UNDERSCORE
-
Fields inherited from interface org.eclipse.persistence.jpa.jpql.parser.Expression
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 Summary
Constructors Modifier Constructor Description protectedAbstractEncapsulatedExpression(AbstractExpression parent, java.lang.String identifier)Creates a newAbstractEncapsulatedExpression.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected voidaddOrderedChildrenTo(java.util.List<Expression> children)Adds the children of thisAbstractExpressionto the given list.protected abstract voidaddOrderedEncapsulatedExpressionTo(java.util.List<Expression> children)Adds theExpressionsrepresenting the encapsulatedExpression.protected booleanareLogicalIdentifiersSupported()java.lang.StringgetActualIdentifier()Returns the actual identifier found in the string representation of the JPQL query, which has the actual case that was used.java.lang.StringgetIdentifier()Returns the JPQL identifier of this expression.abstract booleanhasEncapsulatedExpression()Determines whether something was parsed after the left parenthesis.booleanhasLeftParenthesis()Determines whether the open parenthesis was parsed or not.booleanhasRightParenthesis()Determines whether the close parenthesis was parsed or not.booleanhasSpaceAfterIdentifier()Determines whether a whitespace was parsed after the identifier rather than the left parenthesis.protected booleanisParsingComplete(WordParser wordParser, java.lang.String word, Expression expression)Determines whether the parsing is complete based on what is left in the given text.protected voidparse(WordParser wordParser, boolean tolerant)Parses the query by starting at the current position, which is part of the givenWordParser.protected abstract voidparseEncapsulatedExpression(WordParser wordParser, int whitespaceCount, boolean tolerant)Parses the encapsulated expression by starting at the current position, which is part of the givenWordParser.protected abstract voidremoveEncapsulatedExpression()Removes the encapsulatedExpressionthat was parsed, it should not be part of this one.protected booleanshouldParseRightParenthesis(WordParser wordParser, boolean tolerant)Determines whether the right parenthesis should be parsed or not by this expression.protected voidtoParsedText(java.lang.StringBuilder writer, boolean actual)Generates a string representation of thisExpression, including its children, if it has any.protected abstract voidtoParsedTextEncapsulatedExpression(java.lang.StringBuilder writer, boolean actual)Generates a string representation of the encapsulatedExpression.-
Methods inherited from class org.eclipse.persistence.jpa.jpql.parser.AbstractExpression
acceptUnknownVisitor, acceptUnknownVisitor, addChildrenTo, buildExpressionFromFallingBack, buildNullExpression, buildStringExpression, buildStringExpression, buildUnknownExpression, calculatePosition, children, findFallBackExpressionFactory, findQueryBNF, getExpressionFactory, getExpressionRegistry, getGrammar, getIdentifierVersion, getJPAVersion, getLength, getOffset, getParent, getQueryBNF, getRoot, getText, handleAggregate, handleCollection, isAncestor, isIdentifier, isNull, isTolerant, isUnknown, isVirtual, orderedChildren, parse, parseUsingExpressionFactory, populatePosition, rebuildActualText, rebuildParsedText, setParent, setText, shouldParseWithFactoryFirst, shouldSkipLiteral, toActualText, toParsedText, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.eclipse.persistence.jpa.jpql.parser.Expression
accept, acceptChildren, getQueryBNF
-
-
-
-
Constructor Detail
-
AbstractEncapsulatedExpression
protected AbstractEncapsulatedExpression(AbstractExpression parent, java.lang.String identifier)
Creates a newAbstractEncapsulatedExpression.- Parameters:
parent- The parent of this expressionidentifier- The JPQL identifier that starts this expression
-
-
Method Detail
-
addOrderedChildrenTo
protected final void addOrderedChildrenTo(java.util.List<Expression> children)
Adds the children of thisAbstractExpressionto the given list.- Overrides:
addOrderedChildrenToin classAbstractExpression- Parameters:
children- The list used to store the string representation of thisAbstractExpression
-
addOrderedEncapsulatedExpressionTo
protected abstract void addOrderedEncapsulatedExpressionTo(java.util.List<Expression> children)
Adds theExpressionsrepresenting the encapsulatedExpression.- Parameters:
children- The list used to store the string representation of the encapsulatedExpression
-
areLogicalIdentifiersSupported
protected boolean areLogicalIdentifiersSupported()
-
getActualIdentifier
public final java.lang.String getActualIdentifier()
Returns the actual identifier found in the string representation of the JPQL query, which has the actual case that was used.- Returns:
- The JPQL identifier that was actually parsed
-
getIdentifier
public final java.lang.String getIdentifier()
Returns the JPQL identifier of this expression.- Returns:
- The JPQL identifier
-
hasEncapsulatedExpression
public abstract boolean hasEncapsulatedExpression()
Determines whether something was parsed after the left parenthesis.- Returns:
trueif something was parsed;falseotherwise
-
hasLeftParenthesis
public final boolean hasLeftParenthesis()
Determines whether the open parenthesis was parsed or not.- Returns:
trueif the open parenthesis was present in the string version of the query;falseotherwise
-
hasRightParenthesis
public final boolean hasRightParenthesis()
Determines whether the close parenthesis was parsed or not.- Returns:
trueif the close parenthesis was present in the string version of the query;falseotherwise
-
hasSpaceAfterIdentifier
public boolean hasSpaceAfterIdentifier()
Determines whether a whitespace was parsed after the identifier rather than the left parenthesis. This can happen in incomplete query of this form: ABS 4 + 5).- Returns:
trueif a whitespace was parsed after the identifier;falseotherwise
-
isParsingComplete
protected boolean isParsingComplete(WordParser wordParser, java.lang.String word, Expression expression)
Determines whether the parsing is complete based on what is left in the given text. The text is never empty.- Overrides:
isParsingCompletein classAbstractExpression- Parameters:
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- TheExpressionthat has already been parsed- Returns:
trueif the text no longer can't be parsed by the current expression;falseif more can be parsed
-
parse
protected void parse(WordParser wordParser, boolean tolerant)
Parses the query by starting at the current position, which is part of the givenWordParser.- Specified by:
parsein classAbstractExpression- Parameters:
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 queries
-
parseEncapsulatedExpression
protected abstract void parseEncapsulatedExpression(WordParser wordParser, int whitespaceCount, boolean tolerant)
Parses the encapsulated expression by starting at the current position, which is part of the givenWordParser.- Parameters:
wordParser- The text to parse based on the current position of the cursorwhitespaceCount- The number of whitespace characters that were parsed after '('tolerant- Determines whether the parsing system should be tolerant, meaning if it should try to parse invalid or incomplete queries
-
removeEncapsulatedExpression
protected abstract void removeEncapsulatedExpression()
Removes the encapsulatedExpressionthat was parsed, it should not be part of this one. This happens when the parsed information does not have both '(' and ')'.
-
shouldParseRightParenthesis
protected boolean shouldParseRightParenthesis(WordParser wordParser, boolean tolerant)
Determines whether the right parenthesis should be parsed or not by this expression. There is a possible case where this expression should have optional left and right parenthesis. If there is no left parenthesis, then it would most likely mean the right parenthesis does not belong to this expression.- Parameters:
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 queries- Returns:
trueif the right parenthesis should be owned by this expression if it is the next character to scan;falseotherwise
-
toParsedText
protected final void toParsedText(java.lang.StringBuilder writer, boolean actual)Generates a string representation of thisExpression, including its children, if it has any.- Specified by:
toParsedTextin classAbstractExpression- Parameters:
writer- The buffer used to append thisExpression'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
-
toParsedTextEncapsulatedExpression
protected abstract void toParsedTextEncapsulatedExpression(java.lang.StringBuilder writer, boolean actual)Generates a string representation of the encapsulatedExpression.- Parameters:
writer- The buffer used to append the encapsulatedExpression's string representationactual- Determines whether 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
-
-