This is an automated email from the ASF dual-hosted git repository. aadamchik pushed a commit to branch STABLE-4.1 in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit cc85f9c313b173ba951cc44388a6faa2f60eb171 Author: Andrus Adamchik <and...@objectstyle.com> AuthorDate: Thu Jul 30 09:26:30 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 2dd4c15..e75f029 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 @@ -21,6 +21,7 @@ package org.apache.cayenne.access; import org.apache.cayenne.PersistenceState; import org.apache.cayenne.ValueHolder; import org.apache.cayenne.di.Inject; +import org.apache.cayenne.query.SQLSelect; import org.apache.cayenne.query.SelectQuery; import org.apache.cayenne.query.SortOrder; import org.apache.cayenne.test.jdbc.DBHelper; @@ -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();