java.lang.Object
org.eclipse.persistence.jpa.jpql.parser.AbstractExpression
org.eclipse.persistence.jpa.jpql.parser.AsOfClause
All Implemented Interfaces:
Expression

public final class AsOfClause extends AbstractExpression

An AS OF clause is part of a flashback query, which provides ways to view past states of database objects, or to return database objects to a previous state, without using traditional point-in-time recovery.

Specify AS OF to retrieve the single version of the rows returned by the query at a particular change number (SCN) or timestamp. If you specify SCN, then the expression must evaluate to a number. If you specify TIMESTAMP, then the expression must evaluate to a timestamp value. Oracle Database returns rows as they existed at the specified system change number or time.

BNF: asof_clause ::= AS OF { SCN | TIMESTAMP } scalar_expression
Since:
2.5
Version:
2.5
  • Constructor Details

    • AsOfClause

      public AsOfClause(AbstractExpression parent)
      Creates a new AsOfClause.
      Parameters:
      parent - The parent of this expression
  • Method Details

    • accept

      public void accept(ExpressionVisitor visitor)
      Description copied from interface: Expression
      Visits this Expression by the given visitor.
      Parameters:
      visitor - The ExpressionVisitor to visit this object
    • 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 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 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 String getActualIdentifier()
      Returns the actual AS OF identifier found in the string representation of the JPQL query, which has the actual case that was used.
      Returns:
      The AS OF identifier that was actually parsed
    • getActualScnIdentifier

      public String getActualScnIdentifier()
      Returns the actual SCN identifier found in the string representation of the JPQL query, which has the actual case that was used.
      Returns:
      The SCN identifier that was actually parsed, or an empty string if it was not parsed
    • getActualTimestampIdentifier

      public String getActualTimestampIdentifier()
      Returns the actual TIMESTAMP identifier found in the string representation of the JPQL query, which has the actual case that was used.
      Returns:
      The TIMESTAMP identifier that was actually parsed, or an empty string if it was not parsed
    • getExpression

      public Expression getExpression()
      Returns the Expression representing the timestamp or change number.
      Returns:
      The Expression that was parsed representing the timestamp or change number
    • getQueryBNF

      public JPQLQueryBNF getQueryBNF()
      Description copied from interface: Expression
      Returns the BNF of this Expression.
      Returns:
      The JPQLQueryBNF, which represents the grammar of this Expression
    • hasExpression

      public boolean hasExpression()
      Determines whether the Expression representing the timestamp or change number was parsed or not.
      Returns:
      true if the timestamp or change number was parsed; false otherwise
    • hasScn

      public boolean hasScn()
      Determines whether the identifier SCN was part of the query.
      Returns:
      true if the identifier SCN was parsed; false otherwise
    • hasSpaceAfterCategory

      public boolean hasSpaceAfterCategory()
      Determines whether a whitespace was found after either SCN or TIMESTAMP.
      Returns:
      true if there was a whitespace after SCN or TIMESTAMP; false otherwise
    • hasSpaceAfterIdentifier

      public boolean hasSpaceAfterIdentifier()
      Determines whether a whitespace was found after AS OF.
      Returns:
      true if there was a whitespace after AS OF; false otherwise
    • hasTimestamp

      public boolean hasTimestamp()
      Determines whether the identifier TIMESTAMP was part of the query.
      Returns:
      true if the identifier TIMESTAMP was parsed; false otherwise
    • parse

      protected 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
    • toParsedText

      protected 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