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 ma...@apache.org on 2012/10/09 05:49:08 UTC

svn commit: r1395854 - in /db/derby/code/branches/10.7: ./ java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java

Author: mamta
Date: Tue Oct  9 03:49:07 2012
New Revision: 1395854

URL: http://svn.apache.org/viewvc?rev=1395854&view=rev
Log:
DERBY-5567 (AlterTableTest#testDropColumn fails: drop view cannot be performed due to dependency)

backporting to 10.7


Modified:
    db/derby/code/branches/10.7/   (props changed)
    db/derby/code/branches/10.7/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java

Propchange: db/derby/code/branches/10.7/
------------------------------------------------------------------------------
  Merged /db/derby/code/trunk:r1239898
  Merged /db/derby/code/branches/10.8:r1240258

Modified: db/derby/code/branches/10.7/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.7/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java?rev=1395854&r1=1395853&r2=1395854&view=diff
==============================================================================
--- db/derby/code/branches/10.7/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java (original)
+++ db/derby/code/branches/10.7/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java Tue Oct  9 03:49:07 2012
@@ -39,7 +39,6 @@ import org.apache.derby.iapi.sql.Stateme
 import org.apache.derby.catalog.DependableFinder;
 import org.apache.derby.catalog.Dependable;
 import org.apache.derby.iapi.services.io.StoredFormatIds;
-import org.apache.derby.impl.sql.execute.DropTriggerConstantAction;
 
 /**
  * This is the implementation of ViewDescriptor. Users of View descriptors
@@ -364,20 +363,28 @@ public final class ViewDescriptor extend
 				// types SELECT, UPDATE, DELETE, INSERT, REFERENCES, TRIGGER),
 				// we make the ViewDescriptor drop itself. REVOKE_ROLE also
 				// drops the dependent view.
+            case DependencyManager.DROP_COLUMN:
 		    case DependencyManager.REVOKE_PRIVILEGE:
-		    case DependencyManager.DROP_COLUMN:
 			case DependencyManager.REVOKE_ROLE:
-				drop(lcc, 
-						getDataDictionary().getTableDescriptor(uuid).getSchemaDescriptor(),
-						getDataDictionary().getTableDescriptor(uuid));
-
-                                lcc.getLastActivation().addWarning(
-                                    StandardException.newWarning(
-                                        SQLState.LANG_VIEW_DROPPED,
-                                        this.getObjectName() ));
-                                return;
+                
+                TableDescriptor td = 
+                        getDataDictionary().getTableDescriptor(uuid);
+                
+                if (td == null) { 
+                    // DERBY-5567 already dropped via another dependency 
+                    break;
+                }
+                
+                // DERBY-5567 keep original action
+                drop(lcc, td.getSchemaDescriptor(), td, action);
+
+                lcc.getLastActivation().addWarning(
+                        StandardException.newWarning(
+                        SQLState.LANG_VIEW_DROPPED,
+                        this.getObjectName() ));
+                break;
 
-		    default:
+            default:
 
 				/* We should never get here, since we can't have dangling references */
 				if (SanityManager.DEBUG)
@@ -414,14 +421,43 @@ public final class ViewDescriptor extend
 		}
 	}
 
-	public void drop(LanguageConnectionContext lcc,
-							  SchemaDescriptor sd, TableDescriptor td)
-		throws StandardException
-	{
+    /**
+     * Drop this descriptor, if not already done.
+     * 
+     * @param lcc current language connection context
+     * @param sd schema descriptor
+     * @param td table descriptor for this view
+     * @throws StandardException standard error policy
+     */
+    public void drop(
+            LanguageConnectionContext lcc,
+            SchemaDescriptor sd,
+            TableDescriptor td) throws StandardException
+    {
+        drop(lcc, sd, td, DependencyManager.DROP_VIEW);
+    }
+
+    /**
+     * Drop this descriptor, if not already done, due to action.
+     * If action is not {@code DependencyManager.DROP_VIEW}, the descriptor is 
+     * dropped due to dropping some other object, e.g. a table column.
+     * 
+     * @param lcc current language connection context
+     * @param sd schema descriptor
+     * @param td table descriptor for this view
+     * @param action action
+     * @throws StandardException standard error policy
+     */
+    private void drop(
+            LanguageConnectionContext lcc,
+            SchemaDescriptor sd,
+            TableDescriptor td,
+            int action) throws StandardException
+    {
         DataDictionary dd = getDataDictionary();
         DependencyManager dm = dd.getDependencyManager();
         TransactionController tc = lcc.getTransactionExecute();
-        
+
 		/* Drop the columns */
 		dd.dropAllColumnDescriptors(td.getUUID(), tc);
 
@@ -430,7 +466,7 @@ public final class ViewDescriptor extend
 		 * cursor referencing a table/view that the user is attempting to
 		 * drop.) If no one objects, then invalidate any dependent objects.
 		 */
-		dm.invalidateFor(td, DependencyManager.DROP_VIEW, lcc);
+        dm.invalidateFor(td, action, lcc);
 
 		/* Clear the dependencies for the view */
 		dm.clearDependencies(lcc, this);
@@ -445,5 +481,8 @@ public final class ViewDescriptor extend
 		dd.dropTableDescriptor(td, sd, tc);
 	}
 
+    public String getName() {
+        return viewName;
+    }
 
 }