Hi Lachlan,
Coincidentally I finished some documentation on this feature over the
weekend:
http://cayenne.apache.org/doc/path-expressions.html ("Aliases in Path
Expressions")
http://cayenne.apache.org/doc/expression-factory-utilities.html
("Split Expressions with matchAllExp()")
Essentially the pipe symbol can only be used with 'matchAllExp'. This
is a special case, and I am not sure it makes sense in a general case.
General case is handled a bit differently via "path aliases". I.e. for
each group of paths that you want to be executed as a single join, you
create a single alias. Different aliases over matching paths generate
separate joins.
Also aliases would only work with 3.0RC2 (aka 3.0-STABLE branch), as
it contains a fix for CAY-1361. matchAllExp() with pipes works in RC1.
Andrus
On Jan 13, 2010, at 6:13 AM, Lachlan Deck wrote:
Hi there (particularly Andrus),
I notice in CAY-514[1] that there's a split syntax using the pipe
symbol that works for matchAll expressions. Is this the only
possible way of achieving split expressions?
If we have two expressions (initialised separately - but combined
for the select) that happen to be testing the same keyPath across a
toMany is it possible to enforce similar behaviour somehow?
e.g.,
Expression e1 = ExpressionFactory.like("cousins.firstName", "fred");
Expression e2 = ExpressionFactory.like("cousins.firstName", "joe");
Expression e = e1.andExp(e2);
The resulting sql removes duplicate joins and thus produces no
results.
Trying with pipes fails to resolve the paths:
Expression e1 = ExpressionFactory.like("cousins.|firstName", "fred");
Expression e2 = ExpressionFactory.like("cousins.|firstName", "joe");
// throws exceptions at runtime
So is it possible to make this work other than using matchAll?
[1] http://issues.apache.org/jira/browse/CAY-514
with regards,
--
Lachlan Deck