db-derby-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From d..@apache.org
Subject svn commit: r1240258 - in /db/derby/code/branches/10.8: ./ java/client/org/apache/derby/client/net/NetCursor.java java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java
Date Fri, 03 Feb 2012 17:40:00 GMT
Author: dag
Date: Fri Feb  3 17:40:00 2012
New Revision: 1240258

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

Backported from trunk with some minor edits (imports).

When a view (b) is defined on another view (a), dropping a column in
the base table can lead to both view being invalidated. This patch
(DERBY-5567-1) fixes a problem in the logic:

Depending on the order in which dependencies of the base table column
are registered, the invalidation will happen either view a or view b.
If it happens on view a first, this view in turn will try to
invalidate view b (since that depends on view a), but with the
DROP_VIEW action which fails. The patch changes this recursive
invalidation to use the original action, e.g. DROP_COLUMN which will
allow dropping the dependent view (dropping a column is allowed to
cause cascading drops of dependent views). 


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

Propchange: db/derby/code/branches/10.8/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Feb  3 17:40:00 2012
@@ -1,2 +1,2 @@
 /db/derby/code/branches/10.7:1061570,1061578,1082235
-/db/derby/code/trunk:1063809,1088633,1089795,1091000,1091221,1091285,1092067,1092795,1094315,1094572,1094728,1095247,1096741,1096890,1096991,1097247,1097249,1097460,1097469,1097471,1098033,1101059,1101839,1102620,1102826,1103681,1103718,1103742,1104365,1125305,1126358,1126468,1127825,1127883,1128243,1128942,1129136,1129764,1129797,1130077,1130084,1130632,1130895,1131030,1131272,1132546,1132664,1132747,1132860,1132928,1133304,1133317,1133741,1133752,1134139,1136363,1136371,1136397,1136844,1137213,1138201,1138341,1138444,1138787,1138795,1139449,1139451,1140222,1140744,1141924,1142583,1142635,1145057,1146644,1146915,1146962,1147219,1147242,1147335,1148344,1148354,1148429,1148658,1149054,1149090,1149270,1149482,1149662,1151101,1151612,1158108,1160593,1160597,1161208,1162737,1163131,1163616,1164358,1164370,1164495,1165221,1166313,1167017,1167226,1167470,1169692,1170470,1171227,1171665,1171672,1173446,1173647,1174436,1174646,1176633,1176636,1177589,1179374,1179546,1180790,1180858,
 1181756,1183463,1183503,1183671,1186020,1186691,1189201,1189222,1203050,1203252,1204128,1207729,1208775,1210846,1212541,1213251,1230480
+/db/derby/code/trunk:1063809,1088633,1089795,1091000,1091221,1091285,1092067,1092795,1094315,1094572,1094728,1095247,1096741,1096890,1096991,1097247,1097249,1097460,1097469,1097471,1098033,1101059,1101839,1102620,1102826,1103681,1103718,1103742,1104365,1125305,1126358,1126468,1127825,1127883,1128243,1128942,1129136,1129764,1129797,1130077,1130084,1130632,1130895,1131030,1131272,1132546,1132664,1132747,1132860,1132928,1133304,1133317,1133741,1133752,1134139,1136363,1136371,1136397,1136844,1137213,1138201,1138341,1138444,1138787,1138795,1139449,1139451,1140222,1140744,1141924,1142583,1142635,1145057,1146644,1146915,1146962,1147219,1147242,1147335,1148344,1148354,1148429,1148658,1149054,1149090,1149270,1149482,1149662,1151101,1151612,1158108,1160593,1160597,1161208,1162737,1163131,1163616,1164358,1164370,1164495,1165221,1166313,1167017,1167226,1167470,1169692,1170470,1171227,1171665,1171672,1173446,1173647,1174436,1174646,1176633,1176636,1177589,1179374,1179546,1180790,1180858,
 1181756,1183463,1183503,1183671,1186020,1186691,1189201,1189222,1203050,1203252,1204128,1207729,1208775,1210846,1212541,1213251,1230480,1239898

Propchange: db/derby/code/branches/10.8/java/client/org/apache/derby/client/net/NetCursor.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Feb  3 17:40:00 2012
@@ -1,2 +1,2 @@
 /db/derby/code/branches/10.7/java/client/org/apache/derby/client/net/NetCursor.java:1061570,1061578,1082235
-/db/derby/code/trunk/java/client/org/apache/derby/client/net/NetCursor.java:1063809,1088633,1089795,1091000,1091221,1091285,1092067,1092795,1094315,1094572,1094728,1095247,1096741,1096890,1096991,1097247,1097249,1097460,1097469,1097471,1098033,1101059,1101839,1102620,1102826,1103681,1103718,1103742,1104365,1125305,1126358,1126468,1127825,1127883,1128243,1128942,1129136,1129764,1129797,1130077,1130084,1130632,1130895,1131030,1131272,1132546,1132664,1132747,1132860,1132928,1133304,1133317,1133741,1133752,1134139,1136363,1136371,1136397,1136844,1137213,1138201,1138341,1138444,1138787,1138795,1139449,1139451,1140222,1140744,1141924,1142583,1142635,1145057,1145961,1146644,1146915,1146962,1147219,1147242,1147335,1148344,1148354,1148429,1148658,1149054,1149090,1149270,1149482,1149662,1151101,1151612,1158108,1160593,1160597,1161208,1162737,1163131,1163616,1164358,1164370,1164495,1165221,1167017,1167470,1169692,1171665,1171672,1173647,1174436,1176633,1176636,1177589,1179374,1179546,1
 180790,1180858,1181756,1183463,1183671,1186020,1186691,1203252,1210846,1213251,1230480
+/db/derby/code/trunk/java/client/org/apache/derby/client/net/NetCursor.java:1063809,1088633,1089795,1091000,1091221,1091285,1092067,1092795,1094315,1094572,1094728,1095247,1096741,1096890,1096991,1097247,1097249,1097460,1097469,1097471,1098033,1101059,1101839,1102620,1102826,1103681,1103718,1103742,1104365,1125305,1126358,1126468,1127825,1127883,1128243,1128942,1129136,1129764,1129797,1130077,1130084,1130632,1130895,1131030,1131272,1132546,1132664,1132747,1132860,1132928,1133304,1133317,1133741,1133752,1134139,1136363,1136371,1136397,1136844,1137213,1138201,1138341,1138444,1138787,1138795,1139449,1139451,1140222,1140744,1141924,1142583,1142635,1145057,1145961,1146644,1146915,1146962,1147219,1147242,1147335,1148344,1148354,1148429,1148658,1149054,1149090,1149270,1149482,1149662,1151101,1151612,1158108,1160593,1160597,1161208,1162737,1163131,1163616,1164358,1164370,1164495,1165221,1167017,1167470,1169692,1171665,1171672,1173647,1174436,1176633,1176636,1177589,1179374,1179546,1
 180790,1180858,1181756,1183463,1183671,1186020,1186691,1203252,1210846,1213251,1230480,1239898

Modified: db/derby/code/branches/10.8/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.8/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java?rev=1240258&r1=1240257&r2=1240258&view=diff
==============================================================================
--- db/derby/code/branches/10.8/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java
(original)
+++ db/derby/code/branches/10.8/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java
Fri Feb  3 17:40:00 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;
+    }
 
 }



Mime
View raw message