cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: EJBQL: Arithmetic operations
Date Tue, 16 Aug 2016 07:26:43 GMT
Looks like DB path prefix was ignored everywhere except in conditions. E.g. here it would work,
but nowhere else:

 select p.estimatedPrice from Painting p WHERE  db:p.ESTIMATED_PRICE > 2

Since expanding it to SELECT clause didn't require a parser change, the fix was actually pretty
easy. I just committed it. See 5869e40f61e547cb33285803eede286a780cb0f3 and CAY-2102.

Andrus

> On Aug 15, 2016, at 9:53 PM, Hugi Thordarson <hugi@karlmenn.is> wrote:
> 
> I’m not quite getting this to work… In this case I have a list of Receipts linked
to Shops, and I want to select the shop IDs (simplified example). If I try:
> 
> select db:r.shop_id from Receipt r
> 
> I’ll receive an error that “shop_id” is an invalid path component.
> 
> 
> 
> 
>> On 15. ágú. 2016, at 17:18, Andrus Adamchik <andrus@objectstyle.org> wrote:
>> 
>>> One last question: Can I use db:-paths in EJBQL queries?
>> 
>> Yes, db path should be supported everywhere. 
>> 
>>> Particularly, I’m attempting to use FK-columns (that aren’t exposed in the
ObjEntity) in my queries, perhaps there’s another way?
>> 
>> 
>> If possible, use a relationship name instead of FK. E.g. 
>> 
>> "SELECT p FROM Painting p WHERE p.artist = 1"
>> 
>> but if not, db path is an option.
>> 
>> Andrus
>> 
>> 
>>> On Aug 15, 2016, at 7:02 PM, Hugi Thordarson <hugi@karlmenn.is> wrote:
>>> 
>>> Thanks for this Andrus. One last question: Can I use db:-paths in EJBQL queries?
Particularly, I’m attempting to use FK-columns (that aren’t exposed in the ObjEntity)
in my queries, perhaps there’s another way?
>>> 
>>> Cheers,
>>> - hugi
>>> 
>>> 
>>> 
>>>> On 15. ágú. 2016, at 15:31, Andrus Adamchik <andrus@objectstyle.org>
wrote:
>>>> 
>>>> Ah yeah, now checking the code I am starting to remember. Arithmetic expressions
are not allowed in SELECT clause, only in WHERE. There's no real reason for it other then
us initially basing EJBQL parser on some early JPA spec that probably didn't support it. We
need to add it to the parser. For now it won't work.
>>>> 
>>>> Andrus
>>>> 
>>>> 
>>>>> On Aug 15, 2016, at 5:49 PM, Hugi Thordarson <hugi@karlmenn.is>
wrote:
>>>>> 
>>>>> Hi Andrus,
>>>>> 
>>>>>> On 15. ágú. 2016, at 06:30, Andrus Adamchik <andrus@objectstyle.org>
wrote:
>>>>>> 
>>>>>> Hi Hugi,
>>>>>> 
>>>>>> Sorry for delayed reply. I swear we had the BNF for EJBQL in the
docs, but apparently we don't. Here is the closest thing to it - a JavaCC grammar:
>>>>>> 
>>>>>> https://github.com/apache/cayenne/blob/master/cayenne-server/src/main/jjtree/org/apache/cayenne/ejbql/EJBQLParser.jjt
>>>>>> 
>>>>>> We do support simple arithmetic operations. Search for 'arithmetic_'
clauses in the .jjt.
>>>>> 
>>>>> I’m not as smart as you think—I haven’t touched JavaCC grammar
before, though I could figure it out but I don’t see how to do this :). Can you tell me
how I can do something equivalent to “select e.price*e.quantity from Entry e”?
>>>>> 
>>>>> Cheers,
>>>>> - hugi
>>>> 
>>> 
>> 
> 


Mime
View raw message