Author: tomdz
Date: Wed Sep 12 22:45:52 2007
New Revision: 575177

URL: http://svn.apache.org/viewvc?rev=575177&view=rev
Log:
Added support for handling platforms that don't support setDefault actions for 
onUpdate/onDelete

Modified:
    db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformInfo.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java
    db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestConstraints.java

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformInfo.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformInfo.java?rev=575177&r1=575176&r2=575177&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformInfo.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformInfo.java Wed Sep 12 
22:45:52 2007
@@ -56,6 +56,9 @@
     /** Whether embedded foreign key constraints are explicitly named. */
     private boolean _embeddedForeignKeysNamed = false;
 
+    /** Whether the set-default action is supportd for onDelete/onUpdate in a 
foreign key. */
+    private boolean _setDefaultActionSupported = true;
+
     /** Whether non-unique indices are supported. */
     private boolean _indicesSupported = true;
 
@@ -284,6 +287,28 @@
     public void setEmbeddedForeignKeysNamed(boolean embeddedForeignKeysNamed)
     {
         _embeddedForeignKeysNamed = embeddedForeignKeysNamed;
+    }
+
+    /**
+     * Determines whether the set-default action is supported for 
onUpdate/onDelete
+     * in foreign keys.
+     *
+     * @return <code>true</code> if set-default is supported
+     */
+    public boolean isSetDefaultActionSupported()
+    {
+        return _setDefaultActionSupported;
+    }
+
+    /**
+     * Specifies whether the set-default action is supported for 
onUpdate/onDelete
+     * in foreign keys.
+     *
+     * @param setDefaultActionSupported <code>true</code> if set-default is 
supported
+     */
+    public void setSetDefaultActionSupported(boolean setDefaultActionSupported)
+    {
+        _setDefaultActionSupported = setDefaultActionSupported;
     }
 
     /**

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java?rev=575177&r1=575176&r2=575177&view=diff
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java
 (original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java
 Wed Sep 12 22:45:52 2007
@@ -51,6 +51,7 @@
     public DerbyPlatform()
     {
         super();
+        getPlatformInfo().setSetDefaultActionSupported(false);
         getPlatformInfo().addNativeTypeMapping(Types.DOUBLE, "DOUBLE");
         getPlatformInfo().addNativeTypeMapping(Types.FLOAT,  "DOUBLE", 
Types.DOUBLE);
         setSqlBuilder(new DerbyBuilder(this));

Modified: db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestConstraints.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestConstraints.java?rev=575177&r1=575176&r2=575177&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestConstraints.java 
(original)
+++ db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestConstraints.java Wed 
Sep 12 22:45:52 2007
@@ -509,7 +509,7 @@
     }
 
     /**
-     * Tests two tables with a foreign key with a cascade onDelete action. 
+     * Tests two tables with a foreign key with a set-null onDelete action. 
      */
     public void testForeignKeyWithOnDeleteSetNull()
     {
@@ -551,5 +551,53 @@
         assertEquals(1, beansTable2.size());
         assertEquals(new Integer(5), beansTable2.get(0), "pk");
         assertEquals((Object)null, beansTable2.get(0), "avalue");
+    }
+
+    /**
+     * Tests two tables with a foreign key with a det-default onDelete action. 
+     */
+    public void testForeignKeyWithOnDeleteSetDefault()
+    {
+        if (getPlatformInfo().isSetDefaultActionSupported())
+        {
+            final String modelXml = 
+                "<?xml version='1.0' encoding='ISO-8859-1'?>\n"+
+                "<database name='roundtriptest'>\n"+
+                "  <table name='roundtrip_1'>\n"+
+                "    <column name='pk' type='INTEGER' primaryKey='true' 
required='true'/>\n"+
+                "  </table>\n"+
+                "  <table name='roundtrip_2'>\n"+
+                "    <column name='pk' type='INTEGER' primaryKey='true' 
required='true'/>\n"+
+                "    <column name='avalue' type='INTEGER' required='false' 
default='0'/>\n"+
+                "    <foreign-key foreignTable='roundtrip_1' 
onDelete='setdefault'>\n"+
+                "      <reference local='avalue' foreign='pk'/>\n"+
+                "    </foreign-key>\n"+
+                "  </table>\n"+
+                "</database>";
+    
+            performConstraintsTest(modelXml, true);
+    
+            insertRow("roundtrip_1", new Object[] { new Integer(1) });
+            insertRow("roundtrip_2", new Object[] { new Integer(5), new 
Integer(1) });
+    
+            List beansTable1 = getRows("roundtrip_1");
+            List beansTable2 = getRows("roundtrip_2");
+    
+            assertEquals(1, beansTable1.size());
+            assertEquals(1, beansTable2.size());
+            assertEquals(new Integer(1), beansTable1.get(0), "pk");
+            assertEquals(new Integer(5), beansTable2.get(0), "pk");
+            assertEquals(new Integer(1), beansTable2.get(0), "avalue");
+    
+            deleteRow("roundtrip_1", new Object[] { new Integer(1) });
+    
+            beansTable1 = getRows("roundtrip_1");
+            beansTable2 = getRows("roundtrip_2");
+    
+            assertEquals(0, beansTable1.size());
+            assertEquals(1, beansTable2.size());
+            assertEquals(new Integer(5), beansTable2.get(0), "pk");
+            assertEquals(new Integer(0), beansTable2.get(0), "avalue");
+        }
     }
 }


Reply via email to