You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by wi...@apache.org on 2007/04/19 23:33:25 UTC

svn commit: r530554 - in /incubator/openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/

Author: wisneskid
Date: Thu Apr 19 14:33:23 2007
New Revision: 530554

URL: http://svn.apache.org/viewvc?view=rev&rev=530554
Log:
OPENJPA-222 testcases for DB2

Modified:
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java
    incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/TestIsolationLevelOverride.java
    incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/TestSelectForUpdateOverride.java

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java?view=diff&rev=530554&r1=530553&r2=530554
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java Thu Apr 19 14:33:23 2007
@@ -252,37 +252,31 @@
                     if (isolationLevel ==
                         Connection.TRANSACTION_READ_UNCOMMITTED) {
                         forUpdateString.append(" ").append(withRSClause)
-                            .append(" ").append(forUpdateOfClause).append(" ");
-                    } else {
-                        forUpdateString.append(" ").append(forUpdateOfClause)
-                           .append(" ");
-                    }
+                            .append(" ").append(forUpdateOfClause);
+                    } else
+                        forUpdateString.append(" ").append(forUpdateOfClause);
                     break;
                 case db2ZOSV8xOrLater:
                 case db2UDBV82AndLater:
                     if (isolationLevel == Connection.TRANSACTION_SERIALIZABLE) {
                         forUpdateString.append(" ").append(forReadOnlyClause)
                             .append(" ").append(withRRClause)
-                            .append(" ").append(useKeepUpdateLockClause)
-                            .append(" ");
+                            .append(" ").append(useKeepUpdateLockClause);   
                     } else {
                         forUpdateString.append(" ").append(forReadOnlyClause)
                             .append(" ").append(withRSClause)
-                            .append(" ").append(useKeepUpdateLockClause)
-                            .append(" ");
+                            .append(" ").append(useKeepUpdateLockClause);                            
                     }
                     break;
                 case db2ISeriesV5R4AndLater:
                     if (isolationLevel == Connection.TRANSACTION_SERIALIZABLE) {
                         forUpdateString.append(" ").append(forReadOnlyClause)
                             .append(" ").append(withRRClause)
-                            .append(" ").append(useKeepExclusiveLockClause)
-                            .append(" ");
+                            .append(" ").append(useKeepExclusiveLockClause);       
                     } else {
                         forUpdateString.append(" ").append(forReadOnlyClause)
                             .append(" ").append(withRSClause)
-                            .append(" ").append(useKeepExclusiveLockClause)
-                            .append(" ");
+                            .append(" ").append(useKeepExclusiveLockClause);
                     }
                     break;
                 }
@@ -413,4 +407,8 @@
             return sqle.getMessage();
         }
     }
-   }
+
+    public int getDb2ServerType() {
+        return db2ServerType;
+    }
+}

Modified: incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/TestIsolationLevelOverride.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/TestIsolationLevelOverride.java?view=diff&rev=530554&r1=530553&r2=530554
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/TestIsolationLevelOverride.java (original)
+++ incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/TestIsolationLevelOverride.java Thu Apr 19 14:33:23 2007
@@ -82,18 +82,89 @@
                         .getIsolation());
 
                 q.getResultList();
+                if (dict instanceof DB2Dictionary &&(((DB2Dictionary)dict).
+                    getDb2ServerType() == 1) || ((DB2Dictionary)dict)
+                        .getDb2ServerType()== 2) {
+                    assertEquals(1, sql.size());
+                    assertSQL("SELECT t0.id, t0.booleanField, t0.byteField,"
+                        + " t0.charField, t0.dateField, t0.doubleField,"
+                        + " t0.floatField, t0.intField, t0.longField, "
+                        + "t0.shortField, t0.stringField FROM "
+                        + "AllFieldTypes t0 WHERE \\(t0.intField = \\?\\) "
+                        + " FOR UPDATE OF");
+                }
+
+                // it is DB2 v82 or later
+                else if (dict instanceof DB2Dictionary &&(((DB2Dictionary)dict).
+                    getDb2ServerType() == 3) || ((DB2Dictionary)dict)
+                        .getDb2ServerType() == 4) {
+                    assertEquals(1, sql.size());
+                    assertSQL("SELECT t0.id, t0.booleanField, t0.byteField,"
+                        + " t0.charField, t0.dateField, t0.doubleField,"
+                        + " t0.floatField, t0.intField, t0.longField, "
+                        + "t0.shortField, t0.stringField FROM "
+                        + "AllFieldTypes t0 WHERE \\(t0.intField = \\?\\) "
+                        + " FOR READ ONLY WITH RR USE AND KEEP UPDATE LOCKS");
+                }
+
+                else if (dict instanceof DB2Dictionary && ((DB2Dictionary)dict).
+                    getDb2ServerType() == 5){
+                    assertEquals(1, sql.size());
+                    assertSQL("SELECT t0.id, t0.booleanField, t0.byteField,"
+                        + " t0.charField, t0.dateField, t0.doubleField,"
+                        + " t0.floatField, t0.intField, t0.longField, "
+                        + "t0.shortField, t0.stringField FROM "
+                        + "AllFieldTypes t0 WHERE \\(t0.intField = \\?\\) "
+                        + " FOR READ ONLY WITH RR USE AND KEEP EXCLUSIVE " 
+                        + "LOCKS");
+                }    
+                else {
+                    fail("OpenJPA currently only supports per-query isolation " 
+                    + "level configuration on the following databases: DB2");
+                }
             } else {
                 ((JDBCFetchPlan) em.getFetchPlan())
                     .setIsolation(IsolationLevel.SERIALIZABLE);
                 em.find(AllFieldTypes.class, 0);
-            }
-
-            if (dict instanceof DB2Dictionary) {
-                assertEquals(1, sql.size());
-                assertSQL(".*DB2-specific SQL to test for goes here.*");
-            } else {
-                fail("OpenJPA currently only supports per-query isolation " +
-                    "level configuration on the following databases: DB2");
+                if (dict instanceof DB2Dictionary &&(((DB2Dictionary)dict).
+                    getDb2ServerType() == 1) || ((DB2Dictionary)dict)
+                        .getDb2ServerType()== 2) {
+                    assertEquals(1, sql.size());
+                    assertSQL("SELECT t0.booleanField, t0.byteField, "
+                        + "t0.charField, t0.dateField, t0.doubleField,"
+                        + " t0.floatField, t0.intField, t0.longField,"
+                        + " t0.shortField, t0.stringField FROM "
+                        + "AllFieldTypes t0 WHERE t0.id = \\? "
+                        + " FOR UPDATE OF optimize for 1 row");
+                }
+                // it is DB2 v82 or later
+                else if (dict instanceof DB2Dictionary &&(((DB2Dictionary)dict).
+                    getDb2ServerType() == 3) || ((DB2Dictionary)dict)
+                        .getDb2ServerType() == 4) {
+                    assertEquals(1, sql.size());
+                    assertSQL("SELECT t0.booleanField, t0.byteField, "
+                        + "t0.charField, t0.dateField, t0.doubleField,"
+                        + " t0.floatField, t0.intField, t0.longField,"
+                        + " t0.shortField, t0.stringField FROM "
+                        + "AllFieldTypes t0 WHERE t0.id = \\? "
+                        + " FOR READ ONLY WITH RR USE AND KEEP UPDATE LOCKS" 
+                        + " optimize for 1 row");
+                }
+                else if (dict instanceof DB2Dictionary && ((DB2Dictionary)dict).
+                    getDb2ServerType() == 5) {
+                    assertEquals(1, sql.size());
+                    assertSQL("SELECT t0.booleanField, t0.byteField, "
+                        + "t0.charField, t0.dateField, t0.doubleField,"
+                        + " t0.floatField, t0.intField, t0.longField,"
+                        + " t0.shortField, t0.stringField FROM "
+                        + "AllFieldTypes t0 WHERE t0.id = \\? "
+                        + " FOR READ ONLY WITH RR USE AND KEEP EXCLUSIVE LOCKS"
+                        + " optimize for 1 row");
+                }    
+                else {
+                    fail("OpenJPA currently only supports per-query isolation " 
+                    + "level configuration on the following databases: DB2");
+                }
             }
         } catch (InvalidStateException pe) {
             // if we're not using DB2, we expect an InvalidStateException.

Modified: incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/TestSelectForUpdateOverride.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/TestSelectForUpdateOverride.java?view=diff&rev=530554&r1=530553&r2=530554
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/TestSelectForUpdateOverride.java (original)
+++ incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/TestSelectForUpdateOverride.java Thu Apr 19 14:33:23 2007
@@ -26,6 +26,7 @@
 import org.apache.openjpa.persistence.OpenJPAPersistence;
 import org.apache.openjpa.persistence.FetchPlan;
 import org.apache.openjpa.persistence.OpenJPAEntityManager;
+import org.apache.openjpa.jdbc.sql.DB2Dictionary;
 import org.apache.openjpa.jdbc.sql.DBDictionary;
 import org.apache.openjpa.jdbc.sql.HSQLDictionary;
 import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
@@ -58,7 +59,45 @@
             em.find(AllFieldTypes.class, 0);
 
             assertEquals(1, sql.size());
-            assertSQL(".*FOR UPDATE.*");
+            if (dict instanceof DB2Dictionary &&(((DB2Dictionary)dict).
+                getDb2ServerType() == 1) || ((DB2Dictionary)dict)
+                    .getDb2ServerType()== 2) {
+                assertEquals(1, sql.size());
+                assertSQL("SELECT t0.booleanField, t0.byteField, "
+                    + "t0.charField, t0.dateField, t0.doubleField,"
+                    + " t0.floatField, t0.intField, t0.longField,"
+                    + " t0.shortField, t0.stringField FROM "
+                    + "AllFieldTypes t0 WHERE t0.id = \\? "
+                    + " FOR UPDATE OF optimize for 1 row");
+            }
+            // it is DB2 v82 or later
+            else if (dict instanceof DB2Dictionary &&(((DB2Dictionary)dict).
+                getDb2ServerType() == 3) || ((DB2Dictionary)dict)
+                    .getDb2ServerType() == 4) {
+                assertEquals(1, sql.size());
+                assertSQL("SELECT t0.booleanField, t0.byteField, "
+                    + "t0.charField, t0.dateField, t0.doubleField,"
+                    + " t0.floatField, t0.intField, t0.longField,"
+                    + " t0.shortField, t0.stringField FROM "
+                    + "AllFieldTypes t0 WHERE t0.id = \\? "
+                    + " FOR READ ONLY WITH RS USE AND KEEP UPDATE LOCKS" 
+                    + " optimize for 1 row");
+            }
+            else if (dict instanceof DB2Dictionary && ((DB2Dictionary)dict).
+                getDb2ServerType() == 5) {
+                assertEquals(1, sql.size());
+                assertSQL("SELECT t0.booleanField, t0.byteField, "
+                    + "t0.charField, t0.dateField, t0.doubleField,"
+                    + " t0.floatField, t0.intField, t0.longField,"
+                    + " t0.shortField, t0.stringField FROM "
+                    + "AllFieldTypes t0 WHERE t0.id = \\? "
+                    + " FOR READ ONLY WITH RS USE AND KEEP EXCLUSIVE LOCKS"
+                    + " optimize for 1 row");
+            }    
+            else {
+                fail("OpenJPA currently only supports per-query isolation " +
+                "level configuration on the following databases: DB2");
+            }
         } finally {
             em.getTransaction().rollback();
             em.close();