Class JPQLExpression

  • All Implemented Interfaces:
    Expression

    public final class JPQLExpression
    extends AbstractExpression
    A JPQLExpression is the root of the parsed tree representation of a JPQL query. The query is parsed based on what was registered in the JPQLGrammar's ExpressionRegistry.

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

    It is possible to parse a portion of a JPQL query. The ID of the JPQLQueryBNF is used to parse that portion and getQueryStatement() then returns only the parsed tree representation of that JPQL fragment.

    Since:
    2.3
    Version:
    2.5
    Author:
    Pascal Filion
    • Constructor Detail

      • JPQLExpression

        public JPQLExpression​(CharSequence query,
                              JPQLGrammar jpqlGrammar)
        Creates a new JPQLExpression, which is the root of the JPQL parsed tree.
        Parameters:
        query - The string representation of the JPQL query to parse
        jpqlGrammar - The JPQL grammar that defines how to parse a JPQL query
      • JPQLExpression

        public JPQLExpression​(CharSequence query,
                              JPQLGrammar jpqlGrammar,
                              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
        jpqlGrammar - The JPQL grammar that defines how to parse a JPQL query
        tolerant - Determines if the parsing system should be tolerant, meaning if it should try to parse invalid or incomplete queries
      • JPQLExpression

        public JPQLExpression​(CharSequence jpqlFragment,
                              JPQLGrammar jpqlGrammar,
                              String queryBNFId,
                              boolean tolerant)
        Creates a new JPQLExpression that will parse the given fragment of a JPQL query. This means getQueryStatement() will not return a query statement (select, delete or update) but only the parsed tree representation of the fragment if the query BNF can pare it. If the fragment of the JPQL query could not be parsed using the given JPQLQueryBNF, then getUnknownEndingStatement() will contain the non-parsable fragment.
        Parameters:
        jpqlFragment - A fragment of a JPQL query, which is a portion of a complete JPQL query
        jpqlGrammar - The JPQL grammar that defines how to parse a JPQL query
        queryBNFId - The unique identifier of the JPQLQueryBNF
        tolerant - Determines if the parsing system should be tolerant, meaning if it should try to parse invalid or incomplete queries
        Since:
        2.4
    • Method Detail

      • buildPosition

        public QueryPosition buildPosition​(String actualQuery,
                                           int position)
        Creates a map of the position of the cursor within each Expression of the parsed tree.
        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
      • getExpression

        public Expression getExpression​(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 JPAVersion getJPAVersion()
      • 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 Expression 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
      • 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