[jira] Closed: (CAY-514) implement a "MATCH ALL VALUES" expression

From: Andrus Adamchik (JIRA) ("Andrus)
Date: Tue May 06 2008 - 13:54:52 EDT

  • Next message: Michael Gentry: "Re: Hello list!"

         [ https://issues.apache.org/cayenne/browse/CAY-514?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

    Andrus Adamchik closed CAY-514.
    -------------------------------

        Resolution: Fixed

    Fixed. Reintroduced split pipe syntax in ExpressionFactory. E.g.:

    Expression e = ExpressionFactory.matchAllExp( "|exhibitArray.artistExhibitArray.toArtist", picasso, dali);

    This generates a bunch of split joins:

    SELECT DISTINCT t0.GALLERY_ID, t0.GALLERY_NAME
    FROM GALLERY t0
            JOIN EXHIBIT t1 ON (t0.GALLERY_ID = t1.GALLERY_ID)
            JOIN ARTIST_EXHIBIT t2 ON (t1.EXHIBIT_ID = t2.EXHIBIT_ID)
            JOIN EXHIBIT t3 ON (t0.GALLERY_ID = t3.GALLERY_ID)
            JOIN ARTIST_EXHIBIT t4 ON (t3.EXHIBIT_ID = t4.EXHIBIT_ID)
            WHERE (t2.ARTIST_ID = ?) AND (t4.ARTIST_ID = ?)

    > implement a "MATCH ALL VALUES" expression
    > -----------------------------------------
    >
    > Key: CAY-514
    > URL: https://issues.apache.org/cayenne/browse/CAY-514
    > Project: Cayenne
    > Issue Type: New Feature
    > Components: Cayenne Core Library
    > Affects Versions: 3.0
    > Reporter: Mike Kienenberger
    > Assignee: Mike Kienenberger
    > Fix For: 3.0
    >
    >
    > Implement a "Match all values" expression behavior (like previously discussed as hasAllOfExp or MatchAllValuesExpression on the mailing list in the past).
    > For example,
    > letters
    > a
    > b
    > c
    > digits
    > 1
    > 2
    > 3
    > letters__digits
    > a-1
    > a-2
    > a-3
    > b-2
    > c-3
    > c-2
    > find all 1s: a
    > find all 2s: a, b, c
    > find all 3s: a, c
    > "Match all values" on (1, 2) would generate sql like the following and
    > return "a"
    > select l1.* from letters l1, letters_digits ld1, digits d1, letters
    > l2, letters_digits ld1, digits d2 where
    > d1.value = '1' and ld1.digit_id = d1.digit_id and ld1.letter_id = l1.letter_id
    > and
    > d2.value = '2' and ld2.digit_id = d2.digit_id and ld2.letter_id = l2.letter_id
    > The current limitation is due to the fact that Cayenne qualifier translator removes "duplicate" joins.
    > You'd have to introduce the "split" expression as discussed in the threads below. Maybe use a pipe symbol at a place in the path where a split should start, like "|r1" or "r1.r2.|r3"?? Second thing to change is QueryAsembler.dbRelationshipAdded(..) method that removes "duplicates" to support the splits.
    > There are a few more things to take care of to fully support splits, so this is certainly not a trivial change.
    > Relevent threads discussing the idea and issues in more details:
    > http://www.objectstyle.org/cayenne/lists/cayenne-devel/2003/09/0096.html
    > http://www.objectstyle.org/cayenne/lists/cayenne-devel/2003/10/0005.html

    -- 
    This message is automatically generated by JIRA.
    -
    You can reply to this email to add a comment to the issue online.
    



    This archive was generated by hypermail 2.0.0 : Tue May 06 2008 - 13:55:24 EDT