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.

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

      • JPQLExpression

        public JPQLExpression​(java.lang.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​(java.lang.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​(java.lang.CharSequence jpqlFragment,
                              JPQLGrammar jpqlGrammar,
                              java.lang.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​(java.lang.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​(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
      • 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
      • isTolerant

        protected 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

        protected 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

        protected void toParsedText​(java.lang.StringBuilder writer,
                                    boolean actual)
        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