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();
 

Reply via email to