public class JPQLSingleStringParser extends Object
SELECT [{result} ] [FROM {from-clause} ] [WHERE {filter}] [GROUP BY {grouping-clause} ] [HAVING {having-clause} ] [ORDER BY {ordering-clause}] [RANGE x,y] e.g SELECT c FROM Customer c INNER JOIN c.orders o WHERE c.status = 1or
UPDATE {update-clause} WHERE {filter}and update-clause is of the form "Entity [[AS] identifier] SET {field = new_value}, ..." or
DELETE {delete-clause} WHERE {filter}and delete-clause is of the form "FROM Entity [[AS] identifier]"
Note that only the {filter} and {having-clause} can strictly contain subqueries in JPQL, hence containing keywords
SELECT c FROM Customer c WHERE NOT EXISTS (SELECT o1 FROM c.orders o1)So the "filter" for the outer query is "NOT EXISTS (SELECT o1 FROM c.orders o1)". Note also that we allow subqueries in {result}, {from}, and {having} clauses as well (vendor extension). If a subquery is contained we extract the subquery and then set it as a variable in the symbol table, and add the subquery separately. Note that the
[RANGE x,y]is a DataNucleus extension syntax to allow for specification of firstResult/maxResults in the query string and hence in subqueries and is dependent on enabling datanucleus.query.jpql.allowRange. TODO Need to better cater for the construct "TRIM(... FROM ...)" since it reuses the FROM keyword and we don't handle that explicitly here, just working around it
Constructor and Description |
---|
JPQLSingleStringParser(Query query,
String queryString)
Constructor for the Single-String parser.
|
Modifier and Type | Method and Description |
---|---|
JPQLSingleStringParser |
allowRange() |
void |
parse()
Method to parse the Single-String query
|
public JPQLSingleStringParser allowRange()
public void parse()
Copyright © 2019. All rights reserved.