This is an automated email from the ASF dual-hosted git repository. aadamchik pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push: new 14aa49d confirming that disjoint-by-id prefetches work for SQLSelect 14aa49d is described below commit 14aa49d560984223077928c5a02b7155abcd6cdc Author: Andrus Adamchik <and...@objectstyle.com> AuthorDate: Thu Jul 30 09:23:48 2020 +0300 confirming that disjoint-by-id prefetches work for SQLSelect --- .../access/DataContextDisjointByIdPrefetchIT.java | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetchIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetchIT.java index cede796..33b59d8 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetchIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetchIT.java @@ -22,6 +22,7 @@ import org.apache.cayenne.PersistenceState; import org.apache.cayenne.ValueHolder; import org.apache.cayenne.di.Inject; import org.apache.cayenne.query.ObjectSelect; +import org.apache.cayenne.query.SQLSelect; import org.apache.cayenne.query.SortOrder; import org.apache.cayenne.test.jdbc.DBHelper; import org.apache.cayenne.test.jdbc.TableHelper; @@ -139,6 +140,39 @@ public class DataContextDisjointByIdPrefetchIT extends ServerCase { } @Test + public void testOneToMany_SQLSelect() throws Exception { + createArtistWithTwoPaintingsDataSet(); + + List<Artist> result = SQLSelect.query(Artist.class, "SELECT " + + "#result('ARTIST_NAME' 'String'), " + + "#result('DATE_OF_BIRTH' 'java.util.Date'), " + + "#result('t0.ARTIST_ID' 'int' '' 'ARTIST_ID') " + + "FROM ARTIST t0") + .addPrefetch(Artist.PAINTING_ARRAY.disjointById()) + .select(context); + + queryInterceptor.runWithQueriesBlocked(() -> { + assertFalse(result.isEmpty()); + Artist b1 = result.get(0); + + @SuppressWarnings("unchecked") + List<Painting> toMany = (List<Painting>) b1.readPropertyDirectly(Artist.PAINTING_ARRAY.getName()); + assertNotNull(toMany); + assertFalse(((ValueHolder) toMany).isFault()); + assertEquals(2, toMany.size()); + + List<String> names = new ArrayList<>(); + for (Painting b : toMany) { + assertEquals(PersistenceState.COMMITTED, b.getPersistenceState()); + names.add(b.getPaintingTitle()); + } + + assertTrue(names.contains("Y1")); + assertTrue(names.contains("Y2")); + }); + } + + @Test public void testManyToOne() throws Exception { createArtistWithTwoPaintingsDataSet();