Garry Watkins commented on CAY-919:
-----------------------------------
>> 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.
I don't know the EJBQL spec, so I was just applying standard SQL logic, and was assuming that it would be in there. So it looks like the EJBQL spec is kind of a step backward in the fact that it doesn't support aliases. Because if I decide to change how things are grouped (added or removed) I would have to change all of my indexes. However, it looks like Hibernate does support aliases. Please look towards the end of section 7.4 of this link: http://www.hibernate.org/hib_docs/entitymanager/reference/en/html/queryhql.html I am not saying that Cayenne should do everything that Hibernate does. However, I believe that if we allowed aliases, then we could pop the data back into DataRows. If left unaliased then we could just return the values in an Object[].
Just my 2 cents, perhaps I can pose this question in the users mailing list.
Thanks
Garry
> 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 - 18:24:27 EST