Oracle Fusion Middleware Java API Reference for Oracle TopLink
11g Release 1 (11.1.1)

E28847-01


org.eclipse.persistence.jpa.internal.jpql.parser
Class JPQLExpression

java.lang.Object
  extended by org.eclipse.persistence.jpa.internal.jpql.parser.StringExpression
      extended by org.eclipse.persistence.jpa.internal.jpql.parser.AbstractExpression
          extended by org.eclipse.persistence.jpa.internal.jpql.parser.JPQLExpression

All Implemented Interfaces:
Expression

public final class JPQLExpression
extends AbstractExpression

A JPQL expression is the parsed tree representation of a Java Persistence query. The parser supports version 1.0 and 2.0 of the JPA specification.

A JPQL statement may be either a SELECT statement, an UPDATE statement, or a DELETE FROM statement.

BNF: QL_statement ::= select_statement | update_statement | delete_statement
Since:
2.3
Version:
2.3
Author:
Pascal Filion

Field Summary
private  AbstractExpression queryStatement
          The tree representation of the query.
private  boolean tolerant
          Determines if the parsing system should be tolerant, meaning if it should try to parse invalid or incomplete queries.
private  AbstractExpression unknownEndingStatement
          If the expression could not be fully parsed, meaning some unknown text is trailing the query, this will contain it.
private  IJPAVersion version
          The version of the JPQL to support, which is the version of the Java Persistence specification.
 
Fields inherited from class org.eclipse.persistence.jpa.internal.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.internal.jpql.parser.Expression
ABS, ALL, AND, ANY, AS, ASC, AVG, BETWEEN, BIT_LENGTH, BOTH, CASE, CHAR_LENGTH, CHARACTER_LENGTH, CLASS, COALESCE, CONCAT, COUNT, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, DELETE, DELETE_FROM, DESC, DIFFERENT, DISTINCT, DIVISION, ELSE, EMPTY, END, ENTRY, EQUAL, ESCAPE, EXISTS, FALSE, FETCH, FROM, FUNC, GREATER_THAN, GREATER_THAN_OR_EQUAL, GROUP_BY, HAVING, IN, INDEX, INNER, INNER_JOIN, INNER_JOIN_FETCH, IS, IS_EMPTY, IS_NOT_EMPTY, IS_NOT_NULL, IS_NULL, JOIN, JOIN_FETCH, KEY, 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_EXISTS, NOT_IN, NOT_LIKE, NOT_MEMBER, NOT_MEMBER_OF, NULL, NULLIF, OBJECT, OF, OR, ORDER_BY, OUTER, PLUS, POSITION, POSITIONAL_PARAMETER, QUOTE, SELECT, SET, SIZE, SOME, SQRT, SUBSTRING, SUM, THEN, TRAILING, TREAT, TRIM, TRUE, TYPE, UNKNOWN, UPDATE, UPPER, VALUE, WHEN, WHERE
 
Constructor Summary
  JPQLExpression(java.lang.CharSequence query, IJPAVersion version)
          Creates a new JPQLExpression, which is the root of the JPQL parsed tree.
  JPQLExpression(java.lang.CharSequence query, IJPAVersion version, boolean tolerant)
          Creates a new JPQLExpression, which is the root of the JPQL parsed tree.
private JPQLExpression(IJPAVersion version, boolean tolerant)
          Creates a new JPQLExpression, which is the root of the JPQL parsed tree.
 
Method Summary
 void accept(ExpressionVisitor visitor)
          Visits this Expression by the given visitor.
 void acceptChildren(ExpressionVisitor visitor)
          Visits the children of this Expression.
(package private)  void addChildrenTo(java.util.Collection<Expression> children)
          Adds the children of this Expression to the given collection.
(package private)  void addOrderedChildrenTo(java.util.List<StringExpression> children)
          Adds the StringExpressions representing this Expression.
private  SelectStatement addSelectStatement()
           
 QueryPosition buildPosition(java.lang.String actualQuery, int position)
          Creates an object where the Expression is the leaf at the given position.
private  AbstractExpression buildQueryStatement(WordParser wordParser)
           
private  void checkQuery(java.lang.CharSequence query)
           
private  void checkVersion(IJPAVersion version)
           
 Expression getExpression(java.lang.String actualQuery, int position)
          Returns the deepest Expression for the given position.
 IJPAVersion getJPAVersion()
          Returns the version of the Java Persistence to support.
 JPQLQueryBNF getQueryBNF()
          Returns the BNF of this Expression.
 Expression getQueryStatement()
          Returns the Expression representing the query, which is either a SELECT, a DELETE or an UPDATE clause.
 AbstractExpression getUnknownEndingStatement()
          Returns the Expression that may contain a portion of the query that could not be parsed, this happens when the query is either incomplete or malformed.
 IJPAVersion getVersion()
          Returns the version of the JPQL to support, which is the version of the Java Persistence specification.
 boolean hasQueryStatement()
          Determines whether a query was parsed.
 boolean hasUnknownEndingStatement()
          Determines whether the query that got parsed had some malformed or unknown information.
(package private)  boolean isTolerant()
          Determines if the parser is in tolerant mode or is in fast mode.
(package private)  void parse(WordParser wordParser, boolean tolerant)
          Parses the query by starting at the current position, which is part of the given WordParser.
static Expression parseConditionalExpression(java.lang.String abstractSchemaName, java.lang.CharSequence conditionalExpression, IJPAVersion version, boolean tolerant)
          Creates a new Expression by parsing the string, which represents a conditional expression.
(package private)  void toParsedText(java.lang.StringBuilder writer, boolean includeVirtual)
          Generates a string representation of this Expression.
 
Methods inherited from class org.eclipse.persistence.jpa.internal.jpql.parser.AbstractExpression
buildExpressionFromFallingBack, buildNullExpression, buildStringExpression, buildStringExpression, buildUnknownExpression, children, expressionFactory, expressionFactoryForIdentifier, findQueryBNF, getChildren, getParent, getRoot, getText, handleAggregate, identifierRole, identifiers, identifiers, identifierVersion, isAncestor, isIdentifier, isNull, isParsingComplete, isUnknown, isVirtual, orderedChildren, parse, parseSingleExpression, populatePosition, queryBNF, readdLeadingSpaces, 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
 

Field Detail

queryStatement

private AbstractExpression queryStatement
The tree representation of the query.

tolerant

private boolean tolerant
Determines if the parsing system should be tolerant, meaning if it should try to parse invalid or incomplete queries.

unknownEndingStatement

private AbstractExpression unknownEndingStatement
If the expression could not be fully parsed, meaning some unknown text is trailing the query, this will contain it.

version

private IJPAVersion version
The version of the JPQL to support, which is the version of the Java Persistence specification.
Constructor Detail

JPQLExpression

public JPQLExpression(java.lang.CharSequence query,
                      IJPAVersion version)
Creates a new JPQLExpression, which is the root of the JPQL parsed tree.
Parameters:
query - The string representation of the JPQL query to parse
version - The version of the JPQL to support, which is the version of the Java Persistence specification

JPQLExpression

public JPQLExpression(java.lang.CharSequence query,
                      IJPAVersion version,
                      boolean tolerant)
Creates a new JPQLExpression, which is the root of the JPQL parsed tree.
Parameters:
query - The string representation of the JPQL query to parse
version - The version of the JPQL to support, which is the version of the Java Persistence specification
tolerant - Determines if the parsing system should be tolerant, meaning if it should try to parse invalid or incomplete queries

JPQLExpression

private JPQLExpression(IJPAVersion version,
                       boolean tolerant)
Creates a new JPQLExpression, which is the root of the JPQL parsed tree.
Parameters:
version - The version of the JPQL to support, which is the version of the Java Persistence specification
tolerant - Determines if the parsing system should be tolerant, meaning if it should try to parse invalid or incomplete queries
Method Detail

parseConditionalExpression

public static Expression parseConditionalExpression(java.lang.String abstractSchemaName,
                                                    java.lang.CharSequence conditionalExpression,
                                                    IJPAVersion version,
                                                    boolean tolerant)
Creates a new Expression by parsing the string, which represents a conditional expression.
Parameters:
abstractSchemaName - The abstract schema name for which the identification variable "this" represents
conditionalExpression - The string representation of the conditional expression to parse
version - The version of the JPQL to support, which is the version of the Java Persistence specification
tolerant - Determines whether the parsing system should be tolerant, meaning if it should try to parse invalid or incomplete queries
Returns:
The Expression representing the given conditional expression

accept

public void accept(ExpressionVisitor visitor)
Visits this Expression by the given visitor.
Parameters:
visitor - The visitor to visit this object

acceptChildren

public void acceptChildren(ExpressionVisitor visitor)
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() or Expression.getChildren() is called.

This does not traverse the Expression sub-hierarchy, use an subclass of AbstractTraverseChildrenVisitor in order to traverse the entire sub-hierarchy.

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

addChildrenTo

void addChildrenTo(java.util.Collection<Expression> children)
Adds the children of this Expression to the given collection.
Overrides:
addChildrenTo in class AbstractExpression
Parameters:
children - The collection used to store the children

addOrderedChildrenTo

void addOrderedChildrenTo(java.util.List<StringExpression> children)
Adds the StringExpressions representing this Expression.
Overrides:
addOrderedChildrenTo in class AbstractExpression
Parameters:
children - The list used to store the string representation of this Expression

addSelectStatement

private SelectStatement addSelectStatement()

buildPosition

public QueryPosition buildPosition(java.lang.String actualQuery,
                                   int position)
Creates an object where the Expression is the leaf at the given position.
Parameters:
actualQuery - The actual query is a string representation of the query that may contain extra whitespace
position - The position of the cursor in the actual query, which is used to retrieve the deepest Expression. The position will be adjusted to fit into the beautified version of the query
Returns:
A new QueryPosition

buildQueryStatement

private AbstractExpression buildQueryStatement(WordParser wordParser)

checkQuery

private void checkQuery(java.lang.CharSequence query)

checkVersion

private void checkVersion(IJPAVersion version)

getExpression

public Expression getExpression(java.lang.String actualQuery,
                                int position)
Returns the deepest Expression for the given position.
Parameters:
actualQuery - The actual query is the text version of the query that may contain extra whitespace and different formatting than the trim down version generated by the parsed tree
position - The position in the actual query used to retrieve the Expression
Returns:
The Expression located at the given position in the given query

getJPAVersion

public IJPAVersion getJPAVersion()
Returns the version of the Java Persistence to support.
Overrides:
getJPAVersion in class AbstractExpression
Returns:
The JPA version

getQueryBNF

public JPQLQueryBNF getQueryBNF()
Returns the BNF of this Expression.
Specified by:
getQueryBNF in class AbstractExpression
Returns:
The JPQLQueryBNF, which represents the grammar of this Expression

getQueryStatement

public Expression getQueryStatement()
Returns the Expression representing the query, which is either a SELECT, a DELETE or an UPDATE clause.
Returns:
The expression representing the Java Persistence query

getUnknownEndingStatement

public AbstractExpression getUnknownEndingStatement()
Returns the Expression that may contain a portion of the query that could not be parsed, this happens when the query is either incomplete or malformed.
Returns:
The expression used when the ending of the query is unknown or malformed

getVersion

public IJPAVersion getVersion()
Returns the version of the JPQL to support, which is the version of the Java Persistence specification.
Returns:
The version that was used to parse the JPQL query

hasQueryStatement

public boolean hasQueryStatement()
Determines whether a query was parsed. The query may be incomplete but it started with one of the three clauses (SELECT, DELETE FROM, or UPDATE).
Returns:
true the query was parsed; false otherwise

hasUnknownEndingStatement

public boolean hasUnknownEndingStatement()
Determines whether the query that got parsed had some malformed or unknown information.
Returns:
true if the query could not be parsed correctly because it is either incomplete or malformed

isTolerant

boolean isTolerant()
Determines if the parser is in tolerant mode or is in fast mode. When the tolerant is turned on, it means the parser will attempt to parse incomplete or invalid queries.
Overrides:
isTolerant in class AbstractExpression
Returns:
true if the parsing system should parse invalid or incomplete queries; false when the query is well-formed and valid

parse

void parse(WordParser wordParser,
           boolean tolerant)
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

void toParsedText(java.lang.StringBuilder writer,
                  boolean includeVirtual)
Generates a string representation of this Expression.
Specified by:
toParsedText in class AbstractExpression
Parameters:
writer - The buffer used to append this Expression's string representation
includeVirtual - 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

Copyright © 1998, 2012, Oracle. All Rights Reserved.