Re: Expression to look for objects with an empty to-many relationship?

2015-07-28 Thread Michael Gentry
Andrus/Alex,

If the AggregateUtils I put together is helpful, feel free to use it.

Thanks,

mrg


On Mon, Jul 27, 2015 at 4:49 AM, Andrus Adamchik 
wrote:

> And finally we may decide to generate SQL different from OUTER JOIN
> (EXISTS, etc.). Only here this expression becomes truly "new". If you get
> to this step, let's discuss it separately on this list. We will need to
> discuss the behavior and SQL we should generate. Also Alex Kolonitsky is
> now working on a new SelectTranslator to include aggregates, etc., so this
> step will likely overlap with his work.
>


Re: Expression to look for objects with an empty to-many relationship?

2015-07-28 Thread Hugi Thordarson
Thanks a lot Andrus! I’m going to play around a little with this and see if I 
can’t make something useful of it :)

Cheers,
- hugi




> On 27. júl. 2015, at 08:49, Andrus Adamchik  wrote:
> 
> In the most general case adding support for a new kind of expression requires 
> the following:
> 
> 1. Support in ExpressionFactory and Property classes (though see comment 
> below on CollectionProperty) 
> 2. Support in Expression parser (so that the expression can be created from 
> String)
> 3. Support in SelectTranslator (so that the expression can be converted into 
> SQL).
> 
> In your case a minimal implementation can be quite simple: implement #1 to 
> work as outer join example ("a.paintingArray+ = null"). So existing #2 and #3 
> will be reused. Perhaps we create a Property subclass for to-many 
> relationships (CollectionProperty or something) that will have that extra 
> method for empty. Then you will also need to tweak cgen templates so that 
> CollectionProperty is included in generated classes.
> 
> Next step may be adding EJBQL syntax to Expression parser (#2): path IS [NOT] 
> EMPTY
> 
> And finally we may decide to generate SQL different from OUTER JOIN (EXISTS, 
> etc.). Only here this expression becomes truly "new". If you get to this 
> step, let's discuss it separately on this list. We will need to discuss the 
> behavior and SQL we should generate. Also Alex Kolonitsky is now working on a 
> new SelectTranslator to include aggregates, etc., so this step will likely 
> overlap with his work.
> 
> Andrus
> 
> 
>> On Jul 24, 2015, at 7:56 PM, Hugi Thordarson  wrote:
>> 
>> Indeed :). I’ve been looking at the Expression classes for a while now and 
>> they look a little daunting. Any recommendations on where to start? Is there 
>> a developer guide or an annotated example implementation somewhere?
>> 
>> - hugi
>> 
>> 
>> 
>>> On 24. júl. 2015, at 15:59, Andrus Adamchik  wrote:
>>> 
>>> Classic open source - "scratch your own itch" :) 
>>> 
>>> 
 On Jul 24, 2015, at 6:54 PM, Hugi Thordarson  wrote:
 
 Thanks Andrus, we’ll revert to EJBQL for now.
 
 Looks like an excellent opportunity to try and implement my first 
 Expression class :)
 
 - hugi
 
 
 
> On 24. júl. 2015, at 15:36, Andrus Adamchik  
> wrote:
> 
> We should add it. For now OUTER JOIN should do the trick:
> 
> "a.paintingArray+ = null"
> 
> Also EJBQL syntax supports "IS [NOT] EMPTY" :
> 
> "SELECT a FROM Artist a WHERE a.paintingArray IS EMPTY"
> 
> Andrus
> 
>> On Jul 24, 2015, at 5:51 PM, Hugi Thordarson  wrote:
>> 
>> Hi all.
>> Does Cayenne have an Expression class that allows searching for objects 
>> with an empty to-many relationships? If not, any pointers towards a 
>> sensible approach?
>> 
>> Cheers,
>> - hugi
>> 
>> // Hugi Thordarson
>> // http://www.loftfar.is/ 
>> // s. 895-6688
>> 
>> 
>> 
> 
 
>>> 
>> 
> 



Re: Expression to look for objects with an empty to-many relationship?

2015-07-27 Thread Andrus Adamchik
In the most general case adding support for a new kind of expression requires 
the following:

1. Support in ExpressionFactory and Property classes (though see comment below 
on CollectionProperty) 
2. Support in Expression parser (so that the expression can be created from 
String)
3. Support in SelectTranslator (so that the expression can be converted into 
SQL).

In your case a minimal implementation can be quite simple: implement #1 to work 
as outer join example ("a.paintingArray+ = null"). So existing #2 and #3 will 
be reused. Perhaps we create a Property subclass for to-many relationships 
(CollectionProperty or something) that will have that extra method for empty. 
Then you will also need to tweak cgen templates so that CollectionProperty is 
included in generated classes.

Next step may be adding EJBQL syntax to Expression parser (#2): path IS [NOT] 
EMPTY

And finally we may decide to generate SQL different from OUTER JOIN (EXISTS, 
etc.). Only here this expression becomes truly "new". If you get to this step, 
let's discuss it separately on this list. We will need to discuss the behavior 
and SQL we should generate. Also Alex Kolonitsky is now working on a new 
SelectTranslator to include aggregates, etc., so this step will likely overlap 
with his work.

Andrus


> On Jul 24, 2015, at 7:56 PM, Hugi Thordarson  wrote:
> 
> Indeed :). I’ve been looking at the Expression classes for a while now and 
> they look a little daunting. Any recommendations on where to start? Is there 
> a developer guide or an annotated example implementation somewhere?
> 
> - hugi
> 
> 
> 
>> On 24. júl. 2015, at 15:59, Andrus Adamchik  wrote:
>> 
>> Classic open source - "scratch your own itch" :) 
>> 
>> 
>>> On Jul 24, 2015, at 6:54 PM, Hugi Thordarson  wrote:
>>> 
>>> Thanks Andrus, we’ll revert to EJBQL for now.
>>> 
>>> Looks like an excellent opportunity to try and implement my first 
>>> Expression class :)
>>> 
>>> - hugi
>>> 
>>> 
>>> 
 On 24. júl. 2015, at 15:36, Andrus Adamchik  wrote:
 
 We should add it. For now OUTER JOIN should do the trick:
 
 "a.paintingArray+ = null"
 
 Also EJBQL syntax supports "IS [NOT] EMPTY" :
 
 "SELECT a FROM Artist a WHERE a.paintingArray IS EMPTY"
 
 Andrus
 
> On Jul 24, 2015, at 5:51 PM, Hugi Thordarson  wrote:
> 
> Hi all.
> Does Cayenne have an Expression class that allows searching for objects 
> with an empty to-many relationships? If not, any pointers towards a 
> sensible approach?
> 
> Cheers,
> - hugi
> 
> // Hugi Thordarson
> // http://www.loftfar.is/ 
> // s. 895-6688
> 
> 
> 
 
>>> 
>> 
>