Cool. Appreciate the bug reports!
> On Aug 16, 2016, at 2:22 PM, Hugi Thordarson <[email protected]> wrote:
>
> Thanks Andrus :).
>
> It works for the most part but I’m still running into some problems. I think
> I’ll switch to SQL for now for the methods where this matters. I’m filing
> JIRAs for the issues I’ve encountered but FYI, this is where it fails:
>
> Failure 1:
> Wrong SQL generated for a DISTINCT count using a DB path. Example:
>
> Running EJBQL query:
> select count(distinct db:e.receipt_id) from Entry e
>
> Generates SQL:
> SELECT COUNT(DISTINCT *) AS sc0 FROM `strimillinn`.`fd_entry` t0
>
> Should generate SQL:
> SELECT COUNT(DISTINCT receipt_id) AS sc0 FROM `strimillinn`.`fd_entry` t0
>
> ———————————————
>
> Failure 2:
> EJBQL fails to find joins for relationships when DB-paths are used in the
> where-clause.
>
> Running EJBQL query:
> select r.entries from Receipt r where db:r.shop.name='Holtagarðar'
>
> Results in a EJBQLException with the message:
> "No join configured for id r.shop"
>
> Running the same query using a regular path (not a DB path) works fine:
> select r.entries from Receipt r where r.shop.name='Holtagarðar'
>
> Cheers,
> - hugi
>
>
>> On 16. ágú. 2016, at 07:26, Andrus Adamchik <[email protected]> wrote:
>>
>> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]>
>>>>>> 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 <[email protected]> wrote:
>>>>>>>
>>>>>>> Hi Andrus,
>>>>>>>
>>>>>>>> On 15. ágú. 2016, at 06:30, Andrus Adamchik <[email protected]>
>>>>>>>> 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
>>>>>>
>>>>>
>>>>
>>>
>>
>