You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2009/02/20 00:58:42 UTC

svn commit: r746060 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderQueryImpl.java openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/sqlcache/TestFinderCache.java

Author: ppoddar
Date: Thu Feb 19 23:58:42 2009
New Revision: 746060

URL: http://svn.apache.org/viewvc?rev=746060&view=rev
Log:
OPENJPA-924: Set JDBC query parameters with type information

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderQueryImpl.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/sqlcache/TestFinderCache.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderQueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderQueryImpl.java?rev=746060&r1=746059&r2=746060&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderQueryImpl.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/FinderQueryImpl.java Thu Feb 19 23:58:42 2009
@@ -26,6 +26,7 @@
 import org.apache.openjpa.jdbc.meta.ClassMapping;
 import org.apache.openjpa.jdbc.meta.Joinable;
 import org.apache.openjpa.jdbc.schema.Column;
+import org.apache.openjpa.jdbc.sql.DBDictionary;
 import org.apache.openjpa.jdbc.sql.LogicalUnion;
 import org.apache.openjpa.jdbc.sql.Result;
 import org.apache.openjpa.jdbc.sql.SQLBuffer;
@@ -131,18 +132,19 @@
     public Result execute(OpenJPAStateManager sm, StoreManager store, 
         FetchConfiguration fetch) {
         boolean forUpdate = false;
-        Connection conn = ((JDBCStore)store).getConnection();
+        JDBCStore jstore = (JDBCStore)store;
+        Connection conn = jstore.getConnection();
+        DBDictionary dict = jstore.getDBDictionary();
         PreparedStatement stmnt = null;
         ResultSet rs = null;
         try {
             stmnt = conn.prepareStatement(_sql);
-            Object[] params = getPKValues(sm, (JDBCStore)store);
-            int i = 0;
-            for (Object o : params) {
-                stmnt.setObject(++i, o);
+            Object[] params = getPKValues(sm, jstore);
+            for (int i = 0; i <params.length; i++) {
+                dict.setUnknown(stmnt, i+1, params[i], _pkCols[i]);
             }
             rs = stmnt.executeQuery();
-            return _select.getEagerResult(conn, stmnt, rs, (JDBCStore)store, 
+            return _select.getEagerResult(conn, stmnt, rs, jstore, 
                 (JDBCFetchConfiguration)fetch, forUpdate, _buffer);
         } catch (SQLException se) {
             if (stmnt != null)

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/sqlcache/TestFinderCache.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/sqlcache/TestFinderCache.java?rev=746060&r1=746059&r2=746060&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/sqlcache/TestFinderCache.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/sqlcache/TestFinderCache.java Thu Feb 19 23:58:42 2009
@@ -27,6 +27,7 @@
 import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
 import org.apache.openjpa.kernel.FinderCache;
 import org.apache.openjpa.persistence.OpenJPAPersistence;
+import org.apache.openjpa.persistence.test.SQLListenerTestCase;
 import org.apache.openjpa.persistence.test.SingleEMFTestCase;
 
 /**
@@ -35,7 +36,7 @@
  * @author Pinaki Poddar
  *
  */
-public class TestFinderCache extends SingleEMFTestCase {
+public class TestFinderCache extends SQLListenerTestCase {
     public static final long[] BOOK_IDS = {1000, 2000, 3000};
     public static final String[] BOOK_NAMES = {"Argumentative Indian", "Tin Drum", "Blink"};
     public static final long[] CD_IDS = {1001, 2001, 3001};
@@ -87,6 +88,20 @@
         System.err.println("delta   " + (pct > 0 ? "+" : "") + pct + "%");
     }
     
+    public void testSQLEventListener() {
+        EntityManager em = emf.createEntityManager();
+        int N = 3;
+        sql.clear();
+        for (int i = 0; i < N; i++) {
+            em.clear();
+            for (long id : BOOK_IDS) {
+                Book pc = em.find(Book.class, id);
+                assertNotNull(pc);
+            }
+        }
+        assertEquals(BOOK_IDS.length*N, sql.size());
+    }
+    
     /**
      * Run a finder query for each identifiers N times and report the median
      * execution time.