You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Mark Struberg (JIRA)" <ji...@apache.org> on 2019/02/14 14:21:00 UTC

[jira] [Assigned] (OPENJPA-2735) IN with sub-query doesn't work with compound IDs

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

Mark Struberg reassigned OPENJPA-2735:
--------------------------------------

    Assignee: Mark Struberg

> IN with sub-query doesn't work with compound IDs
> ------------------------------------------------
>
>                 Key: OPENJPA-2735
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2735
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc
>    Affects Versions: 2.4.2
>            Reporter: Pawel Veselov
>            Assignee: Mark Struberg
>            Priority: Major
>
> Ran into this problem now.
> With two entities, A and B, where A has multi-field ID (say id1 and id2), and B has a field that references A. Running this query:
> select b from B b where b.ref in ( select a from A ); causes problems.
> I don't know how to create a test case for it, because this outright doesn't work with Derby - derby doesn't allow for sub-queries that return more than one field.
> With postgres, this fails, because the query translates into:
> {code:sql}
> select * from b where b.ref_id1 in ( select a.id1, a.id2 from a );
> {code}
> The problem is in InSubQExpression.appendTo() method:
> {code:java}
>     public void appendTo(Select sel, ExpContext ctx, ExpState state, 
>         SQLBuffer buf) {
>         InSubQExpState istate = (InSubQExpState) state;
>         _sub.calculateValue(sel, ctx, istate.subqState, null, null);
>         _val.calculateValue(sel, ctx, istate.valueState, null, null);
>         _val.appendTo(sel, ctx, istate.valueState, buf, 0);
>         buf.append(" IN ");
>         _sub.appendTo(sel, ctx, istate.valueState, buf, 0);
>     }
> {code}
> The _val.appendTo() is called with index of 0, but that can be a compound object (which it is in this case). I'm gonna try replacing the appendTo() call with appendType(). I don't understand enough of this to know what I'm doing though.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)