On Aug 18, 2006, at 11:30 PM, Mike Kienenberger wrote:

Now I was all ready to keep joins associated with Expressions.   Why
switch them back?

It is hard to design it right from the first shot. But I hope we are getting closer now.

It looks like each join in the JPA spec is associated with an expression as well.

No, there is a separation. Keep in mind that Cayenne expressions approximate just the WHERE clause in SQL, while EJBQL is SELECT+FROM +WHERE+..., i.e. the entire SQL query. Joins are defined in the FROM clause (that allows to define precise join splits and semantics of each join).


If we are going to put the join on the query, (or even if we are not),
how do you see the actual usage looking from the cayenne side?

Let me rewrite the example I mentioned before in terms of proposed SelectQuery API:

SelectQuery q = new SelectQuery(Painting.class);
q.setQualifier("x.artistName = null or y.artistName = 'artist6'");

// *** NEW SUGGESTED API
q.setJoins("LEFT OUTER JOIN toArtist x, LEFT OUTER JOIN toArtist y");


Will expressions now have table alias prefixes which are matched up to
the aliases specified in the join parameters?

Yes - optionally.

Or do we want to switch entirely to the JPA format of LEFT OUTER JOIN
AS x FETCH exp? with the join type defaulting to inner if not
specified.

Essentially everything will continue to work the way it does now, and only when you need custom splits and/or OUTER joins, "setJoins" method will be used with a JPA join string.


Finally, is there a difference between LEFT OUTER JOIN and LEFT JOIN
in the JPA specs?

No, they are the same ("OUTER" is an optional keyword - "LEFT" implies "OUTER").

It seems like no matter how we approach it, there will be a different
syntax going forward. If that's the case, maybe we should plan on using the JPA syntax where possible.

I think this will happen over time ...

I started on the full EJB QL parser grammar last night (I didn't have internet access till now, so I couldn't share anything). I guess the next step would be a JpaQuery (or EJBQLQuery) that includes a spec- compliant query string and translates to SelectQuery (if it happens to be a select) during execution. And later we may merge the two if this turns out to be possible.

Andrus

Reply via email to