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 dj...@apache.org on 2006/07/12 06:48:06 UTC

svn commit: r421118 - in /db/derby/code/trunk/java: engine/org/apache/derby/iapi/sql/dictionary/ engine/org/apache/derby/impl/sql/catalog/ engine/org/apache/derby/impl/sql/execute/ testing/org/apache/derbyTesting/functionTests/master/ testing/org/apach...

Author: djd
Date: Tue Jul 11 21:48:05 2006
New Revision: 421118

URL: http://svn.apache.org/viewvc?rev=421118&view=rev
Log:
DERBY-1330 (partial) The patch gets rid of requirement of permission type along with the uuid to find a unique row.
Fixing this has in fact cleaned up the supporting code quite a bit. For instance, there is no need for special
class DDColumnPermissionDependableFinder or no need for a constructor in ColPermsDescriptor which takes permission
types in the form of an int. DDdependableFinder is much cleaner too with this patch. In addition, I have also created
a unique index on the uuid for these 3 system tables in order to quickly locate a row in those system tables.

Patch contributed by Mamta Satoor

Removed:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DDColumnPermissionsDependableFinder.java
Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ColPermsDescriptor.java
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDictionary.java
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/RoutinePermsDescriptor.java
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TablePermsDescriptor.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/CoreDDFinderClassInfo.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DDdependableFinder.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSCOLPERMSRowFactory.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSROUTINEPERMSRowFactory.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSTABLEPERMSRowFactory.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
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/syscat.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/jdk14/syscat.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/syscat.out

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ColPermsDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ColPermsDescriptor.java?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ColPermsDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/ColPermsDescriptor.java Tue Jul 11 21:48:05 2006
@@ -28,8 +28,7 @@
 import org.apache.derby.iapi.sql.dictionary.DataDictionary;
 import org.apache.derby.iapi.services.io.FormatableBitSet;
 import org.apache.derby.iapi.services.io.StoredFormatIds;
-import org.apache.derby.impl.sql.catalog.DDColumnPermissionsDependableFinder;
-//import org.apache.derby.impl.sql.catalog.DDdependableFinder;
+import org.apache.derby.impl.sql.catalog.DDdependableFinder;
 
 /**
  * This class describes a row in the SYS.SYSCOLPERMS system table, which keeps
@@ -37,10 +36,10 @@
  */
 public class ColPermsDescriptor extends PermissionsDescriptor
 {
-    private final UUID tableUUID;
-    private final String type;
-    private final FormatableBitSet columns;
-    private final String tableName;
+    private UUID tableUUID;
+    private String type;
+    private FormatableBitSet columns;
+    private String tableName;
 	
 	public ColPermsDescriptor( DataDictionary dd,
 			                   String grantee,
@@ -53,7 +52,10 @@
         this.tableUUID = tableUUID;
         this.type = type;
         this.columns = columns;
-        tableName = dd.getTableDescriptor(tableUUID).getName();
+        //tableUUID can be null only if the constructor with colPermsUUID
+        //has been invoked.
+        if (tableUUID != null)
+        	tableName = dd.getTableDescriptor(tableUUID).getName();
 	}
 
     /**
@@ -66,7 +68,14 @@
                                String type) throws StandardException
     {
         this( dd, grantee, grantor, tableUUID, type, (FormatableBitSet) null);
-    }
+    }           
+    
+    public ColPermsDescriptor( DataDictionary dd,
+            UUID colPermsUUID) throws StandardException
+    {
+        super(dd,null,null);
+        this.oid = colPermsUUID;
+	}
     
     public int getCatalogNumber()
     {
@@ -107,8 +116,8 @@
      */
     public int hashCode()
     {
-        return super.keyHashCode() + tableUUID.hashCode() +
-          ((type == null) ? 0 : type.hashCode());
+    	return super.keyHashCode() + tableUUID.hashCode() +
+		((type == null) ? 0 : type.hashCode());
     }
 	
 	/**
@@ -156,8 +165,7 @@
 	 */
 	public DependableFinder getDependableFinder() 
 	{
-	    return	new DDColumnPermissionsDependableFinder(StoredFormatIds.COLUMNS_PERMISSION_FINDER_V01_ID, 
-	    		type);
+	    return	new DDdependableFinder(StoredFormatIds.COLUMNS_PERMISSION_FINDER_V01_ID);
 	}
 
 }

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDictionary.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDictionary.java?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDictionary.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDictionary.java Tue Jul 11 21:48:05 2006
@@ -1570,7 +1570,7 @@
         throws StandardException;
 
     /**
-     * Get one user's privileges on a table
+     * Get one user's privileges on a table using tableUUID and authorizationid
      *
      * @param tableUUID
      * @param authorizationId The user name
@@ -1583,6 +1583,18 @@
         throws StandardException;
 
     /**
+     * Get one user's privileges on a table using tablePermsUUID
+     *
+     * @param tablePermsUUID
+     *
+     * @return a TablePermsDescriptor
+     *
+     * @exception StandardException
+     */
+    public TablePermsDescriptor getTablePermissions( UUID tablePermsUUID)
+    throws StandardException;
+
+    /**
      * Get one user's column privileges for a table.
      *
      * @param tableUUID
@@ -1604,10 +1616,10 @@
                                                     String authorizationId)
         throws StandardException;
 
+
     /**
-     * Get one user's column privileges for a table. This routine gets called by
-     * ColPermsDescriptor.getDependableFinder and that method has hold of 
-     * privilege type in String form.
+     * Get one user's column privileges for a table. This routine gets called 
+     * during revoke privilege processing
      *
      * @param tableUUID
      * @param privType(as String) Authorizer.SELECT_PRIV, Authorizer.UPDATE_PRIV, or Authorizer.REFERENCES_PRIV
@@ -1627,6 +1639,17 @@
             boolean forGrant,
             String authorizationId)
     throws StandardException;
+    /**
+     * Get one user's column privileges on a table using colPermsUUID
+     *
+     * @param colPermsUUID
+     *
+     * @return a ColPermsDescriptor
+     *
+     * @exception StandardException
+     */
+    public ColPermsDescriptor getColumnPermissions( UUID colPermsUUID)
+    throws StandardException;
 
     /**
      * Get one user's permissions for a routine (function or procedure).
@@ -1640,6 +1663,18 @@
      */
     public RoutinePermsDescriptor getRoutinePermissions( UUID routineUUID, String authorizationId)
         throws StandardException;
+    
+    /**
+     * Get one user's privileges for a routine using routinePermsUUID
+     *
+     * @param routinePermsUUID
+     *
+     * @return a RoutinePermsDescriptor
+     *
+     * @exception StandardException
+     */
+    public RoutinePermsDescriptor getRoutinePermissions( UUID routinePermsUUID)
+    throws StandardException;
 
 	/**
 	 * Return the Java class to use for the VTI for

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/RoutinePermsDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/RoutinePermsDescriptor.java?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/RoutinePermsDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/RoutinePermsDescriptor.java Tue Jul 11 21:48:05 2006
@@ -35,9 +35,9 @@
  */
 public class RoutinePermsDescriptor extends PermissionsDescriptor
 {
-    private final UUID routineUUID;
-    private final String routineName;
-    private final boolean hasExecutePermission;
+    private UUID routineUUID;
+    private String routineName;
+    private boolean hasExecutePermission;
 	
 	public RoutinePermsDescriptor( DataDictionary dd,
                                    String grantee,
@@ -48,7 +48,10 @@
         super (dd, grantee, grantor);
         this.routineUUID = routineUUID;
         this.hasExecutePermission = hasExecutePermission;
-        routineName = dd.getAliasDescriptor(routineUUID).getObjectName();
+        //routineUUID can be null only if the constructor with routineePermsUUID
+        //has been invoked.
+        if (routineUUID != null)
+        	routineName = dd.getAliasDescriptor(routineUUID).getObjectName();
 	}
 	
 	public RoutinePermsDescriptor( DataDictionary dd,
@@ -68,6 +71,13 @@
     {
         this( dd, grantee, grantor, (UUID) null);
     }
+	   
+    public RoutinePermsDescriptor( DataDictionary dd, UUID routineePermsUUID) 
+    throws StandardException
+	{
+        this( dd, null, null, null, true);
+        this.oid = routineePermsUUID;
+	}
     
     public int getCatalogNumber()
     {

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TablePermsDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TablePermsDescriptor.java?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TablePermsDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/TablePermsDescriptor.java Tue Jul 11 21:48:05 2006
@@ -35,14 +35,14 @@
  */
 public class TablePermsDescriptor extends PermissionsDescriptor
 {
-    private final UUID tableUUID;
-    private final String tableName;
-    private final String selectPriv;
-    private final String deletePriv;
-    private final String insertPriv;
-    private final String updatePriv;
-    private final String referencesPriv;
-    private final String triggerPriv;
+    private UUID tableUUID;
+    private String tableName;
+    private String selectPriv;
+    private String deletePriv;
+    private String insertPriv;
+    private String updatePriv;
+    private String referencesPriv;
+    private String triggerPriv;
 	
 	public TablePermsDescriptor( DataDictionary dd,
                                  String grantee,
@@ -63,7 +63,10 @@
         this.updatePriv = updatePriv;
         this.referencesPriv = referencesPriv;
         this.triggerPriv = triggerPriv;
-        tableName = dd.getTableDescriptor(tableUUID).getName();
+        //tableUUID can be null only if the constructor with tablePermsUUID
+        //has been invoked.
+        if (tableUUID != null)
+        	tableName = dd.getTableDescriptor(tableUUID).getName();
 	}
 
     /**
@@ -78,6 +81,14 @@
               (String) null, (String) null, (String) null, (String) null, (String) null, (String) null);
     }
     
+    public TablePermsDescriptor( DataDictionary dd,
+            UUID tablePermsUUID) throws StandardException
+            {
+        this( dd, null, null, null,
+                (String) null, (String) null, (String) null, (String) null, (String) null, (String) null);
+        this.oid = tablePermsUUID;
+			}
+
     public int getCatalogNumber()
     {
         return DataDictionary.SYSTABLEPERMS_CATALOG_NUM;
@@ -123,7 +134,7 @@
      */
     public int hashCode()
     {
-        return super.keyHashCode() + tableUUID.hashCode();
+    	return super.keyHashCode() + tableUUID.hashCode();
     }
 	
 	/**

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/CoreDDFinderClassInfo.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/CoreDDFinderClassInfo.java?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/CoreDDFinderClassInfo.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/CoreDDFinderClassInfo.java Tue Jul 11 21:48:05 2006
@@ -42,11 +42,10 @@
 			case StoredFormatIds.VIEW_DESCRIPTOR_FINDER_V01_ID:
 			case StoredFormatIds.TABLE_PERMISSION_FINDER_V01_ID:
 			case StoredFormatIds.ROUTINE_PERMISSION_FINDER_V01_ID:
+			case StoredFormatIds.COLUMNS_PERMISSION_FINDER_V01_ID:
 				return new DDdependableFinder(fmtId);
 			case StoredFormatIds.COLUMN_DESCRIPTOR_FINDER_V01_ID:
 				return new DDColumnDependableFinder(fmtId);
-			case StoredFormatIds.COLUMNS_PERMISSION_FINDER_V01_ID:
-				return new DDColumnPermissionsDependableFinder(fmtId);
 			default:
 				return null;
 		}

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DDdependableFinder.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DDdependableFinder.java?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DDdependableFinder.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DDdependableFinder.java Tue Jul 11 21:48:05 2006
@@ -310,7 +310,6 @@
 	protected Dependable getDependable(DataDictionary dd, UUID dependableObjectID)
 		throws StandardException
 	{
-		LanguageConnectionContext lcc;
 		switch (formatId)
 		{
 			case StoredFormatIds.ALIAS_DESCRIPTOR_FINDER_V01_ID:
@@ -348,17 +347,14 @@
 			case StoredFormatIds.VIEW_DESCRIPTOR_FINDER_V01_ID:
 				return dd.getViewDescriptor(dependableObjectID);
 
+			case StoredFormatIds.COLUMNS_PERMISSION_FINDER_V01_ID:
+				return dd.getColumnPermissions(dependableObjectID);
+
 			case StoredFormatIds.TABLE_PERMISSION_FINDER_V01_ID:
-				lcc = (LanguageConnectionContext)
-				ContextService.getContext(LanguageConnectionContext.CONTEXT_ID);
-				return dd.getTablePermissions(dependableObjectID,
-						lcc.getAuthorizationId());
+				return dd.getTablePermissions(dependableObjectID);
 
 			case StoredFormatIds.ROUTINE_PERMISSION_FINDER_V01_ID:
-				lcc = (LanguageConnectionContext)
-				ContextService.getContext(LanguageConnectionContext.CONTEXT_ID);
-				return dd.getRoutinePermissions(dependableObjectID,
-						lcc.getAuthorizationId());
+				return dd.getRoutinePermissions(dependableObjectID);
 
 			default:
 				if (SanityManager.DEBUG)
@@ -377,7 +373,6 @@
 	protected String getSQLObjectName(DataDictionary dd, UUID dependableObjectID)
 		throws StandardException
 	{
-		LanguageConnectionContext lcc;
 		switch (formatId)
 		{
 			case StoredFormatIds.ALIAS_DESCRIPTOR_FINDER_V01_ID:
@@ -410,7 +405,6 @@
 
 			case StoredFormatIds.TABLE_DESCRIPTOR_FINDER_V01_ID:
 			case StoredFormatIds.COLUMN_DESCRIPTOR_FINDER_V01_ID:
-			case StoredFormatIds.COLUMNS_PERMISSION_FINDER_V01_ID:
 				return getDependable(dd, dependableObjectID).getObjectName();
 
 			case StoredFormatIds.TRIGGER_DESCRIPTOR_FINDER_V01_ID:
@@ -419,17 +413,14 @@
 			case StoredFormatIds.VIEW_DESCRIPTOR_FINDER_V01_ID:
 				return dd.getTableDescriptor(dependableObjectID).getName();
 
+			case StoredFormatIds.COLUMNS_PERMISSION_FINDER_V01_ID:
+				return dd.getColumnPermissions(dependableObjectID).getObjectName();
+
 			case StoredFormatIds.TABLE_PERMISSION_FINDER_V01_ID:
-				lcc = (LanguageConnectionContext)
-				ContextService.getContext(LanguageConnectionContext.CONTEXT_ID);
-				return dd.getTablePermissions(dependableObjectID,
-						lcc.getAuthorizationId()).getObjectName();
+				return dd.getTablePermissions(dependableObjectID).getObjectName();
 
 			case StoredFormatIds.ROUTINE_PERMISSION_FINDER_V01_ID:
-				lcc = (LanguageConnectionContext)
-				ContextService.getContext(LanguageConnectionContext.CONTEXT_ID);
-				return dd.getRoutinePermissions(dependableObjectID,
-						lcc.getAuthorizationId()).getObjectName();
+				return dd.getRoutinePermissions(dependableObjectID).getObjectName();
 
 			default:
 				if (SanityManager.DEBUG)

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java Tue Jul 11 21:48:05 2006
@@ -9782,6 +9782,14 @@
         return (TablePermsDescriptor) getPermissions( key);
     } // end of getTablePermissions
 
+	/* @see org.apache.derby.iapi.sql.dictionary.DataDictionary#getTablePermissions */
+    public TablePermsDescriptor getTablePermissions( UUID tablePermsUUID)
+    throws StandardException
+	{
+        TablePermsDescriptor key = new TablePermsDescriptor( this, tablePermsUUID);
+        return (TablePermsDescriptor) getPermissions( key);
+	}
+
     private Object getPermissions( PermissionsDescriptor key) throws StandardException
     {
         // RESOLVE get a READ COMMITTED (shared) lock on the permission row
@@ -9793,6 +9801,14 @@
         return perms;
     }
 
+	/* @see org.apache.derby.iapi.sql.dictionary.DataDictionary#getColumnPermissions */
+    public ColPermsDescriptor getColumnPermissions( UUID colPermsUUID)
+    throws StandardException
+	{
+    	ColPermsDescriptor key = new ColPermsDescriptor( this, colPermsUUID);
+        return (ColPermsDescriptor) getPermissions( key);
+	}
+
     /**
      * Get one user's column privileges for a table.
      *
@@ -9828,9 +9844,8 @@
     } // end of getColumnPermissions
 
     /**
-     * Get one user's column privileges for a table. This routine gets called by
-     * ColPermsDescriptor.getDependableFinder and that method has hold of 
-     * privilege type in String form.
+     * Get one user's column privileges for a table. This routine gets called 
+     * during revoke privilege processing
      *
      * @param tableUUID
      * @param privType(as String) Authorizer.SELECT_PRIV, Authorizer.UPDATE_PRIV, or Authorizer.REFERENCES_PRIV
@@ -9890,6 +9905,14 @@
 
         return (RoutinePermsDescriptor) getPermissions( key);
     } // end of getRoutinePermissions
+    
+	/* @see org.apache.derby.iapi.sql.dictionary.DataDictionary#getRoutinePermissions */
+    public RoutinePermsDescriptor getRoutinePermissions( UUID routinePermsUUID)
+    throws StandardException
+	{
+    	RoutinePermsDescriptor key = new RoutinePermsDescriptor( this, routinePermsUUID);
+        return (RoutinePermsDescriptor) getPermissions( key);    	
+	}
 
     /**
      * Add or remove a permission to/from the permission database.
@@ -9993,10 +10016,22 @@
     TablePermsDescriptor getUncachedTablePermsDescriptor( TablePermsDescriptor key)
         throws StandardException
     {
-        return (TablePermsDescriptor)
-          getUncachedPermissionsDescriptor( SYSTABLEPERMS_CATALOG_NUM,
-                                            SYSTABLEPERMSRowFactory.GRANTEE_TABLE_GRANTOR_INDEX_NUM,
-                                            key);
+    	if (key.getObjectID() == null)
+    	{
+    		//the TABLEPERMSID for SYSTABLEPERMS is not known, so use
+    		//table id, grantor and granteee to find TablePermsDescriptor
+            return (TablePermsDescriptor)
+              getUncachedPermissionsDescriptor( SYSTABLEPERMS_CATALOG_NUM,
+                                                SYSTABLEPERMSRowFactory.GRANTEE_TABLE_GRANTOR_INDEX_NUM,
+                                                key);
+    	} else
+    	{
+    		//we know the TABLEPERMSID for SYSTABLEPERMS, so use that to
+    		//find TablePermsDescriptor from the sytem table
+    		return (TablePermsDescriptor)
+			getUncachedPermissionsDescriptor(SYSTABLEPERMS_CATALOG_NUM,
+					SYSTABLEPERMSRowFactory.TABLEPERMSID_INDEX_NUM,key);
+    	}
     } // end of getUncachedTablePermsDescriptor
 
 
@@ -10013,11 +10048,23 @@
     ColPermsDescriptor getUncachedColPermsDescriptor( ColPermsDescriptor key)
         throws StandardException
     {
-        return (ColPermsDescriptor)
-          getUncachedPermissionsDescriptor( SYSCOLPERMS_CATALOG_NUM,
-                                            SYSCOLPERMSRowFactory.GRANTEE_TABLE_TYPE_GRANTOR_INDEX_NUM,
-                                            key);
-                                                                        
+    	if (key.getObjectID() == null)
+    	{
+    		//the COLPERMSID for SYSCOLPERMS is not known, so use tableid,
+    		//privilege type, grantor and granteee to find ColPermsDescriptor
+            return (ColPermsDescriptor)
+	          getUncachedPermissionsDescriptor( SYSCOLPERMS_CATALOG_NUM,
+	                                            SYSCOLPERMSRowFactory.GRANTEE_TABLE_TYPE_GRANTOR_INDEX_NUM,
+	                                            key);
+    	}else
+    	{
+    		//we know the COLPERMSID for SYSCOLPERMS, so use that to
+    		//find ColPermsDescriptor from the sytem table
+            return (ColPermsDescriptor)
+	          getUncachedPermissionsDescriptor( SYSCOLPERMS_CATALOG_NUM,
+	                                            SYSCOLPERMSRowFactory.COLPERMSID_INDEX_NUM,
+	                                            key);
+    	}
     } // end of getUncachedColPermsDescriptor
 
     private TupleDescriptor getUncachedPermissionsDescriptor( int catalogNumber,
@@ -10050,10 +10097,23 @@
     RoutinePermsDescriptor getUncachedRoutinePermsDescriptor( RoutinePermsDescriptor key)
         throws StandardException
     {
-        return (RoutinePermsDescriptor)
-          getUncachedPermissionsDescriptor( SYSROUTINEPERMS_CATALOG_NUM,
-                                            SYSROUTINEPERMSRowFactory.GRANTEE_ALIAS_GRANTOR_INDEX_NUM,
-                                            key);
+    	if (key.getObjectID() == null)
+    	{
+    		//the ROUTINEPERMSID for SYSROUTINEPERMS is not known, so use aliasid,
+    		//grantor and granteee to find RoutinePermsDescriptor
+            return (RoutinePermsDescriptor)
+            getUncachedPermissionsDescriptor( SYSROUTINEPERMS_CATALOG_NUM,
+            		SYSROUTINEPERMSRowFactory.GRANTEE_ALIAS_GRANTOR_INDEX_NUM,
+                                              key);
+    	} else
+    	{
+    		//we know the ROUTINEPERMSID for SYSROUTINEPERMS, so use that to
+    		//find RoutinePermsDescriptor from the sytem table
+    		return (RoutinePermsDescriptor)
+			getUncachedPermissionsDescriptor(SYSROUTINEPERMS_CATALOG_NUM,
+					SYSROUTINEPERMSRowFactory.ROUTINEPERMSID_INDEX_NUM,key);
+
+    	}
     } // end of getUncachedRoutinePermsDescriptor
  
 	private String[][] DIAG_VTI_CLASSES =

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSCOLPERMSRowFactory.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSCOLPERMSRowFactory.java?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSCOLPERMSRowFactory.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSCOLPERMSRowFactory.java Tue Jul 11 21:48:05 2006
@@ -59,7 +59,7 @@
 	static final String TABLENAME_STRING = "SYSCOLPERMS";
 
     // Column numbers for the SYSCOLPERMS table. 1 based
-	private static final int SYSCOLPERMS_COLPERMSID = 1;
+	private static final int COLPERMSID_COL_NUM = 1;
     private static final int GRANTEE_COL_NUM = 2;
     private static final int GRANTOR_COL_NUM = 3;
     private static final int TABLEID_COL_NUM = 4;
@@ -68,21 +68,25 @@
     private static final int COLUMN_COUNT = 6;
 
     public static final int GRANTEE_TABLE_TYPE_GRANTOR_INDEX_NUM = 0;
+    public static final int COLPERMSID_INDEX_NUM = 1;
 	private static final int[][] indexColumnPositions = 
 	{ 
-		{ GRANTEE_COL_NUM, TABLEID_COL_NUM, TYPE_COL_NUM, GRANTOR_COL_NUM}
+		{ GRANTEE_COL_NUM, TABLEID_COL_NUM, TYPE_COL_NUM, GRANTOR_COL_NUM},
+		{ COLPERMSID_COL_NUM }
 	};
 	private static final String[][] indexColumnNames =
 	{
-		{"GRANTEE", "TABLEID", "TYPE", "GRANTOR"}
+		{"GRANTEE", "TABLEID", "TYPE", "GRANTOR"},
+		{"COLPERMSID"}
 	};
-    private static final boolean[] indexUniqueness = { true};
+    private static final boolean[] indexUniqueness = { true, true};
 
     private	static final String[] uuids =
     {
         "286cc01e-0103-0e39-b8e7-00000010f010" // catalog UUID
 		,"6074401f-0103-0e39-b8e7-00000010f010"	// heap UUID
-		,"787c0020-0103-0e39-b8e7-00000010f010"	// index
+		,"787c0020-0103-0e39-b8e7-00000010f010"	// index1
+		,"c9a3808d-010c-42a2-ae15-0000000f67f8" //index2
     };
 
     private SystemColumn[] columnList;
@@ -126,7 +130,7 @@
             columns = cpd.getColumns();
         }
         ExecRow row = getExecutionFactory().getValueRow( COLUMN_COUNT);
-        row.setColumn( SYSCOLPERMS_COLPERMSID, dvf.getCharDataValue(colPermID));
+        row.setColumn( COLPERMSID_COL_NUM, dvf.getCharDataValue(colPermID));
         row.setColumn( GRANTEE_COL_NUM, grantee);
         row.setColumn( GRANTOR_COL_NUM, grantor);
         row.setColumn( TABLEID_COL_NUM, dvf.getCharDataValue( tableID));
@@ -145,7 +149,7 @@
             SanityManager.ASSERT( row.nColumns() == COLUMN_COUNT,
                                   "Wrong size row passed to SYSCOLPERMSRowFactory.buildDescriptor");
 
-        String colPermsUUIDString = row.getColumn( SYSCOLPERMS_COLPERMSID).getString();
+        String colPermsUUIDString = row.getColumn( COLPERMSID_COL_NUM).getString();
         UUID colPermsUUID = getUUIDFactory().recreateUUID(colPermsUUIDString);
         String tableUUIDString = row.getColumn( TABLEID_COL_NUM).getString();
         UUID tableUUID = getUUIDFactory().recreateUUID(tableUUIDString);
@@ -173,9 +177,9 @@
         {
             columnList = new SystemColumn[ COLUMN_COUNT];
 
-            columnList[ SYSCOLPERMS_COLPERMSID - 1] =
+            columnList[ COLPERMSID_COL_NUM - 1] =
                 new SystemColumnImpl( convertIdCase( "COLPERMSID"),
-                                      SYSCOLPERMS_COLPERMSID,
+                                      COLPERMSID_COL_NUM,
                                       0, // precision
                                       0, // scale
                                       false, // nullability
@@ -250,6 +254,9 @@
             row.setColumn(3, getDataValueFactory().getNullChar( (StringDataValue) null)); // type
             row.setColumn(4, getNullAuthorizationID()); // grantor
             break;
+        case COLPERMSID_INDEX_NUM:
+            row.setColumn(1, getDataValueFactory().getNullChar( (StringDataValue) null)); // COLPERMSID
+            break;
         }
         return row;
     } // end of buildEmptyIndexRow
@@ -281,6 +288,11 @@
             String tableUUIDStr = colPerms.getTableUUID().toString();
             row.setColumn(2, getDataValueFactory().getCharDataValue( tableUUIDStr));
             row.setColumn(3, getDataValueFactory().getCharDataValue( colPerms.getType()));
+            break;
+        case COLPERMSID_INDEX_NUM:
+            row = getExecutionFactory().getIndexableRow( 1);
+            String colPermsUUIDStr = perm.getObjectID().toString();
+            row.setColumn(1, getDataValueFactory().getCharDataValue( colPermsUUIDStr));
             break;
         }
         return row;

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSROUTINEPERMSRowFactory.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSROUTINEPERMSRowFactory.java?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSROUTINEPERMSRowFactory.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSROUTINEPERMSRowFactory.java Tue Jul 11 21:48:05 2006
@@ -50,7 +50,7 @@
 	static final String TABLENAME_STRING = "SYSROUTINEPERMS";
 
     // Column numbers for the SYSROUTINEPERMS table. 1 based
-    private static final int SYSROUTINEPERMS_ROUTINPERMSID = 1;
+    private static final int ROUTINPERMSID_COL_NUM = 1;
     private static final int GRANTEE_COL_NUM = 2;
     private static final int GRANTOR_COL_NUM = 3;
     private static final int ALIASID_COL_NUM = 4;
@@ -58,21 +58,25 @@
     private static final int COLUMN_COUNT = 5;
 
     static final int GRANTEE_ALIAS_GRANTOR_INDEX_NUM = 0;
+    public static final int ROUTINEPERMSID_INDEX_NUM = 1;
 	private static final int[][] indexColumnPositions = 
 	{ 
-		{ GRANTEE_COL_NUM, ALIASID_COL_NUM, GRANTOR_COL_NUM}
+		{ GRANTEE_COL_NUM, ALIASID_COL_NUM, GRANTOR_COL_NUM},
+		{ ROUTINPERMSID_COL_NUM }
 	};
 	private static final String[][] indexColumnNames =
 	{
-		{"GRANTEE", "ALIASID", "GRANTOR"}
+		{"GRANTEE", "ALIASID", "GRANTOR"},
+		{"ROUTINEPERMSID"}
 	};
-    private static final boolean[] indexUniqueness = { true};
+    private static final boolean[] indexUniqueness = { true, true };
 
     private	static final String[] uuids =
     {
         "2057c01b-0103-0e39-b8e7-00000010f010" // catalog UUID
 		,"185e801c-0103-0e39-b8e7-00000010f010"	// heap UUID
-		,"c065801d-0103-0e39-b8e7-00000010f010"	// index
+		,"c065801d-0103-0e39-b8e7-00000010f010"	// index1
+		,"40f70088-010c-4c2f-c8de-0000000f43a0" // index2
     };
 
     private SystemColumn[] columnList;
@@ -113,7 +117,7 @@
                 routineID = rpd.getRoutineUUID().toString();
         }
 		ExecRow row = getExecutionFactory().getValueRow( COLUMN_COUNT);
-		row.setColumn( SYSROUTINEPERMS_ROUTINPERMSID, dvf.getCharDataValue(routinePermID));
+		row.setColumn( ROUTINPERMSID_COL_NUM, dvf.getCharDataValue(routinePermID));
         row.setColumn( GRANTEE_COL_NUM, grantee);
         row.setColumn( GRANTOR_COL_NUM, grantor);
         row.setColumn( ALIASID_COL_NUM, dvf.getCharDataValue( routineID));
@@ -131,7 +135,7 @@
             SanityManager.ASSERT( row.nColumns() == COLUMN_COUNT,
                                   "Wrong size row passed to SYSROUTINEPERMSRowFactory.buildDescriptor");
 
-        String routinePermsUUIDString = row.getColumn(SYSROUTINEPERMS_ROUTINPERMSID).getString();
+        String routinePermsUUIDString = row.getColumn(ROUTINPERMSID_COL_NUM).getString();
         UUID routinePermsUUID = getUUIDFactory().recreateUUID(routinePermsUUIDString);
         String aliasUUIDString = row.getColumn( ALIASID_COL_NUM).getString();
         UUID aliasUUID = getUUIDFactory().recreateUUID(aliasUUIDString);
@@ -152,9 +156,9 @@
         {
             columnList = new SystemColumn[ COLUMN_COUNT];
 
-            columnList[ SYSROUTINEPERMS_ROUTINPERMSID - 1] =
+            columnList[ ROUTINPERMSID_COL_NUM - 1] =
                 new SystemColumnImpl( convertIdCase( "ROUTINEPERMSID"),
-                                      SYSROUTINEPERMS_ROUTINPERMSID,
+                                      ROUTINPERMSID_COL_NUM,
                                       0, // precision
                                       0, // scale
                                       false, // nullability
@@ -218,6 +222,9 @@
             row.setColumn(2, getDataValueFactory().getNullChar( (StringDataValue) null)); // table UUID
             row.setColumn(3, getNullAuthorizationID()); // grantor
             break;
+        case ROUTINEPERMSID_INDEX_NUM:
+            row.setColumn(1, getDataValueFactory().getNullChar( (StringDataValue) null)); // ROUTINEPERMSID
+            break;
         }
         return row;
     } // end of buildEmptyIndexRow
@@ -249,6 +256,11 @@
             row.setColumn(1, getAuthorizationID( perm.getGrantee()));
             String routineUUIDStr = ((RoutinePermsDescriptor) perm).getRoutineUUID().toString();
             row.setColumn(2, getDataValueFactory().getCharDataValue( routineUUIDStr));
+            break;
+        case ROUTINEPERMSID_INDEX_NUM:
+            row = getExecutionFactory().getIndexableRow( 1);
+            String routinePermsUUIDStr = perm.getObjectID().toString();
+            row.setColumn(1, getDataValueFactory().getCharDataValue( routinePermsUUIDStr));
             break;
         }
         return row;

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSTABLEPERMSRowFactory.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSTABLEPERMSRowFactory.java?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSTABLEPERMSRowFactory.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSTABLEPERMSRowFactory.java Tue Jul 11 21:48:05 2006
@@ -50,7 +50,7 @@
 	static final String TABLENAME_STRING = "SYSTABLEPERMS";
 
     // Column numbers for the SYSTABLEPERMS table. 1 based
-	private static final int SYSTABLEPERMS_TABLEPERMSID = 1;
+	private static final int TABLEPERMSID_COL_NUM = 1;
     private static final int GRANTEE_COL_NUM = 2;
     private static final int GRANTOR_COL_NUM = 3;
     private static final int TABLEID_COL_NUM = 4;
@@ -63,21 +63,25 @@
     private static final int COLUMN_COUNT = 10;
 
     public static final int GRANTEE_TABLE_GRANTOR_INDEX_NUM = 0;
+    public static final int TABLEPERMSID_INDEX_NUM = 1;
 	private static final int[][] indexColumnPositions = 
 	{ 
-		{ GRANTEE_COL_NUM, TABLEID_COL_NUM, GRANTOR_COL_NUM}
+		{ GRANTEE_COL_NUM, TABLEID_COL_NUM, GRANTOR_COL_NUM},
+		{ TABLEPERMSID_COL_NUM }
 	};
 	private static final String[][] indexColumnNames =
 	{
-		{"GRANTEE", "TABLEID", "GRANTOR"}
+		{"GRANTEE", "TABLEID", "GRANTOR"},
+		{"TABLEPERMSID"}
 	};
-    private static final boolean[] indexUniqueness = { true};
+    private static final boolean[] indexUniqueness = { true, true};
     
     private	static final String[] uuids =
     {
         "b8450018-0103-0e39-b8e7-00000010f010" // catalog UUID
 		,"004b0019-0103-0e39-b8e7-00000010f010"	// heap UUID
-		,"c851401a-0103-0e39-b8e7-00000010f010"	// index
+		,"c851401a-0103-0e39-b8e7-00000010f010"	// index1
+		,"80220011-010c-426e-c599-0000000f1120"	// index2
     };
 
     private SystemColumn[] columnList;
@@ -130,7 +134,7 @@
             triggerPriv = tpd.getTriggerPriv();
         }
         ExecRow row = getExecutionFactory().getValueRow( COLUMN_COUNT);
-        row.setColumn( SYSTABLEPERMS_TABLEPERMSID, dvf.getCharDataValue(tablePermID));
+        row.setColumn( TABLEPERMSID_COL_NUM, dvf.getCharDataValue(tablePermID));
         row.setColumn( GRANTEE_COL_NUM, grantee);
         row.setColumn( GRANTOR_COL_NUM, grantor);
         row.setColumn( TABLEID_COL_NUM, dvf.getCharDataValue( tableID));
@@ -154,7 +158,7 @@
             SanityManager.ASSERT( row.nColumns() == COLUMN_COUNT,
                                   "Wrong size row passed to SYSTABLEPERMSRowFactory.buildDescriptor");
 
-        String tablePermsUUIDString = row.getColumn(SYSTABLEPERMS_TABLEPERMSID).getString();
+        String tablePermsUUIDString = row.getColumn(TABLEPERMSID_COL_NUM).getString();
         UUID tablePermsUUID = getUUIDFactory().recreateUUID(tablePermsUUIDString);
         String tableUUIDString = row.getColumn( TABLEID_COL_NUM).getString();
         UUID tableUUID = getUUIDFactory().recreateUUID(tableUUIDString);
@@ -198,9 +202,9 @@
         {
             columnList = new SystemColumn[ COLUMN_COUNT];
 
-            columnList[ SYSTABLEPERMS_TABLEPERMSID - 1] =
+            columnList[ TABLEPERMSID_COL_NUM - 1] =
                 new SystemColumnImpl( convertIdCase( "TABLEPERMSID"),
-                                      SYSTABLEPERMS_TABLEPERMSID,
+                                      TABLEPERMSID_COL_NUM,
                                       0, // precision
                                       0, // scale
                                       false, // nullability
@@ -309,6 +313,9 @@
             row.setColumn(2, getDataValueFactory().getNullChar( (StringDataValue) null)); // table UUID
             row.setColumn(3, getNullAuthorizationID()); // grantor
             break;
+        case TABLEPERMSID_INDEX_NUM:
+            row.setColumn(1, getDataValueFactory().getNullChar( (StringDataValue) null)); // TABLEPERMSID
+            break;
         }
         return row;
     } // end of buildEmptyIndexRow
@@ -338,6 +345,11 @@
             row.setColumn(1, getAuthorizationID( perm.getGrantee()));
             String tableUUIDStr = ((TablePermsDescriptor) perm).getTableUUID().toString();
             row.setColumn(2, getDataValueFactory().getCharDataValue( tableUUIDStr));
+            break;
+        case TABLEPERMSID_INDEX_NUM:
+            row = getExecutionFactory().getIndexableRow( 1);
+            String tablePermsUUIDStr = perm.getObjectID().toString();
+            row.setColumn(1, getDataValueFactory().getCharDataValue( tablePermsUUIDStr));
             break;
         }
         return row;

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?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- 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 Tue Jul 11 21:48:05 2006
@@ -76,7 +76,21 @@
 		dd.startWriting(lcc);
 		for( Iterator itr = grantees.iterator(); itr.hasNext();)
 		{
+			// It is possible for grant statement to look like following
+			//   grant execute on function f_abs to mamata2, mamata3;
+			// This means that dd.addRemovePermissionsDescriptor will be called
+			// twice for routinePermsDesc, once for each grantee.
+			// First it's called for mamta2. After a row is inserted for mamta2 
+			// into SYS.SYSROUTINEPERMS, the routinePermsDesc's uuid will get 
+			// populated with the uuid of the row that just got inserted into 
+			// SYS.SYSROUTINEPERMS for mamta2
+			// Next, before dd.addRemovePermissionsDescriptor gets called for 
+			// MAMTA3, we should set the routinePermsDesc's uuid to null or 
+			// otherwise, we will think that there is a duplicate row getting
+			// inserted for the same uuid.
 			String grantee = (String) itr.next();
+            if(grant)
+            	routinePermsDesc.setUUID(null);
 			dd.addRemovePermissionsDescriptor( grant, routinePermsDesc, grantee, tc);
 		}
 	} // end of executeConstantAction

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?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- 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 Tue Jul 11 21:48:05 2006
@@ -126,13 +126,46 @@
 		// Add or remove the privileges to/from the SYS.SYSTABLEPERMS and SYS.SYSCOLPERMS tables
 		for( Iterator itr = grantees.iterator(); itr.hasNext();)
 		{
+			// It is possible for grant statement to look like following
+			//   grant all privileges on t11 to mamata2, mamata3;
+			// This means that dd.addRemovePermissionsDescriptor will be called
+			// twice for tablePermsDesc, once for each grantee.
+			// First it's called for mamta2. After a row is inserted for mamta2 
+			// into SYS.SYSTABLEPERMS, the tablePermsDesc's uuid will get 
+			// populated with the uuid of the row that just got inserted into 
+			// SYS.SYSTABLEPERMS for mamta2
+			// Next, before dd.addRemovePermissionsDescriptor gets called for 
+			// MAMTA3, we should set the tablePermsDesc's uuid to null or 
+			// otherwise, we will think that there is a duplicate row getting
+			// inserted for the same uuid.
+			// Same logic applies to colPermsDescriptor
 			String grantee = (String) itr.next();
 			if( tablePermsDesc != null)
+			{
+				if (!grant)
+				{
+					TablePermsDescriptor tempTablePermsDesc = 
+						dd.getTablePermissions(td.getUUID(), grantee);
+					tablePermsDesc.setUUID(tempTablePermsDesc.getUUID());
+					
+				} else
+	            	tablePermsDesc.setUUID(null);
 				dd.addRemovePermissionsDescriptor( grant, tablePermsDesc, grantee, tc);
+			}
 			for( int i = 0; i < columnBitSets.length; i++)
 			{
 				if( colPermsDescs[i] != null)
-					dd.addRemovePermissionsDescriptor( grant, colPermsDescs[i], grantee, tc);
+				{
+					if (!grant)
+					{
+						ColPermsDescriptor tempColPermsDescriptor = 
+							dd.getColumnPermissions(td.getUUID(), colPermsDescs[i].getType() ,grant, grantee);
+						colPermsDescs[i].setUUID(tempColPermsDescriptor.getUUID());
+						
+					} else
+		            	colPermsDescs[i].setUUID(null);
+					dd.addRemovePermissionsDescriptor( grant, colPermsDescs[i], grantee, tc);					
+				}
 			}
 		}
 	} // end of executeConstantAction

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/syscat.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/syscat.out?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/syscat.out (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/syscat.out Tue Jul 11 21:48:05 2006
@@ -81,6 +81,7 @@
 SYSALIASES_INDEX3 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCHECKS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCOLPERMS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
+SYSCOLPERMS_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCOLUMNS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCOLUMNS_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCONGLOMERATES_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
@@ -98,12 +99,14 @@
 SYSKEYS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSREQUIREDPERM_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSROUTINEPERMS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
+SYSROUTINEPERMS_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSCHEMAS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSCHEMAS_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSTATEMENTS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSTATEMENTS_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSTATISTICS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSTABLEPERMS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
+SYSTABLEPERMS_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSTABLES_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSTABLES_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSTRIGGERS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
@@ -279,6 +282,7 @@
 SYSCHECKS |1     
 SYSCOLPERMS |0     
 SYSCOLPERMS |1     
+SYSCOLPERMS |1     
 SYSCOLUMNS |0     
 SYSCOLUMNS |1     
 SYSCOLUMNS |1     
@@ -306,6 +310,7 @@
 SYSREQUIREDPERM |1     
 SYSROUTINEPERMS |0     
 SYSROUTINEPERMS |1     
+SYSROUTINEPERMS |1     
 SYSSCHEMAS |0     
 SYSSCHEMAS |1     
 SYSSCHEMAS |1     
@@ -316,6 +321,7 @@
 SYSSTATISTICS |1     
 SYSTABLEPERMS |0     
 SYSTABLEPERMS |1     
+SYSTABLEPERMS |1     
 SYSTABLES |0     
 SYSTABLES |1     
 SYSTABLES |1     
@@ -499,6 +505,7 @@
 SYSCHECKS |1     
 SYSCOLPERMS |0     
 SYSCOLPERMS |1     
+SYSCOLPERMS |1     
 SYSCOLUMNS |0     
 SYSCOLUMNS |1     
 SYSCOLUMNS |1     
@@ -526,6 +533,7 @@
 SYSREQUIREDPERM |1     
 SYSROUTINEPERMS |0     
 SYSROUTINEPERMS |1     
+SYSROUTINEPERMS |1     
 SYSSCHEMAS |0     
 SYSSCHEMAS |1     
 SYSSCHEMAS |1     
@@ -535,6 +543,7 @@
 SYSSTATISTICS |0     
 SYSSTATISTICS |1     
 SYSTABLEPERMS |0     
+SYSTABLEPERMS |1     
 SYSTABLEPERMS |1     
 SYSTABLES |0     
 SYSTABLES |1     

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/jdk14/syscat.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/jdk14/syscat.out?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/jdk14/syscat.out (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/jdk14/syscat.out Tue Jul 11 21:48:05 2006
@@ -81,6 +81,7 @@
 SYSALIASES_INDEX3 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCHECKS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCOLPERMS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
+SYSCOLPERMS_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCOLUMNS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCOLUMNS_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCONGLOMERATES_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
@@ -98,12 +99,14 @@
 SYSKEYS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSREQUIREDPERM_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSROUTINEPERMS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
+SYSROUTINEPERMS_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSCHEMAS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSCHEMAS_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSTATEMENTS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSTATEMENTS_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSTATISTICS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSTABLEPERMS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
+SYSTABLEPERMS_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSTABLES_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSTABLES_INDEX2 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSTRIGGERS_INDEX1 |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
@@ -279,6 +282,7 @@
 SYSCHECKS |true 
 SYSCOLPERMS |false
 SYSCOLPERMS |true 
+SYSCOLPERMS |true 
 SYSCOLUMNS |false
 SYSCOLUMNS |true 
 SYSCOLUMNS |true 
@@ -306,6 +310,7 @@
 SYSREQUIREDPERM |true 
 SYSROUTINEPERMS |false
 SYSROUTINEPERMS |true 
+SYSROUTINEPERMS |true 
 SYSSCHEMAS |false
 SYSSCHEMAS |true 
 SYSSCHEMAS |true 
@@ -316,6 +321,7 @@
 SYSSTATISTICS |true 
 SYSTABLEPERMS |false
 SYSTABLEPERMS |true 
+SYSTABLEPERMS |true 
 SYSTABLES |false
 SYSTABLES |true 
 SYSTABLES |true 
@@ -499,6 +505,7 @@
 SYSCHECKS |true 
 SYSCOLPERMS |false
 SYSCOLPERMS |true 
+SYSCOLPERMS |true 
 SYSCOLUMNS |false
 SYSCOLUMNS |true 
 SYSCOLUMNS |true 
@@ -526,6 +533,7 @@
 SYSREQUIREDPERM |true 
 SYSROUTINEPERMS |false
 SYSROUTINEPERMS |true 
+SYSROUTINEPERMS |true 
 SYSSCHEMAS |false
 SYSSCHEMAS |true 
 SYSSCHEMAS |true 
@@ -535,6 +543,7 @@
 SYSSTATISTICS |false
 SYSSTATISTICS |true 
 SYSTABLEPERMS |false
+SYSTABLEPERMS |true 
 SYSTABLEPERMS |true 
 SYSTABLES |false
 SYSTABLES |true 

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/syscat.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/syscat.out?rev=421118&r1=421117&r2=421118&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/syscat.out (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/syscat.out Tue Jul 11 21:48:05 2006
@@ -81,6 +81,7 @@
 SYSALIASES_INDEX3                                                                                                               |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCHECKS_INDEX1                                                                                                                |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCOLPERMS_INDEX1                                                                                                              |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
+SYSCOLPERMS_INDEX2                                                                                                              |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCOLUMNS_INDEX1                                                                                                               |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCOLUMNS_INDEX2                                                                                                               |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSCONGLOMERATES_INDEX1                                                                                                         |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
@@ -98,12 +99,14 @@
 SYSKEYS_INDEX1                                                                                                                  |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSREQUIREDPERM_INDEX1                                                                                                          |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSROUTINEPERMS_INDEX1                                                                                                          |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
+SYSROUTINEPERMS_INDEX2                                                                                                          |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSCHEMAS_INDEX1                                                                                                               |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSCHEMAS_INDEX2                                                                                                               |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSTATEMENTS_INDEX1                                                                                                            |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSTATEMENTS_INDEX2                                                                                                            |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSSTATISTICS_INDEX1                                                                                                            |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSTABLEPERMS_INDEX1                                                                                                            |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
+SYSTABLEPERMS_INDEX2                                                                                                            |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSTABLES_INDEX1                                                                                                                |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSTABLES_INDEX2                                                                                                                |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
 SYSTRIGGERS_INDEX1                                                                                                              |{ derby.storage.initialPages=1, derby.storage.minimumRecordSize=1, derby.storage.pageReservedSpace=0, derby.storage.pageSize=4096, derby.storage.reusableRecordId=true }                                                                                                                                                                                                                                                                                                                                            
@@ -279,6 +282,7 @@
 SYSCHECKS                                                                                                                       |true 
 SYSCOLPERMS                                                                                                                     |false
 SYSCOLPERMS                                                                                                                     |true 
+SYSCOLPERMS                                                                                                                     |true 
 SYSCOLUMNS                                                                                                                      |false
 SYSCOLUMNS                                                                                                                      |true 
 SYSCOLUMNS                                                                                                                      |true 
@@ -306,6 +310,7 @@
 SYSREQUIREDPERM                                                                                                                 |true 
 SYSROUTINEPERMS                                                                                                                 |false
 SYSROUTINEPERMS                                                                                                                 |true 
+SYSROUTINEPERMS                                                                                                                 |true 
 SYSSCHEMAS                                                                                                                      |false
 SYSSCHEMAS                                                                                                                      |true 
 SYSSCHEMAS                                                                                                                      |true 
@@ -316,6 +321,7 @@
 SYSSTATISTICS                                                                                                                   |true 
 SYSTABLEPERMS                                                                                                                   |false
 SYSTABLEPERMS                                                                                                                   |true 
+SYSTABLEPERMS                                                                                                                   |true 
 SYSTABLES                                                                                                                       |false
 SYSTABLES                                                                                                                       |true 
 SYSTABLES                                                                                                                       |true 
@@ -499,6 +505,7 @@
 SYSCHECKS                                                                                                                       |true 
 SYSCOLPERMS                                                                                                                     |false
 SYSCOLPERMS                                                                                                                     |true 
+SYSCOLPERMS                                                                                                                     |true 
 SYSCOLUMNS                                                                                                                      |false
 SYSCOLUMNS                                                                                                                      |true 
 SYSCOLUMNS                                                                                                                      |true 
@@ -526,6 +533,7 @@
 SYSREQUIREDPERM                                                                                                                 |true 
 SYSROUTINEPERMS                                                                                                                 |false
 SYSROUTINEPERMS                                                                                                                 |true 
+SYSROUTINEPERMS                                                                                                                 |true 
 SYSSCHEMAS                                                                                                                      |false
 SYSSCHEMAS                                                                                                                      |true 
 SYSSCHEMAS                                                                                                                      |true 
@@ -535,6 +543,7 @@
 SYSSTATISTICS                                                                                                                   |false
 SYSSTATISTICS                                                                                                                   |true 
 SYSTABLEPERMS                                                                                                                   |false
+SYSTABLEPERMS                                                                                                                   |true 
 SYSTABLEPERMS                                                                                                                   |true 
 SYSTABLES                                                                                                                       |false
 SYSTABLES                                                                                                                       |true