You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2009/12/11 22:32:26 UTC

svn commit: r889822 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/sql/execute/ testing/org/apache/derbyTesting/functionTests/tests/lang/

Author: rhillegas
Date: Fri Dec 11 21:32:26 2009
New Revision: 889822

URL: http://svn.apache.org/viewvc?rev=889822&view=rev
Log:
DERBY-651: Wire UDT dependency dropping logic into DROP TABLE.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateTableConstantAction.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DDLConstantAction.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropTableConstantAction.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/UDTTest.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java?rev=889822&r1=889821&r2=889822&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java Fri Dec 11 21:32:26 2009
@@ -511,7 +511,7 @@
 		}
 
         // adjust dependencies on user defined types
-        adjustUDTDependencies( lcc, dd, td, columnInfo );
+        adjustUDTDependencies( lcc, dd, td, columnInfo, false );
 
 		/* Create/Drop any constraints */
 		if (constraintActions != null)

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateTableConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateTableConstantAction.java?rev=889822&r1=889821&r2=889822&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateTableConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateTableConstantAction.java Fri Dec 11 21:32:26 2009
@@ -370,7 +370,7 @@
         //
         // The table itself can depend on the user defined types of its columns.
         //
-        adjustUDTDependencies( lcc, dd, td, columnInfo );
+        adjustUDTDependencies( lcc, dd, td, columnInfo, false );
         
 		if ( tableType == TableDescriptor.GLOBAL_TEMPORARY_TABLE_TYPE )
 		{

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DDLConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DDLConstantAction.java?rev=889822&r1=889821&r2=889822&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DDLConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DDLConstantAction.java Fri Dec 11 21:32:26 2009
@@ -820,17 +820,18 @@
     protected   void    adjustUDTDependencies
         (
          LanguageConnectionContext  lcc,
-         DataDictionary     dd,
-         TableDescriptor    td,
-         ColumnInfo[]        columnInfos
+         DataDictionary             dd,
+         TableDescriptor            td,
+         ColumnInfo[]               columnInfos,
+         boolean                    dropWholeTable
          )
         throws StandardException
     {
-        if ( columnInfos == null ) { return; }
+        if ( (!dropWholeTable) && (columnInfos == null) ) { return; }
 
 		TransactionController tc = lcc.getTransactionExecute();
 
-        int changedColumnCount = columnInfos.length;
+        int changedColumnCount = columnInfos == null ? 0 : columnInfos.length;
         HashMap addUdtMap = new HashMap();
         HashMap dropUdtMap = new HashMap();
         HashSet addColumnNames = new HashSet();
@@ -864,8 +865,9 @@
             }
         }
 
-        // nothing to do if there are no columns of udt type
-        if ( (addUdtMap.size() == 0) && (dropUdtMap.size() == 0) ) { return; }
+        // nothing to do if there are no changed columns of udt type
+        // and this is not a DROP TABLE command
+        if ( (!dropWholeTable) && (addUdtMap.size() == 0) && (dropUdtMap.size() == 0) ) { return; }
 
         //
         // Now prune from the add list all udt descriptors for which we already have dependencies.
@@ -894,10 +896,13 @@
 
             String key = ad.getObjectID().toString();
 
-            // ha, it is a UDT. remove the UDT from the list of dependencies to
-            // add and drop
-            if ( addUdtMap.get( key ) != null ) { addUdtMap.remove( key ); }
-            if ( dropUdtMap.get( key ) != null ) { dropUdtMap.remove( key ); }
+            // ha, it is a UDT.
+            if ( dropWholeTable ) { dropUdtMap.put( key, ad ); }
+            else
+            {
+                if ( addUdtMap.get( key ) != null ) { addUdtMap.remove( key ); }
+                if ( dropUdtMap.get( key ) != null ) { dropUdtMap.remove( key ); }
+            }
         }
 
         // again, nothing to do if there are no columns of udt type

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropTableConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropTableConstantAction.java?rev=889822&r1=889821&r2=889822&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropTableConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DropTableConstantAction.java Fri Dec 11 21:32:26 2009
@@ -266,6 +266,12 @@
 
 		dm.invalidateFor(td, DependencyManager.DROP_TABLE, lcc);
 
+        //
+        // The table itself can depend on the user defined types of its columns.
+        // Drop all of those dependencies now.
+        //
+        adjustUDTDependencies( lcc, dd, td, null, true );
+
 		/* Drop the table */
 		dd.dropTableDescriptor(td, sd, tc);
 

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/UDTTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/UDTTest.java?rev=889822&r1=889821&r2=889822&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/UDTTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/UDTTest.java Fri Dec 11 21:32:26 2009
@@ -350,9 +350,68 @@
         goodStatement
             ( conn,
               "drop type Price_03_a restrict\n" );
-
     }
 
+    /**
+     * <p>
+     * Dropping a whole table which has udt columns.
+     * </p>
+     */
+    public void test_04_dropTable() throws Exception
+    {
+        Connection conn = getConnection();
+
+        goodStatement
+            ( conn,
+              "create type price_orphan external name 'org.apache.derbyTesting.functionTests.tests.lang.Price' language java\n" );
+        goodStatement
+            ( conn,
+              "create type price_orphan2 external name 'org.apache.derbyTesting.functionTests.tests.lang.Price' language java\n" );
+        goodStatement
+            ( conn,
+              "create type price_orphan3 external name 'org.apache.derbyTesting.functionTests.tests.lang.Price' language java\n" );
+        goodStatement
+            ( conn,
+              "create type price_orphan4 external name 'org.apache.derbyTesting.functionTests.tests.lang.Price' language java\n" );
+        goodStatement
+            ( conn,
+              "create table t_orphan( a price_orphan )\n" );
+        goodStatement
+            ( conn,
+              "create table t_orphan2( a price_orphan2, b int, c price_orphan2 )\n" );
+        goodStatement
+            ( conn,
+              "create table t_orphan3( a price_orphan3, b int, c price_orphan4 )\n" );
+        
+        expectExecutionError( conn, TABLE_DEPENDS_ON_TYPE, "drop type price_orphan restrict\n" );
+        goodStatement
+            ( conn,
+              "drop table t_orphan\n" );
+        goodStatement
+            ( conn,
+              "drop type price_orphan restrict\n" );
+        
+        expectExecutionError( conn, TABLE_DEPENDS_ON_TYPE, "drop type price_orphan2 restrict\n" );
+        goodStatement
+            ( conn,
+              "drop table t_orphan2\n" );
+        goodStatement
+            ( conn,
+              "drop type price_orphan2 restrict\n" );
+        
+        expectExecutionError( conn, TABLE_DEPENDS_ON_TYPE, "drop type price_orphan3 restrict\n" );
+        expectExecutionError( conn, TABLE_DEPENDS_ON_TYPE, "drop type price_orphan4 restrict\n" );
+        goodStatement
+            ( conn,
+              "drop table t_orphan3\n" );
+        goodStatement
+            ( conn,
+              "drop type price_orphan3 restrict\n" );
+        goodStatement
+            ( conn,
+              "drop type price_orphan4 restrict\n" );
+    }
+    
     ///////////////////////////////////////////////////////////////////////////////////
     //
     // MINIONS