You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2010/01/23 11:21:30 UTC

svn commit: r902372 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test: java/org/apache/cayenne/access/DataContextEJBQLFetchJoinTest.java resources/dml/access.DataContextEJBQLFetchJoinTest.xml

Author: aadamchik
Date: Sat Jan 23 10:21:29 2010
New Revision: 902372

URL: http://svn.apache.org/viewvc?rev=902372&view=rev
Log:
CAY-1366 EJBQL: Support for fetch joins

    patch by Ksenia Khailenko - fixing date handling in unit tests

Removed:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextEJBQLFetchJoinTest.xml
Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLFetchJoinTest.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLFetchJoinTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLFetchJoinTest.java?rev=902372&r1=902371&r2=902372&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLFetchJoinTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLFetchJoinTest.java Sat Jan 23 10:21:29 2010
@@ -18,6 +18,11 @@
  ****************************************************************/
 package org.apache.cayenne.access;
 
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.Date;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -32,14 +37,70 @@
 import org.apache.cayenne.unit.CayenneCase;
 
 public class DataContextEJBQLFetchJoinTest extends CayenneCase {
+    public static final String INSERT_ARTIST = "INSERT INTO ARTIST (ARTIST_ID, ARTIST_NAME) VALUES (?,?)";
+    public static final String INSERT_PAINTING = "INSERT INTO PAINTING (PAINTING_ID, PAINTING_TITLE, ARTIST_ID, ESTIMATED_PRICE) VALUES (?, ?, ?, ?)";
+    public static final String INSERT_GALLERY = "INSERT INTO GALLERY (GALLERY_ID, GALLERY_NAME) VALUES (?,?)";
+    public static final String INSERT_EXIBIT = "INSERT INTO EXHIBIT (EXHIBIT_ID, GALLERY_ID, CLOSING_DATE, OPENING_DATE) VALUES (?, ?, ?, ?)";
+    public static final String INSERT_ARTIST_EXIBIT = "INSERT INTO ARTIST_EXHIBIT (ARTIST_ID, EXHIBIT_ID) VALUES (?, ?)";
 
+    Connection conn; 
     @Override
     protected void setUp() throws Exception {
         deleteTestData();
     }
 
+    private void populateTables(TestData data) throws Exception {
+                
+        Object[][] artistsData = {
+                {1, "A1"},
+                {2, "A2"},
+                {3, "A3"}
+        };
+        Object[][] paintingsData = {
+                {1, "P11", 1, new BigDecimal(3000d)},
+                {2, "P2", 2, new BigDecimal(5000d)},
+                {3, "P12", 1, new BigDecimal(3000d)}
+        };
+        Object[][] galleriesData = {
+                {1, "gallery1"},
+                {2, "gallery2"}
+        };
+        Object[][] exibitsData = {
+                {1, 1, new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 1), new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 2)},
+                {2, 1, new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 3), new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 4)}
+        };
+        Object[][] artistExibitsData = {
+                {1, 1},
+                {1, 2}
+        };
+        conn = getConnection();
+        try {
+            conn.setAutoCommit(false);
+
+            switch (data) {
+                case ONE_ENTITY_FETCH_JOIN:
+                    insertArtists(artistsData);
+                    insertPaintings(paintingsData);
+                    break;
+                case SEVERAL_FETCH_JOINS:
+                    insertArtists(artistsData);
+                    insertPaintings(paintingsData);
+                    insertGalleries(galleriesData);
+                    insertExibits(exibitsData);
+                    insertArtistExibits(artistExibitsData);
+                    break;
+            }
+
+        }
+        finally {
+            conn.close();
+        }
+
+    }
+
+    
     public void testFetchJoinForOneEntity() throws Exception {
-        createTestData("testOneEntityFetchJoin");
+        populateTables(TestData.ONE_ENTITY_FETCH_JOIN);
         String ejbql = "SELECT a FROM Artist a JOIN FETCH a.paintingArray ";
 
         EJBQLQuery query = new EJBQLQuery(ejbql);
@@ -75,7 +136,7 @@
     }
 
     public void testSeveralFetchJoins() throws Exception {
-        createTestData("testSeveralFetchJoins");
+        populateTables(TestData.SEVERAL_FETCH_JOINS);
         String ejbql = "SELECT a "
                 + "FROM Artist a JOIN FETCH a.paintingArray JOIN FETCH a.artistExhibitArray "
                 + "WHERE a.artistName = 'A1'";
@@ -132,7 +193,7 @@
     }
 
     public void testSeveralEntitiesFetchJoins() throws Exception {
-        createTestData("testSeveralFetchJoins");
+        populateTables(TestData.SEVERAL_FETCH_JOINS);
         String ejbql = "SELECT DISTINCT a , g "
                 + "FROM Artist a JOIN FETCH a.paintingArray , Gallery g JOIN FETCH g.exhibitArray "
                 + "WHERE a.artistName='A1' AND g.galleryName='gallery1'";
@@ -155,7 +216,7 @@
     }
 
     public void testSeveralEntitiesAndScalarFetchInnerJoins() throws Exception {
-        createTestData("testSeveralFetchJoins");
+        populateTables(TestData.SEVERAL_FETCH_JOINS);
         String ejbql = "SELECT DISTINCT a, a.artistName , g "
                 + "FROM Artist a JOIN FETCH a.paintingArray, Gallery g JOIN FETCH g.exhibitArray "
                 + "ORDER BY a.artistName";
@@ -235,7 +296,7 @@
     }
 
     public void testSeveralEntitiesAndScalarFetchOuterJoins() throws Exception {
-        createTestData("testSeveralFetchJoins");
+        populateTables(TestData.SEVERAL_FETCH_JOINS);
         String ejbql = "SELECT DISTINCT a, a.artistName , g "
                 + "FROM Artist a LEFT JOIN FETCH a.paintingArray, Gallery g LEFT JOIN FETCH g.exhibitArray "
                 + "ORDER BY a.artistName";
@@ -344,19 +405,61 @@
         }
     }
 
-    public void testFlattenedFetchJoins() throws Exception {
-        createTestData("testSeveralFetchJoins");
-        String ejbql = "SELECT a "
-                + "FROM Artist a JOIN FETCH a.paintingArray.toPaintingInfo";
-
-        EJBQLQuery query = new EJBQLQuery(ejbql);
-
-        DataContext context = createDataContext();
+    private void insertArtists(Object[][] artistsData) throws SQLException {
+        PreparedStatement stmt = conn.prepareStatement(INSERT_ARTIST);
+        for (int i = 0; i < artistsData.length; i++) {
+            stmt.setInt(1, (Integer)artistsData[i][0]);
+            stmt.setString(2, (String) artistsData[i][1]);
+            stmt.executeUpdate();
+        }
+        stmt.close();
+    }
 
-        // TODO fails because of error translating of chain join relationship
-        /*
-         * List objects = context.performQuery(query); blockQueries(); try { } finally {
-         * unblockQueries(); }
-         */
+    private void insertPaintings(Object[][] paintingsData) throws SQLException {
+        PreparedStatement stmt = conn.prepareStatement(INSERT_PAINTING);
+        for (int i = 0; i < paintingsData.length; i++) {
+            stmt.setInt(1, (Integer)paintingsData[i][0]);
+            stmt.setString(2, (String) paintingsData[i][1]);
+            stmt.setInt(3, (Integer)paintingsData[i][2]);
+            stmt.setBigDecimal(4, (BigDecimal) paintingsData[i][3]);
+            stmt.executeUpdate();
+        }
+        stmt.close();
+    }
+    
+    private void insertGalleries(Object[][] galleriesData) throws SQLException {
+        PreparedStatement stmt = conn.prepareStatement(INSERT_GALLERY);
+        for (int i = 0; i < galleriesData.length; i++) {
+            stmt.setInt(1, (Integer)galleriesData[i][0]);
+            stmt.setString(2, (String) galleriesData[i][1]);
+            stmt.executeUpdate();
+        }
+        stmt.close();
+    }
+    
+    private void insertExibits(Object[][] exibitsData) throws SQLException {
+        PreparedStatement stmt = conn.prepareStatement(INSERT_EXIBIT);
+        for (int i = 0; i < exibitsData.length; i++) {
+            stmt.setInt(1, (Integer)exibitsData[i][0]);
+            stmt.setInt(2, (Integer) exibitsData[i][1]);
+            stmt.setDate(3, (Date)exibitsData[i][2]);
+            stmt.setDate(4, (Date)exibitsData[i][3]);
+            stmt.executeUpdate();
+        }
+        stmt.close();
+    }
+    
+    private void insertArtistExibits(Object[][] artistExibitsData) throws SQLException {
+        PreparedStatement stmt = conn.prepareStatement(INSERT_ARTIST_EXIBIT);
+        for (int i = 0; i < artistExibitsData.length; i++) {
+            stmt.setInt(1, (Integer)artistExibitsData[i][0]);
+            stmt.setInt(2, (Integer) artistExibitsData[i][1]);
+            stmt.executeUpdate();
+        }
+        stmt.close();
+    }
+    
+    enum TestData{
+        ONE_ENTITY_FETCH_JOIN, SEVERAL_FETCH_JOINS
     }
 }