cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dave Lamy <davel...@gmail.com>
Subject Re: ParseException with EJBQL expression
Date Fri, 04 Dec 2009 23:18:09 GMT
FYI progress made today.  I have successfully implemented a custom EJBSQL
generator and am mainly getting stuff working.

One question:  is there a valid way to express that a relationship should be
an outer join instead of inner?  I'm not finding any docs about this.

For example:

SELECT a.name,COUNT(b) FROM Artist AS a, IN (a.paintings) AS b WHERE b.year
BETWEEN 1800 AND 1900 GROUP BY a.name

I want an Artist with 0 paintings from the years 1800-1900 to still come
through as a result.  Right now of course, it is not because the inner join
removes that artist from consideration.

So close..

Thanks again for the help--
Dave


On Fri, Dec 4, 2009 at 10:09 AM, Dave Lamy <davelamy@gmail.com> wrote:

> So one problem that I now understand is that EJBQL doesn't support
> navigating over to-many collections inline, so "foo.productStyles.taxonomy"
> would be invalid.  In order to do that you have to do this whole
> "IN(foo.productStyles) styles" bit in the FROM clause, at least according to
> the specs.
>
> I don't know if this is causing the parse problem or not.. but it does
> render the Expression.toEJBQL() rather useless.  I would need to do my own
> FROM/WHERE clause generation.
>
> I'll plug away at this and will let you know what I find out..
>
> Dave
>
>
> On Fri, Dec 4, 2009 at 8:09 AM, Dave Lamy <davelamy@gmail.com> wrote:
>
>> I can get rid of the likeIgnoreCase and see what happens.  So I'm OK on
>> the alias part right?  In my other tests it didn't need an "as".  I've
>> mainly been concerned about whether that "doublehop"
>> (.productStyles.taxonomy) would be valid or not.
>>
>> FYI that popped straight out of an Expression.toEJBSQL().  Not sure how
>> best to handle situations like that, where the Expression supports a notion
>> that EJBSQL does not.
>>
>> On Fri, Dec 4, 2009 at 7:31 AM, Andrus Adamchik <andrus@objectstyle.org>wrote:
>>
>>> "likeIgnoreCase" is not valid in EJBQL. Although the error message refers
>>> to something else... strange...
>>>
>>>
>>>
>>> On Dec 4, 2009, at 4:12 AM, Dave Lamy wrote:
>>>
>>>  Hey guys--
>>>>
>>>> I'm really just now getting into using the EJBQLQuery and am having some
>>>> difficulties.  I don't know whether I'm doing something fundamentally
>>>> wrong
>>>> or what.
>>>>
>>>> Here's my EJBQL expression that I'm trying to get parsed (running
>>>> 3.0B1):
>>>>
>>>> select COUNT(foo) from ProductCollection foo where
>>>> foo.productStyles.taxonomy likeIgnoreCase '323.%'
>>>>
>>>> Parsing this query yields the following exception:
>>>>
>>>>
>>>> org.apache.cayenne.ejbql.parser.ParseException: Encountered "
>>>> <IDENTIFIER>
>>>> "foo "" at line 1, column 53.
>>>> Was expecting:
>>>>   "(" ...
>>>>
>>>>   at
>>>>
>>>> org.apache.cayenne.ejbql.parser.EJBQL.generateParseException(EJBQL.java:9419)
>>>>   at
>>>> org.apache.cayenne.ejbql.parser.EJBQL.jj_consume_token(EJBQL.java:9298)
>>>>   at
>>>>
>>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_primary(EJBQL.java:1933)
>>>>   at
>>>>
>>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_factor(EJBQL.java:1911)
>>>>   at
>>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_term(EJBQL.java:1776)
>>>>   at
>>>>
>>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_expression(EJBQL.java:1738)
>>>>   at
>>>>
>>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_primary(EJBQL.java:1928)
>>>>   at
>>>>
>>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_factor(EJBQL.java:1911)
>>>>   at
>>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_term(EJBQL.java:1776)
>>>>   at
>>>>
>>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_expression(EJBQL.java:1738)
>>>>   at org.apache.cayenne.ejbql.parser.EJBQL.where_clause(EJBQL.java:1585)
>>>>   at
>>>> org.apache.cayenne.ejbql.parser.EJBQL.select_statement(EJBQL.java:69)
>>>>   at org.apache.cayenne.ejbql.parser.EJBQL.parseQuery(EJBQL.java:41)
>>>> ...
>>>>
>>>> The statement looks legit to me.  Is there like a fundamental something
>>>> I'm
>>>> not understanding about EJBQL?  I saw some docs that showed doing this
>>>> sort
>>>> of join alias "IN" thing,
>>>>
>>>> SELECT OBJECT(e) FROM Department d, IN(d.employees) e
>>>>   WHERE d.name = ?1 AND e.salary > ?2
>>>>
>>>> My problem is that I'm using Expression.toEJBQL() to gen the where
>>>> clause..
>>>> was hoping to not have to recreate my code that generates the Expression
>>>> object.
>>>>
>>>> Help!
>>>>
>>>> Dave
>>>>
>>>
>>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message