Now looking to add splits to SelectQueries, I am wondering if the approach we discussed before is too "special case". To reiterate, the idea of a "join split" (CAY-802), was to allow users to override the default behavior of Cayenne which is to reuse all joins. Here is some in-depth discussion of useful split scenarios:

   http://objectstyle.org/cayenne/lists/cayenne-devel/2003/09/0096.html

I am wading through archives trying to find the pipe ("|") semantics that Giulio Cesare used for the splits, but IIRC it was something like this:

    rel1.rel2|rel3.rel4

That's fine except that it is targeting a special case of matching a single path against a collection of values. A more generic case would be multiple overlapping but different expression paths. E.g.:

    rel1.rel2.rel3.rel4
    rel1.rel2.rel3.rel5

Split semantics, while rather concise and clear for its intended use, doesn't help us in dealing with multiple overlapping paths... So how do we handle those? One possible solution is to follow EJBQL idea and define aliases for join paths. This way each alias for the same path generates a separate chain of joins that can be reused if needed. E.g.:

SelectQuery query = ...
query.addQualifierAlias("rel1.rel2", "a");
query.addQualifierAlias("rel1.rel2", "b");

Then the following can be used as qualifier:

   a.x
   a.rel4
   b.y
   b.rel5

Any thoughts on that? Would that be better than the pipe sign? (and did we discuss that before, and I am simply missing it)

Andrus

Reply via email to