Join splits

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Wed Apr 30 2008 - 08:12:40 EDT

  • Next message: Andrus Adamchik (JIRA): "[jira] Created: (CAY-1044) NPE on commit when the new object was deleted before commit"

    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



    This archive was generated by hypermail 2.0.0 : Wed Apr 30 2008 - 08:13:15 EDT