java.lang.Object
org.eclipse.persistence.jpa.jpql.parser.AbstractExpression
org.eclipse.persistence.jpa.jpql.parser.CompoundExpression
All Implemented Interfaces:
Expression
Direct Known Subclasses:
ArithmeticExpression, ComparisonExpression, LogicalExpression

public abstract class CompoundExpression extends AbstractExpression
A compound expression has a left and right expressions combined by an identifier.
BNF: expression ::= left_expression identifier right_expression
Since:
2.3
Version:
2.5
  • Constructor Details

    • CompoundExpression

      protected CompoundExpression(AbstractExpression parent, String identifier)
      Creates a new CompoundExpression.
      Parameters:
      parent - The parent of this expression
      identifier - The identifier of this expression
  • Method Details

    • acceptChildren

      public void acceptChildren(ExpressionVisitor visitor)
      Description copied from interface: Expression
      Visits the children of this 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.

      Parameters:
      visitor - The visitor to visit the children of this object.
    • addChildrenTo

      protected final void addChildrenTo(Collection<Expression> children)
      Description copied from class: AbstractExpression
      Adds the children of this AbstractExpression to the given collection.
      Overrides:
      addChildrenTo in class AbstractExpression
      Parameters:
      children - The collection used to store the children
    • addOrderedChildrenTo

      protected final void addOrderedChildrenTo(List<Expression> children)
      Description copied from class: AbstractExpression
      Adds the children of this AbstractExpression to the given list.
      Overrides:
      addOrderedChildrenTo in class AbstractExpression
      Parameters:
      children - The list used to store the string representation of this AbstractExpression
    • findQueryBNF

      public JPQLQueryBNF findQueryBNF(Expression expression)
      Description copied from interface: Expression
      Retrieves the JPQLQueryBNF that represents the fragment of this Expression that was used when parsing the given Expression.
      Specified by:
      findQueryBNF in interface Expression
      Overrides:
      findQueryBNF in class AbstractExpression
      Parameters:
      expression - The Expression that is a descendant of this one
      Returns:
      The JPQLQueryBNF that was used to parse the given expression
    • getActualIdentifier

      public final 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 String getIdentifier()
      Returns the JPQL identifier of this expression.
      Returns:
      The JPQL identifier
    • getLeftExpression

      public final Expression getLeftExpression()
      Returns the Expression that represents the first expression, which is before the identifier.
      Returns:
      The expression that was parsed representing the first expression
    • getLeftExpressionQueryBNFId

      public abstract String getLeftExpressionQueryBNFId()
      Returns the unique identifier of the JPQLQueryBNF for the left expression.
      Returns:
      The ID of the BNF used when parsing the expression before the identifier
    • getRightExpression

      public final Expression getRightExpression()
      Returns the Expression that represents the second expression, which is after the identifier.
      Returns:
      The expression that was parsed representing the second expression
    • getRightExpressionQueryBNFId

      public abstract String getRightExpressionQueryBNFId()
      Returns the unique identifier of the JPQLQueryBNF for the right expression.
      Returns:
      The ID of the BNF used when parsing the expression after the identifier
    • hasLeftExpression

      public final boolean hasLeftExpression()
      Determines whether the first expression of the query was parsed.
      Returns:
      true if the first expression was parsed; false if it was not parsed
    • hasRightExpression

      public final boolean hasRightExpression()
      Determines whether the second expression of the query was parsed.
      Returns:
      true if the second expression was parsed; false if it was not parsed
    • hasSpaceAfterIdentifier

      public final boolean hasSpaceAfterIdentifier()
      Determines whether a whitespace was parsed after the identifier.
      Returns:
      true if there was a whitespace after the identifier; false otherwise
    • parse

      protected final void parse(WordParser wordParser, boolean tolerant)
      Description copied from class: AbstractExpression
      Parses the query by starting at the current position, which is part of the given WordParser.
      Specified by:
      parse in class AbstractExpression
      Parameters:
      wordParser - The text to parse based on the current position of the cursor
      tolerant - Determines whether the parsing system should be tolerant, meaning if it should try to parse invalid or incomplete queries
    • parseIdentifier

      protected abstract String parseIdentifier(WordParser wordParser)
      Parses the identifier of this expression.
      Parameters:
      wordParser - The WordParser containing the text to parse, which starts with the identifier
      Returns:
      The identifier for this expression
    • setLeftExpression

      protected final void setLeftExpression(AbstractExpression leftExpression)
      Sets the given Expression to be the first expression of this compound one.
      Parameters:
      leftExpression - The expression that was parsed before the identifier
    • setRightExpression

      protected final void setRightExpression(AbstractExpression rightExpression)
      Sets the given Expression to be the second expression of this compound one.
      Parameters:
      rightExpression - The expression that was parsed after the identifier
    • toParsedText

      protected final void toParsedText(StringBuilder writer, boolean actual)
      Description copied from class: AbstractExpression
      Generates a string representation of this Expression, including its children, if it has any.
      Specified by:
      toParsedText in class AbstractExpression
      Parameters:
      writer - The buffer used to append this Expression's string representation
      actual - 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