OPENJPA-1147: Remove isTargetPlatform calls from TestAutoIncrement, add sequence creation statement

git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@790645 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Milosz Tylenda 2009-07-02 16:20:30 +00:00
parent 0ce16aef5f
commit 6473b9820a
1 changed files with 30 additions and 13 deletions

View File

@ -19,19 +19,23 @@
package org.apache.openjpa.persistence.jdbc.oracle; package org.apache.openjpa.persistence.jdbc.oracle;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
import org.apache.openjpa.persistence.test.DatabasePlatform; import org.apache.openjpa.persistence.test.DatabasePlatform;
import org.apache.openjpa.persistence.test.SingleEMFTestCase; import org.apache.openjpa.persistence.test.SingleEMFTestCase;
/** /**
* Tests identity value assignment with IDENTITY strategy specifically for * Tests identity value assignment with IDENTITY strategy specifically for
* Oracle database. IDENTITY strategy for most database platform is supported * Oracle database. IDENTITY strategy for most database platforms is supported
* with auto-increment capabilities. As Oracle does not natively support * with auto-increment capabilities. As Oracle does not natively support
* auto-increment, the same effect is achieved by a combination of a database * auto-increment, the same effect is achieved by a combination of a database
* sequence and a pre-insert database trigger [1]. * sequence and a pre-insert database trigger [1].
* *
* This test verifies that a persistence entity using IDENTITY generation type * This test verifies that a persistent entity using IDENTITY generation type
* is allocated identities in monotonic sequence on Oracle platform. * is allocating identities in monotonic sequence on Oracle platform.
* *
* [1] http://jen.fluxcapacitor.net/geek/autoincr.html * [1] http://jen.fluxcapacitor.net/geek/autoincr.html
* *
@ -41,14 +45,14 @@ import org.apache.openjpa.persistence.test.SingleEMFTestCase;
@DatabasePlatform("oracle.jdbc.driver.OracleDriver") @DatabasePlatform("oracle.jdbc.driver.OracleDriver")
public class TestAutoIncrement extends SingleEMFTestCase { public class TestAutoIncrement extends SingleEMFTestCase {
private static String PLATFORM = "oracle";
public void setUp() throws Exception { public void setUp() throws Exception {
if ("testAutoIncrementIdentityWithNamedSequence".equals(getName())) { if ("testAutoIncrementIdentityWithNamedSequence".equals(getName())) {
String sequence = "autoIncrementSequence";
createSequence(sequence);
super.setUp(CLEAR_TABLES, PObject.class, super.setUp(CLEAR_TABLES, PObject.class,
"openjpa.jdbc.DBDictionary", "openjpa.jdbc.DBDictionary",
"oracle(UseTriggersForAutoAssign=true," + "oracle(UseTriggersForAutoAssign=true,autoAssignSequenceName=" + sequence + ")");
"autoAssignSequenceName=autoIncrementSequence)");
} else { } else {
super.setUp(CLEAR_TABLES, PObjectNative.class, super.setUp(CLEAR_TABLES, PObjectNative.class,
"openjpa.jdbc.DBDictionary", "openjpa.jdbc.DBDictionary",
@ -56,10 +60,7 @@ public class TestAutoIncrement extends SingleEMFTestCase {
} }
} }
public void testAutoIncrementIdentityWithNamedSequence() { public void testAutoIncrementIdentityWithNamedSequence() {
if (!isTargetPlatform(PLATFORM))
return;
EntityManager em = emf.createEntityManager(); EntityManager em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();
PObject pc1 = new PObject(); PObject pc1 = new PObject();
@ -72,9 +73,6 @@ public class TestAutoIncrement extends SingleEMFTestCase {
} }
public void testAutoIncrementIdentityWithNativeSequence() { public void testAutoIncrementIdentityWithNativeSequence() {
if (!isTargetPlatform(PLATFORM))
return;
EntityManager em = emf.createEntityManager(); EntityManager em = emf.createEntityManager();
em.getTransaction().begin(); em.getTransaction().begin();
PObjectNative pc1 = new PObjectNative(); PObjectNative pc1 = new PObjectNative();
@ -85,4 +83,23 @@ public class TestAutoIncrement extends SingleEMFTestCase {
assertEquals(1, Math.abs(pc1.getId() - pc2.getId())); assertEquals(1, Math.abs(pc1.getId() - pc2.getId()));
} }
/**
* Create sequence so that the test does not require manual intervention in database.
*/
private void createSequence(String sequence) {
OpenJPAEntityManagerFactorySPI factorySPI = createEMF();
OpenJPAEntityManagerSPI em = factorySPI.createEntityManager();
try {
em.getTransaction().begin();
Query q = em.createNativeQuery("CREATE SEQUENCE " + sequence + " START WITH 1");
q.executeUpdate();
em.getTransaction().commit();
} catch (PersistenceException e) {
// Sequence probably exists.
em.getTransaction().rollback();
}
closeEMF(factorySPI);
}
} }