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