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.
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 © 2018. All rights reserved.