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/22 06:52:07 UTC

svn commit: r746640 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/...

Author: ppoddar
Date: Sun Feb 22 05:52:06 2009
New Revision: 746640

URL: http://svn.apache.org/viewvc?rev=746640&view=rev
Log:
OPENJPA-935: Detect table for embedded PC to avoid extra select before delete.

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestNonstandardMappingAnnotations.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/test/PersistenceTestCase.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java?rev=746640&r1=746639&r2=746640&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java Sun Feb 22 05:52:06 2009
@@ -582,7 +582,8 @@
      * returns INVALID. Also returns INVALID if field is dependent.
      */
     private Table getTable(FieldMapping fm, Table table) {
-        if (fm.getCascadeDelete() != ValueMetaData.CASCADE_NONE)
+        if (fm.getCascadeDelete() != ValueMetaData.CASCADE_NONE 
+            && !fm.isEmbeddedPC())
             return INVALID;
 
         Column[] columns = fm.getColumns();

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java?rev=746640&r1=746639&r2=746640&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java Sun Feb 22 05:52:06 2009
@@ -23,9 +23,10 @@
 import javax.persistence.EntityManager;
 import javax.persistence.EntityTransaction;
 
+import org.apache.openjpa.persistence.test.SQLListenerTestCase;
 import org.apache.openjpa.persistence.test.SingleEMFTestCase;
 
-public class TestEmbedded extends SingleEMFTestCase {
+public class TestEmbedded extends SQLListenerTestCase {
     public void setUp() {
         super.setUp(BaseEntity.class, Address.class, Geocode.class,
                 CLEAR_TABLES);
@@ -76,6 +77,47 @@
         
         assertEquals(a2.getGeocode().getLatitude(),1.0f);
     }
+    
+    public void testDeleteEmbeddedDoesNotSelectBeforeDelete() {
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+        String[] streets = {"S1", "S2", "S3"};
+        String[] cities = {"C1", "C2", "C3"};
+        String[] states = {"AB", "CD", "EF"};
+        int[] zips = {123456, 345678, 456789};
+        
+        for (int i = 0; i < streets.length; i++) {
+            Address a = new Address();
+            a.setStreetAddress(streets[i]);
+            a.setCity(cities[i]);
+            a.setState(states[i]);
+            a.setZip(zips[i]);
+            Geocode g = new Geocode();
+            g.setLatitude(i+1.0f);
+            g.setLongtitude(i+6.0f);
+            a.setGeocode(g);
+            em.persist(a);
+        } 
+        em.getTransaction().commit();
+        
+        em = emf.createEntityManager();
+        em.getTransaction().begin();
+        sql.clear();
+        int count = em.createQuery("DELETE FROM Address a WHERE a.zip=:zip")
+            .setParameter("zip", zips[0])
+            .executeUpdate();
+        assertEquals(1, count);
+        em.getTransaction().commit();
+        assertEquals(1, sql.size());
+        
+        em.getTransaction().begin();
+        sql.clear();
+        count = em.createQuery("DELETE FROM Address").executeUpdate();
+        assertEquals(streets.length-1, count);
+        assertTrue(count>1);
+        em.getTransaction().commit();
+        assertEquals(1, sql.size());
+    }
 
     private void persistAddress(Address address) {
         final EntityManager em = emf.createEntityManager();

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestNonstandardMappingAnnotations.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestNonstandardMappingAnnotations.java?rev=746640&r1=746639&r2=746640&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestNonstandardMappingAnnotations.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestNonstandardMappingAnnotations.java Sun Feb 22 05:52:06 2009
@@ -48,7 +48,7 @@
         setUp(NonstandardMappingEntity.class, ExtensionsEntity.class,
             NonstandardMappingMappedSuper.class, EmbedValue2.class,
             EmbedValue.class,
-            CLEAR_TABLES);
+            CLEAR_TABLES, RETAIN_DATA);
 
         // trigger complete resolution of metadata etc.
         emf.createEntityManager().close();

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/test/PersistenceTestCase.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/test/PersistenceTestCase.java?rev=746640&r1=746639&r2=746640&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/test/PersistenceTestCase.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/test/PersistenceTestCase.java Sun Feb 22 05:52:06 2009
@@ -61,6 +61,8 @@
     extends TestCase {
     private static FixedMap _emfs = new FixedMap();
     public static final String FRESH_EMF = "Creates new EntityManagerFactory";
+    public static final String RETAIN_DATA = "Retain data after test run";
+    private boolean retainDataOnTearDown; 
     /**
      * Marker object you pass to {@link #setUp} to indicate that the
      * database table rows should be cleared.
@@ -118,6 +120,10 @@
                 fresh = true;
                 continue;
             }
+            if (props[i] == RETAIN_DATA) {
+                retainDataOnTearDown= true;
+                continue;
+            }
             if (prop) {
                 map.put(props[i - 1], props[i]);
                 prop = false;
@@ -262,7 +268,8 @@
         // before issuing delete statements on a new entity manager.
         if (closeEMs)
             closeAllOpenEMs(emf);
-
+        if (retainDataOnTearDown)
+            return;
         EntityManager em = emf.createEntityManager();
         em.getTransaction().begin();
         for (ClassMetaData meta : types) {