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 ka...@apache.org on 2007/05/10 09:49:09 UTC
svn commit: r536767 - in /db/derby/code/trunk/java/engine/org/apache/derby:
iapi/sql/dictionary/ViewDescriptor.java
impl/sql/execute/RoutinePrivilegeInfo.java
impl/sql/execute/TablePrivilegeInfo.java
Author: kahatlen
Date: Thu May 10 00:49:08 2007
New Revision: 536767
URL: http://svn.apache.org/viewvc?view=rev&rev=536767
Log:
DERBY-2594: Revoking a privilege from an SQL Object should invalidate
statements dependent on that object
Patch contributed by Dyre Tjeldvoll.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/RoutinePrivilegeInfo.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TablePrivilegeInfo.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java?view=diff&rev=536767&r1=536766&r2=536767
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ViewDescriptor.java Thu May 10 00:49:08 2007
@@ -273,6 +273,14 @@
//don't do anything here. Later in makeInvalid method, we make
//the ViewDescriptor drop itself.
case DependencyManager.REVOKE_PRIVILEGE:
+
+ // When REVOKE_PRIVILEGE gets sent to a
+ // TablePermsDescriptor we must also send
+ // INTERNAL_RECOMPILE_REQUEST to its Dependents which
+ // may be GPSs needing re-compilation. But Dependents
+ // could also be ViewDescriptors, which then also need
+ // to handle this event.
+ case DependencyManager.INTERNAL_RECOMPILE_REQUEST:
break;
//Notice that REVOKE_PRIVILEGE_RESTRICT is not caught earlier.
@@ -329,6 +337,14 @@
case DependencyManager.UPDATE_STATISTICS:
case DependencyManager.DROP_STATISTICS:
case DependencyManager.TRUNCATE_TABLE:
+
+ // When REVOKE_PRIVILEGE gets sent to a
+ // TablePermsDescriptor we must also send
+ // INTERNAL_RECOMPILE_REQUEST to its Dependents which
+ // may be GPSs needing re-compilation. But Dependents
+ // could also be ViewDescriptors, which then also need
+ // to handle this event.
+ case DependencyManager.INTERNAL_RECOMPILE_REQUEST:
break;
//When REVOKE_PRIVILEGE gets sent (this happens for privilege
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/RoutinePrivilegeInfo.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/RoutinePrivilegeInfo.java?view=diff&rev=536767&r1=536766&r2=536767
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/RoutinePrivilegeInfo.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/RoutinePrivilegeInfo.java Thu May 10 00:49:08 2007
@@ -89,7 +89,19 @@
//Derby currently supports only restrict form of revoke execute
//privilege and that is why, we are sending invalidation action
//as REVOKE_PRIVILEGE_RESTRICT rather than REVOKE_PRIVILEGE
- dd.getDependencyManager().invalidateFor(routinePermsDesc, DependencyManager.REVOKE_PRIVILEGE_RESTRICT, lcc);
+ dd.getDependencyManager().invalidateFor
+ (routinePermsDesc,
+ DependencyManager.REVOKE_PRIVILEGE_RESTRICT, lcc);
+
+ // When revoking a privilege from a Routine we need to
+ // invalidate all GPSs refering to it. But GPSs aren't
+ // Dependents of RoutinePermsDescr, but of the
+ // AliasDescriptor itself, so we must send
+ // INTERNAL_RECOMPILE_REQUEST to the AliasDescriptor's
+ // Dependents.
+ dd.getDependencyManager().invalidateFor
+ (aliasDescriptor,
+ DependencyManager.INTERNAL_RECOMPILE_REQUEST, lcc);
}
addWarningIfPrivilegeNotRevoked(activation, grant, privileges_revoked, grantee);
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TablePrivilegeInfo.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TablePrivilegeInfo.java?view=diff&rev=536767&r1=536766&r2=536767
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TablePrivilegeInfo.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/TablePrivilegeInfo.java Thu May 10 00:49:08 2007
@@ -254,7 +254,18 @@
if (dd.addRemovePermissionsDescriptor( grant, tablePermsDesc, grantee, tc))
{
privileges_revoked = true;
- dd.getDependencyManager().invalidateFor(tablePermsDesc, DependencyManager.REVOKE_PRIVILEGE, lcc);
+ dd.getDependencyManager().invalidateFor
+ (tablePermsDesc,
+ DependencyManager.REVOKE_PRIVILEGE, lcc);
+
+ // When revoking a privilege from a Table we need to
+ // invalidate all GPSs refering to it. But GPSs aren't
+ // Dependents of TablePermsDescr, but of the
+ // TableDescriptor itself, so we must send
+ // INTERNAL_RECOMPILE_REQUEST to the TableDescriptor's
+ // Dependents.
+ dd.getDependencyManager().invalidateFor
+ (td, DependencyManager.INTERNAL_RECOMPILE_REQUEST, lcc);
}
}
for( int i = 0; i < columnBitSets.length; i++)