Andrus Adamchik updated CAY-919:
--------------------------------
Priority: Major (was: Blocker)
> This relational operators are working and not an issue, i forgot to prefix the effectiveDate with an "at.",
Cool. I reduced the priority of the issue since this actually works.
> however it would be nice to have a better error message.
Agreed. We'll need to figure out how to interpret such failures in the parser and provide a better message.
> Additionally shouldn't this return a data row instead a list of an Object[] array?
(this maybe something to discuss on the user list). Since EJBQL sort of grew up out of our JPA provider work AND we haven't supported aggregate queries that well before, we started to follow the JPA pattern for the query results - Object[] for non-object results. This is not yet documented, as we need to figure out how to reconcile it with DataRows conceptually (besides there are still some implementation limitations).
> Additionally, it is throwing an exception if I alias the sum expression which is an issue. Let me know if I should create a new issue about the aliasing.
Hmm... per EJBQL spec you can't alias aggregate column. That's where Object[] comes in - you can process the results by position instead of by label.
> EJBQL Query with relational queries (<, <=, >, >=) are throwing exceptions
> --------------------------------------------------------------------------
>
> Key: CAY-919
> URL: https://issues.apache.org/cayenne/browse/CAY-919
> Project: Cayenne
> Issue Type: Bug
> Components: Cayenne Core Library
> Affects Versions: 3.0
> Environment: Mac OS/X (Leopard), Java 1.5 Cayenne 3.M2
> Reporter: Garry Watkins
> Assignee: Andrus Adamchik
>
> When using a relational operator in an EJBQLQuery it is throwing a ParseException. Additionally shouldn't this return a data row instead a list of an Object[] array? That is assuming that one can alias the selected attributes. However, it appears that you cannot specify an alias.
> Source:
> EJBQLQuery q = new EJBQLQuery("SELECT at.isUsage, sum(at.amount), sum(at.hours) FROM AccrualTransaction at WHERE at.accrualCode = :accrualCode and at.employeeID = :employeeID and effectiveDate >= :payrollDate GROUP BY at.isUsage");
> q.setParameter("accrualCode", bal.getCode());
> q.setParameter("employeeID", emp.getEmployeeID());
> q.setParameter("effectiveDate", balanceDate);
> List results = emp.getObjectContext().performQuery(q); <<== throws exception here
> System.out.println(results);
> Error follows:
> org.apache.cayenne.ejbql.parser.ParseException: Encountered "effectiveDate >=" at line 1, column 149.
> Was expecting one of:
> "(" ...
> "NOT" ...
> "EXISTS" ...
> "+" ...
> "-" ...
> <DECIMAL_LITERAL> ...
> <INTEGER_LITERAL> ...
> ":" ...
> "?" ...
> <IDENTIFIER> ...
> <IDENTIFIER> "." ...
> "LENGTH" ...
> "LOCATE" ...
> "ABS" ...
> "SQRT" ...
> "MOD" ...
> "SIZE" ...
> "AVG" ...
> "MAX" ...
> "MIN" ...
> "SUM" ...
> "COUNT" ...
> "SELECT" ...
> <STRING_LITERAL> ...
> "CONCAT" ...
> "SUBSTRING" ...
> "TRIM" ...
> "LOWER" ...
> "UPPER" ...
> <BOOLEAN_LITERAL> ...
> "CURRENT_DATE" ...
> "CURRENT_TIME" ...
> "CURRENT_TIMESTAMP" ...
> "NEW" ...
> "ALL" ...
> "ANY" ...
> "SOME" ...
> "EMPTY" ...
> "ASC" ...
> "DESC" ...
> "ORDER" ...
> "IS" ...
> "MEMBER" ...
> "OF" ...
> "LIKE" ...
> "ESCAPE" ...
> "BETWEEN" ...
> "NULL" ...
> "OR" ...
> "AND" ...
> "LEADING" ...
> "TRAILING" ...
> "BOTH" ...
> "DISTINCT" ...
> "FROM" ...
> "UPDATE" ...
> "DELETE" ...
> "WHERE" ...
> "GROUP" ...
> "BY" ...
> "HAVING" ...
> "AS" ...
> "LEFT" ...
> "OUTER" ...
> "INNER" ...
> "JOIN" ...
> "FETCH" ...
> "IN" ...
> "SET" ...
> "OBJECT" ...
> <IDENTIFIER> "=" ...
> <IDENTIFIER> "<>" ...
> <IDENTIFIER> "NOT" ...
> <IDENTIFIER> "MEMBER" ...
>
-- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.
This archive was generated by hypermail 2.0.0 : Thu Nov 15 2007 - 15:02:13 EST