Class ConstructorExpression

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

public final class ConstructorExpression extends AbstractExpression
In the SELECT clause a constructor may be used in the SELECT list to return one or more Java instances. The specified class is not required to be an entity or to be mapped to the database. The constructor name must be fully qualified.
BNF: constructor_expression ::= NEW constructor_name(constructor_item {, constructor_item}*)

Version:
2.5
Author:
Pascal Filion
  • Constructor Details

    • ConstructorExpression

      public ConstructorExpression(AbstractExpression parent)
      Creates a new ConstructorExpression.
      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
    • buildCollectionExpression

      public CollectionExpression buildCollectionExpression()
      Creates a new CollectionExpression that will wrap the single constructor item.
      Returns:
      The single constructor item represented by a temporary collection
    • 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 NEW identifier found in the string representation of the JPQL query, which has the actual case that was used.
      Returns:
      The NEW identifier that was actually parsed
    • getClassName

      public String getClassName()
      Returns the fully qualified class name that will be used to retrieve the constructor.
      Returns:
      The fully qualified class name or an empty string if it is not defined
    • getConstructorItems

      public Expression getConstructorItems()
      Returns the constructor items aggregated into a single expression and separated by commas or a single expression.
      Returns:
      The constructor item or items or an invalid or "null" expression
    • 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
    • hasConstructorItems

      public boolean hasConstructorItems()
      Determines whether the constructor items were parsed.
      Returns:
      true if the query had at least one constructor item; false otherwise
    • hasLeftParenthesis

      public boolean hasLeftParenthesis()
      Determines whether the open parenthesis was parsed or not.
      Returns:
      true if the open parenthesis was present in the string version of the query; false otherwise
    • hasRightParenthesis

      public boolean hasRightParenthesis()
      Determines whether the close parenthesis was parsed or not.
      Returns:
      true if the close parenthesis was present in the string version of the query; false otherwise
    • hasSpaceAfterNew

      public boolean hasSpaceAfterNew()
      Determines whether a whitespace was parsed after NEW.
      Returns:
      true if there was a whitespace after NEW; false otherwise
    • isParsingComplete

      protected boolean isParsingComplete(WordParser wordParser, String word, Expression expression)
      Description copied from class: AbstractExpression
      Determines whether the parsing is complete based on what is left in the given text. The text is never empty.
      Overrides:
      isParsingComplete in class AbstractExpression
      Parameters:
      wordParser - The text to parse based on the current position of the cursor
      word - The word that was retrieved from the given text, which is the first word in the text
      expression - The Expression that has already been parsed
      Returns:
      true if the text no longer can't be parsed by the current expression; false if more can be parsed
    • 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
    • shouldSkipLiteral

      protected boolean shouldSkipLiteral(AbstractExpression expression)
      Description copied from class: AbstractExpression
      When parsing an invalid or incomplete query, it is possible two literals would be parsed but in some cases, a CollectionExpression should not be created and the parsing should actually stop here. Example: BETWEEN 10 20, when parsing 20, it should not be parsed as part of the lower bound expression.
      Overrides:
      shouldSkipLiteral in class AbstractExpression
      Parameters:
      expression - The Expression that has just been parsed or null
      Returns:
      true
    • 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