Class AbstractTripleEncapsulatedExpression
- java.lang.Object
-
- org.eclipse.persistence.jpa.jpql.parser.AbstractExpression
-
- org.eclipse.persistence.jpa.jpql.parser.AbstractEncapsulatedExpression
-
- org.eclipse.persistence.jpa.jpql.parser.AbstractTripleEncapsulatedExpression
-
- All Implemented Interfaces:
Expression
- Direct Known Subclasses:
LocateExpression,SubstringExpression
public abstract class AbstractTripleEncapsulatedExpression extends AbstractEncapsulatedExpression
ThisExpressiontakes care of parsing an expression that encapsulates three expressions separated by a comma.BNF:expression ::= <identifier>(first_expression, second_expression, third_expression)- Version:
- 2.5.1
- See Also:
LocateExpression,SubstringExpression- Author:
- Pascal Filion
- Since:
- 2.3
-
-
Field Summary
Fields Modifier and Type Field Description protected intparameterIndexDetermines which child expression is been currently parsed.-
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 protectedAbstractTripleEncapsulatedExpression(AbstractExpression parent, java.lang.String identifier)Creates a newAbstractTripleEncapsulatedExpression.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidacceptChildren(ExpressionVisitor visitor)Visits the children of thisExpression.protected voidaddChildrenTo(java.util.Collection<Expression> children)Adds the children of thisAbstractExpressionto the given collection.protected voidaddOrderedEncapsulatedExpressionTo(java.util.List<Expression> children)Adds theExpressionsrepresenting the encapsulatedExpression.CollectionExpressionbuildCollectionExpression()Creates a newCollectionExpressionthat will wrap the first, second and third expressions.JPQLQueryBNFfindQueryBNF(Expression expression)Retrieves theJPQLQueryBNFthat represents the fragment of thisExpressionthat was used when parsing the givenExpression.ExpressiongetFirstExpression()Returns theExpressionthat represents the first expression.abstract java.lang.StringgetParameterQueryBNFId(int index)Returns the unique identifier of theJPQLQueryBNFto be used to parse one of the encapsulated expression at the given position.ExpressiongetSecondExpression()Returns theExpressionthat represents the second expression.ExpressiongetThirdExpression()Returns theExpressionthat represents the first expression.booleanhasEncapsulatedExpression()Determines whether something was parsed after the left parenthesis.booleanhasFirstComma()Determines whether the comma was parsed after the first expression.booleanhasFirstExpression()Determines whether the first expression of the query was parsed.booleanhasSecondComma()Determines whether the comma was parsed after the second expression.booleanhasSecondExpression()Determines whether the second expression of the query was parsed.booleanhasSpaceAfterFirstComma()Determines whether a whitespace was parsed after the first comma.booleanhasSpaceAfterSecondComma()Determines whether a whitespace was parsed after the second comma.booleanhasThirdExpression()Determines whether the third expression of the query was parsed.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 abstract booleanisThirdExpressionOptional()Determines whether the third expression is an optional expression, which means a valid query can have it or not.protected voidparseEncapsulatedExpression(WordParser wordParser, int whitespaceCount, boolean tolerant)Parses the encapsulated expression by starting at the current position, which is part of the givenWordParser.protected voidremoveEncapsulatedExpression()Removes the encapsulatedExpressionthat was parsed, it should not be part of this one.protected voidtoParsedTextEncapsulatedExpression(java.lang.StringBuilder writer, boolean actual)Generates a string representation of the encapsulatedExpression.-
Methods inherited from class org.eclipse.persistence.jpa.jpql.parser.AbstractEncapsulatedExpression
addOrderedChildrenTo, areLogicalIdentifiersSupported, getActualIdentifier, getIdentifier, hasLeftParenthesis, hasRightParenthesis, hasSpaceAfterIdentifier, parse, shouldParseRightParenthesis, toParsedText
-
Methods inherited from class org.eclipse.persistence.jpa.jpql.parser.AbstractExpression
acceptUnknownVisitor, acceptUnknownVisitor, buildExpressionFromFallingBack, buildNullExpression, buildStringExpression, buildStringExpression, buildUnknownExpression, calculatePosition, children, findFallBackExpressionFactory, 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, getQueryBNF
-
-
-
-
Constructor Detail
-
AbstractTripleEncapsulatedExpression
protected AbstractTripleEncapsulatedExpression(AbstractExpression parent, java.lang.String identifier)
Creates a newAbstractTripleEncapsulatedExpression.- Parameters:
parent- The parent of this expressionidentifier- The JPQL identifier that starts this expression
-
-
Method Detail
-
acceptChildren
public void acceptChildren(ExpressionVisitor visitor)
Visits the children of thisExpression. This method can be used to optimize traversing the children since a new list is not created every timeExpression.children()is called.This does not traverse the
Expressionsub-hierarchy, use a subclass ofAbstractTraverseChildrenVisitorin order to traverse the entire sub-hierarchy.- Parameters:
visitor- Thevisitorto visit the children of this object.
-
addChildrenTo
protected void addChildrenTo(java.util.Collection<Expression> children)
Adds the children of thisAbstractExpressionto the given collection.- Overrides:
addChildrenToin classAbstractExpression- Parameters:
children- The collection used to store the children
-
addOrderedEncapsulatedExpressionTo
protected void addOrderedEncapsulatedExpressionTo(java.util.List<Expression> children)
Adds theExpressionsrepresenting the encapsulatedExpression.- Specified by:
addOrderedEncapsulatedExpressionToin classAbstractEncapsulatedExpression- Parameters:
children- The list used to store the string representation of the encapsulatedExpression
-
buildCollectionExpression
public final CollectionExpression buildCollectionExpression()
Creates a newCollectionExpressionthat will wrap the first, second and third expressions.- Returns:
- The first, second and third expressions represented by a temporary collection
-
findQueryBNF
public JPQLQueryBNF findQueryBNF(Expression expression)
Retrieves theJPQLQueryBNFthat represents the fragment of thisExpressionthat was used when parsing the givenExpression.- Specified by:
findQueryBNFin interfaceExpression- Overrides:
findQueryBNFin classAbstractExpression- Parameters:
expression- TheExpressionthat is a descendant of this one- Returns:
- The
JPQLQueryBNFthat was used to parse the given expression
-
getFirstExpression
public final Expression getFirstExpression()
Returns theExpressionthat represents the first expression.- Returns:
- The expression that was parsed representing the first expression
-
getParameterQueryBNFId
public abstract java.lang.String getParameterQueryBNFId(int index)
Returns the unique identifier of theJPQLQueryBNFto be used to parse one of the encapsulated expression at the given position.- Parameters:
index- The position of the encapsulatedExpressionthat needs to be parsed within the parenthesis, which starts at position 0- Returns:
- The ID of the
JPQLQueryBNFto be used to parse one of the encapsulated expression
-
getSecondExpression
public final Expression getSecondExpression()
Returns theExpressionthat represents the second expression.- Returns:
- The expression that was parsed representing the second expression
-
getThirdExpression
public final Expression getThirdExpression()
Returns theExpressionthat represents the first expression.- Returns:
- The expression that was parsed representing the first expression
-
hasEncapsulatedExpression
public boolean hasEncapsulatedExpression()
Determines whether something was parsed after the left parenthesis.- Specified by:
hasEncapsulatedExpressionin classAbstractEncapsulatedExpression- Returns:
trueif something was parsed;falseotherwise
-
hasFirstComma
public final boolean hasFirstComma()
Determines whether the comma was parsed after the first expression.- Returns:
trueif a comma was parsed after the first expression;falseotherwise
-
hasFirstExpression
public final boolean hasFirstExpression()
Determines whether the first expression of the query was parsed.- Returns:
trueif the first expression was parsed;falseif it was not parsed
-
hasSecondComma
public final boolean hasSecondComma()
Determines whether the comma was parsed after the second expression.- Returns:
trueif a comma was parsed after the second expression;falseotherwise
-
hasSecondExpression
public final boolean hasSecondExpression()
Determines whether the second expression of the query was parsed.- Returns:
trueif the second expression was parsed;falseif it was not parsed
-
hasSpaceAfterFirstComma
public final boolean hasSpaceAfterFirstComma()
Determines whether a whitespace was parsed after the first comma.- Returns:
trueif there was a whitespace after the first comma;falseotherwise
-
hasSpaceAfterSecondComma
public final boolean hasSpaceAfterSecondComma()
Determines whether a whitespace was parsed after the second comma.- Returns:
trueif there was a whitespace after the second comma;falseotherwise
-
hasThirdExpression
public final boolean hasThirdExpression()
Determines whether the third expression of the query was parsed.- Returns:
trueif the third expression was parsed;falseif it was not parsed
-
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 classAbstractEncapsulatedExpression- 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
-
isThirdExpressionOptional
protected abstract boolean isThirdExpressionOptional()
Determines whether the third expression is an optional expression, which means a valid query can have it or not.- Returns:
trueif the third expression can either be present or not in a valid query;falseif it's mandatory
-
parseEncapsulatedExpression
protected void parseEncapsulatedExpression(WordParser wordParser, int whitespaceCount, boolean tolerant)
Parses the encapsulated expression by starting at the current position, which is part of the givenWordParser.- Specified by:
parseEncapsulatedExpressionin classAbstractEncapsulatedExpression- 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 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 ')'.- Specified by:
removeEncapsulatedExpressionin classAbstractEncapsulatedExpression
-
toParsedTextEncapsulatedExpression
protected final void toParsedTextEncapsulatedExpression(java.lang.StringBuilder writer, boolean actual)Generates a string representation of the encapsulatedExpression.- Specified by:
toParsedTextEncapsulatedExpressionin classAbstractEncapsulatedExpression- 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
-
-