You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2009/04/13 16:17:00 UTC

svn commit: r764481 - in /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog: DD_Version.java DataDictionaryImpl.java

Author: rhillegas
Date: Mon Apr 13 14:17:00 2009
New Revision: 764481

URL: http://svn.apache.org/viewvc?rev=764481&view=rev
Log:
DERBY-4127: Port 764471 from 10.5 branch to main.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DD_Version.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DD_Version.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DD_Version.java?rev=764481&r1=764480&r2=764481&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DD_Version.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DD_Version.java Mon Apr 13 14:17:00 2009
@@ -61,6 +61,7 @@
 import java.io.ObjectOutput;
 import java.sql.Types;
 import java.util.Enumeration;
+import java.util.HashSet;
 import java.util.Properties;
 
 /**
@@ -364,6 +365,8 @@
 		
 		*/
 
+        HashSet  newlyCreatedRoutines = new HashSet();
+        
 		if (fromMajorVersionNumber <= DataDictionary.DD_VERSION_DERBY_10_3)
 		{
 			// Add new system catalogs created for roles
@@ -391,23 +394,18 @@
             // since 10.0.  Will not work to upgrade any db previous to 10.0,
             // thus only checks for 10.0 rather than <= 10.0.
             bootingDictionary.create_10_1_system_procedures(
-                tc, 
+                tc,
+                newlyCreatedRoutines,
                 bootingDictionary.getSystemUtilSchemaDescriptor().getUUID());
         }
 
-        if (fromMajorVersionNumber <= DataDictionary.DD_VERSION_DERBY_10_4)
-        {
-            // On ugrade from versions before 10.5, create system procedures
-            // added in 10.5.
-            bootingDictionary.create_10_5_system_procedures(tc);
-        }
-
         if (fromMajorVersionNumber <= DataDictionary.DD_VERSION_DERBY_10_1)
         {
             // On ugrade from versions before 10.2, create system procedures
             // added in 10.2.
             bootingDictionary.create_10_2_system_procedures(
-                tc, 
+                tc,
+                newlyCreatedRoutines,
                 bootingDictionary.getSystemUtilSchemaDescriptor().getUUID());
 
 			if (SanityManager.DEBUG)
@@ -418,17 +416,33 @@
 
 			// Change system schemas to be owned by aid
 			bootingDictionary.updateSystemSchemaAuthorization(aid, tc);
+
+            // make sure we flag that we need to add permissions to the
+            // following pre-existing routines:
+            newlyCreatedRoutines.add( "SYSCS_INPLACE_COMPRESS_TABLE" );
+            newlyCreatedRoutines.add( "SYSCS_GET_RUNTIMESTATISTICS" );
+            newlyCreatedRoutines.add( "SYSCS_SET_RUNTIMESTATISTICS" );
+            newlyCreatedRoutines.add( "SYSCS_COMPRESS_TABLE" );
+            newlyCreatedRoutines.add( "SYSCS_SET_STATISTICS_TIMING" );
 			
-			// Grant PUBLIC access to some system routines
-			bootingDictionary.grantPublicAccessToSystemRoutines(tc, aid);
         }
 
         if (fromMajorVersionNumber <= DataDictionary.DD_VERSION_DERBY_10_2)
         {
             // On ugrade from versions before 10.3, create system procedures
             // added in 10.3.
-            bootingDictionary.create_10_3_system_procedures(tc);
+            bootingDictionary.create_10_3_system_procedures(tc, newlyCreatedRoutines );
         }
+
+        if (fromMajorVersionNumber <= DataDictionary.DD_VERSION_DERBY_10_4)
+        {
+            // On upgrade from versions before 10.5, create system procedures
+            // added in 10.5.
+            bootingDictionary.create_10_5_system_procedures(tc, newlyCreatedRoutines);
+        }
+
+        // Grant PUBLIC access to some system routines
+        bootingDictionary.grantPublicAccessToSystemRoutines(newlyCreatedRoutines, tc, aid);
 	}
 
 	/**

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=764481&r1=764480&r2=764481&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 Mon Apr 13 14:17:00 2009
@@ -141,6 +141,7 @@
 import java.util.GregorianCalendar;
 import java.util.Hashtable;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Properties;
 import java.util.Vector;
 
@@ -710,15 +711,19 @@
 			if (create) {
 				String userName = IdUtil.getUserNameFromURLProps(startParams);
 				authorizationDatabaseOwner = IdUtil.getUserAuthorizationId(userName);
-			
+
+                HashSet newlyCreatedRoutines = new HashSet();
+                
 				// create any required tables.
 				createDictionaryTables(startParams, bootingTC, ddg);
 				//create procedures for network server metadata
-				create_SYSIBM_procedures(bootingTC);
+				create_SYSIBM_procedures(bootingTC, newlyCreatedRoutines );
 				//create metadata sps statement required for network server
 				createSystemSps(bootingTC);
                 // create the SYSCS_UTIL system procedures)
-                create_SYSCS_procedures(bootingTC);
+                create_SYSCS_procedures(bootingTC, newlyCreatedRoutines );
+                // now grant execute permission on some of these routines
+                grantPublicAccessToSystemRoutines( newlyCreatedRoutines, bootingTC, authorizationDatabaseOwner );
 				// log the current dictionary version
 				dictionaryVersion = softwareVersion;
 
@@ -743,9 +748,7 @@
 			} else {
 				// Get the ids for non-core tables
 				loadDictionaryTables(bootingTC, ddg, startParams);
-				SchemaDescriptor sd = locateSchemaRow(SchemaDescriptor.IBM_SYSTEM_SCHEMA_NAME,
-								 bootingTC);
-				authorizationDatabaseOwner = sd.getAuthorizationId();
+
 				String sqlAuth = PropertyUtil.getDatabaseProperty(bootingTC,
 										Property.SQL_AUTHORIZATION_PROPERTY);
 
@@ -6358,6 +6361,9 @@
 		updateSchemaAuth(SchemaDescriptor.STD_SQLJ_SCHEMA_NAME, aid, tc);
 		updateSchemaAuth(SchemaDescriptor.STD_SYSTEM_DIAG_SCHEMA_NAME, aid, tc);
 		updateSchemaAuth(SchemaDescriptor.STD_SYSTEM_UTIL_SCHEMA_NAME, aid, tc);
+
+        // now reset our understanding of who owns the database
+        resetDatabaseOwner( tc );
 	}
 
 	/**
@@ -6899,10 +6905,30 @@
 		dictionaryVersion = (DD_Version)tc.getProperty(
 											DataDictionary.CORE_DATA_DICTIONARY_VERSION);
 
+        resetDatabaseOwner( tc );
+        
 		softwareVersion.upgradeIfNeeded(dictionaryVersion, tc, startParams);
 	}
 
 	/**
+	 *	Reset the database owner according to what is stored in the catalogs.
+     * This can change at upgrade time so we have factored this logic into
+     * a separately callable method.
+	 *
+	 *
+	 *	@param	tc		TransactionController
+     *
+	 *  @exception StandardException		Thrown on error
+	 */
+    public void resetDatabaseOwner( TransactionController tc )
+        throws StandardException
+    {
+        SchemaDescriptor sd = locateSchemaRow
+            (SchemaDescriptor.IBM_SYSTEM_SCHEMA_NAME, tc );
+        authorizationDatabaseOwner = sd.getAuthorizationId();
+    }
+    
+	/**
 	 * Initialize indices for an array of catalogs
 	 *
 	 *	@param	ddg		DataDescriptorGenerator
@@ -9390,6 +9416,7 @@
      * @param return_type   null for procedure.  For functions the return type
      *                      of the function.
      *
+     * @param newlyCreatedRoutines evolving set of routines, some of which may need permissions later on
      * @param tc            an instance of the TransactionController
      *
      * @param procClass     the fully qualified name of the class that contains
@@ -9409,6 +9436,7 @@
     short                   routine_sql_control,
     boolean               isDeterministic,
     TypeDescriptor          return_type,
+    HashSet               newlyCreatedRoutines,
     TransactionController   tc,
     String procClass)
         throws StandardException
@@ -9477,6 +9505,8 @@
         addDescriptor(
             ads, null, DataDictionary.SYSALIASES_CATALOG_NUM, false, tc);
 
+        newlyCreatedRoutines.add( routine_name );
+
 		return routine_uuid;
     }
 
@@ -9507,6 +9537,7 @@
      * @param return_type   null for procedure.  For functions the return type
      *                      of the function.
      *
+     * @param newlyCreatedRoutines evolving set of routines, some of which may need permissions later on
      * @param tc            an instance of the TransactionController
      *
      * @return UUID         UUID of system routine that got created.
@@ -9523,13 +9554,14 @@
     short                   routine_sql_control,
     boolean               isDeterministic,
     TypeDescriptor          return_type,
+    HashSet               newlyCreatedRoutines,
     TransactionController   tc)
         throws StandardException
     {
         UUID routine_uuid = createSystemProcedureOrFunction(routine_name,
         schema_uuid, arg_names, arg_types,
         num_out_param, num_result_sets, routine_sql_control, isDeterministic,
-        return_type, tc, "org.apache.derby.catalog.SystemProcedures");
+        return_type, newlyCreatedRoutines, tc, "org.apache.derby.catalog.SystemProcedures");
         return routine_uuid;
     }
 
@@ -9543,16 +9575,18 @@
      *
      * @param tc     transaction controller to use.  Counts on caller to
      *               commit.
+     * @param newlyCreatedRoutines evolving set of routines which may need to be given permissions later on
      *
 	 * @exception  StandardException  Standard exception policy.
      **/
     private final void create_SYSCS_procedures(
-    TransactionController   tc)
+                                               TransactionController   tc, HashSet newlyCreatedRoutines )
         throws StandardException
     {
         // Types used for routine parameters and return types, all nullable.
         TypeDescriptor varchar32672Type = DataTypeDescriptor.getCatalogType(
                 Types.VARCHAR, 32672);
+
         /*
 		** SYSCS_UTIL routines.
 		*/
@@ -9588,6 +9622,7 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -9615,9 +9650,8 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
-
-			createRoutinePermPublicDescriptor(routine_uuid, tc);
         }
 
         // void SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE()
@@ -9632,6 +9666,7 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -9647,6 +9682,7 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -9662,6 +9698,7 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -9686,6 +9723,7 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -9712,6 +9750,7 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -9733,6 +9772,7 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -9754,9 +9794,8 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
-
-			createRoutinePermPublicDescriptor(routine_uuid, tc);
         }
 
         // void SYSCS_UTIL.SYSCS_SET_STATISTICS_TIMING(smallint)
@@ -9777,9 +9816,8 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
-
-			createRoutinePermPublicDescriptor(routine_uuid, tc);
         }
 
 
@@ -9810,6 +9848,7 @@
                 false,
                 DataTypeDescriptor.getCatalogType(
                     Types.VARCHAR, Limits.DB2_VARCHAR_MAXWIDTH),
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -9834,6 +9873,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 TypeDescriptor.INTEGER,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -9851,6 +9891,7 @@
                 false,
                 DataTypeDescriptor.getCatalogType(
                     Types.VARCHAR, Limits.DB2_VARCHAR_MAXWIDTH),
+                newlyCreatedRoutines,
 
                 /*
                 TODO - mikem, wants to be a CLOB, but don't know how to do 
@@ -9859,8 +9900,6 @@
                     Types.CLOB, Limits.DB2_LOB_MAXWIDTH),
                 */
                 tc);
-
-			createRoutinePermPublicDescriptor(routine_uuid, tc);
         }
 
 
@@ -9893,6 +9932,7 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -9916,6 +9956,7 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 	
@@ -9938,6 +9979,7 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }	
 
@@ -9976,6 +10018,7 @@
 				RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10012,6 +10055,7 @@
 				RoutineAliasInfo.READS_SQL_DATA,
                false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10053,6 +10097,7 @@
 				RoutineAliasInfo.MODIFIES_SQL_DATA,
                false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10097,6 +10142,7 @@
 				RoutineAliasInfo.MODIFIES_SQL_DATA,
                false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10132,17 +10178,18 @@
 				RoutineAliasInfo.MODIFIES_SQL_DATA,
                false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
         // add 10.1 specific system procedures
-        create_10_1_system_procedures(tc, sysUtilUUID);
+        create_10_1_system_procedures(tc, newlyCreatedRoutines, sysUtilUUID);
         // add 10.2 specific system procedures
-        create_10_2_system_procedures(tc, sysUtilUUID);
+        create_10_2_system_procedures(tc, newlyCreatedRoutines, sysUtilUUID);
         // add 10.3 specific system procedures
-        create_10_3_system_procedures(tc);
+        create_10_3_system_procedures(tc, newlyCreatedRoutines );
         // add 10.5 specific system procedures
-        create_10_5_system_procedures(tc);
+        create_10_5_system_procedures(tc, newlyCreatedRoutines );
     }
 
     /**
@@ -10153,13 +10200,14 @@
 	 * calls this method.
      * <p>
      *
+     * @param newlyCreatedRoutines evolving set of routines which we're adding (some may need permissions later on)
      * @param tc     transaction controller to use.  Counts on caller to
      *               commit.
      *
 	 * @exception  StandardException  Standard exception policy.
      **/
     protected final void create_SYSIBM_procedures(
-    TransactionController   tc)
+                                                  TransactionController   tc, HashSet newlyCreatedRoutines )
         throws StandardException
     {
         /*
@@ -10223,6 +10271,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10253,6 +10302,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10283,6 +10333,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10313,6 +10364,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10345,6 +10397,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10378,6 +10431,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10410,6 +10464,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10442,6 +10497,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10474,6 +10530,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10511,6 +10568,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10548,6 +10606,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10574,6 +10633,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10609,6 +10669,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10624,6 +10685,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10631,28 +10693,39 @@
     
     /**
      * Grant PUBLIC access to specific system routines. Currently, this is 
-     * done for some routines in SYSCS_UTIL schema. 
+     * done for some routines in SYSCS_UTIL schema. We grant access to routines
+     * which we have just added. Doing it this way lets us declare these
+     * routines in one place and re-use this logic during database creation and
+     * during upgrade.
      * 
      * @param tc	TransactionController to use
      * @param authorizationID	authorization ID of the permission grantor
      * @throws StandardException	Standard exception policy.
      */
-    public void grantPublicAccessToSystemRoutines(TransactionController tc, 
+    public void grantPublicAccessToSystemRoutines(HashSet newlyCreatedRoutines, TransactionController tc, 
     						String authorizationID) throws StandardException {
     	
     	// Get schema ID for SYSCS_UTIL schema
     	String schemaID = getSystemUtilSchemaDescriptor().getUUID().toString();
     	
     	for(int i=0; i < sysUtilProceduresWithPublicAccess.length; i++) {
+
+            String  routineName = sysUtilProceduresWithPublicAccess[i];
+            if ( !newlyCreatedRoutines.contains( routineName ) ) { continue; }
+            
     		grantPublicAccessToSystemRoutine(schemaID, 
-    				sysUtilProceduresWithPublicAccess[i], 
+    				routineName, 
 								AliasInfo.ALIAS_NAME_SPACE_PROCEDURE_AS_CHAR, 
 								tc, authorizationID);
     	}
     	
     	for(int i=0; i < sysUtilFunctionsWithPublicAccess.length; i++) {
+            
+            String routineName = sysUtilFunctionsWithPublicAccess[i];
+            if ( !newlyCreatedRoutines.contains( routineName ) ) { continue; }
+            
     		grantPublicAccessToSystemRoutine(schemaID, 
-    				sysUtilFunctionsWithPublicAccess[i], 
+    				routineName, 
 								AliasInfo.ALIAS_NAME_SPACE_FUNCTION_AS_CHAR, 
 								tc, authorizationID);
     	}
@@ -10680,11 +10753,11 @@
     	// For system routines, a valid alias descriptor will be returned.
     	AliasDescriptor ad = getAliasDescriptor(schemaID, routineName, 
     											nameSpace);
-    	
-    	if (SanityManager.DEBUG) {
-			SanityManager.ASSERT((ad != null), "Failed to get AliasDescriptor" 
-											+ " of the routine");
-    	}
+        //
+        // When upgrading from 10.1, it can happen that we haven't yet created
+        // all public procedures. We forgive that possibility here and just return.
+        //
+        if ( ad == null ) { return; }
     	
     	UUID routineUUID = ad.getUUID();
     	createRoutinePermPublicDescriptor(routineUUID, tc, authorizationID);
@@ -10693,23 +10766,6 @@
 
 	/**
 	 * Create RoutinePermDescriptor to grant access to PUBLIC for
-	 * this system routine. Currently only SYSUTIL routines need access
-	 * granted to execute them when a database is created/upgraded.
-	 *
-	 * @param routineUUID   uuid of the routine
-	 * @param tc			TransactionController to use
-	 *
-	 * @exception  StandardException  Standard exception policy.
-	 */
-	void createRoutinePermPublicDescriptor(
-	UUID routineUUID,
-	TransactionController tc) throws StandardException
-	{
-		createRoutinePermPublicDescriptor(routineUUID, tc, authorizationDatabaseOwner);
-	}
-
-	/**
-	 * Create RoutinePermDescriptor to grant access to PUBLIC for
 	 * this system routine using the grantor specified in authorizationID.
 	 * 
 	 * @param routineUUID	uuid of the routine
@@ -10740,12 +10796,15 @@
      * database, or code doing hard upgrade from previous version.
      * <p>
      *
+     * @param tc                 booting transaction
+     * @param newlyCreatedRoutines set of routines we are creating (used to add permissions later on)
      * @param sysUtilUUID   uuid of the SYSUTIL schema.
      *
 	 * @exception  StandardException  Standard exception policy.
      **/
     void create_10_1_system_procedures(
     TransactionController   tc,
+    HashSet               newlyCreatedRoutines,
     UUID                    sysUtilUUID)
 		throws StandardException
     { 
@@ -10786,9 +10845,8 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
-
-			createRoutinePermPublicDescriptor(routine_uuid, tc);
         }
     }
 
@@ -10800,12 +10858,15 @@
      * database, or code doing hard upgrade from previous version.
      * <p>
      *
+     * @param tc booting transaction
+     * @param newlyCreatedRoutines set of routines we are creating (used to add permissions later on)
      * @param sysUtilUUID   uuid of the SYSUTIL schema.
      *
      * @exception  StandardException  Standard exception policy.
      **/
     void create_10_2_system_procedures(
     TransactionController   tc,
+    HashSet               newlyCreatedRoutines,
     UUID                    sysUtilUUID)
 		throws StandardException
     {
@@ -10834,6 +10895,7 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10864,6 +10926,7 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10895,6 +10958,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -10928,6 +10992,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
     }
@@ -10939,11 +11004,13 @@
      * database, or code doing hard upgrade from previous version.
      *
      * @param tc            an instance of the TransactionController class.
+     * @param newlyCreatedRoutines set of routines we are creating (used to add permissions later on)
      *
      * @throws StandardException  Standard exception policy.
      **/
     private void create_10_3_system_procedures_SYSIBM(
-        TransactionController   tc)
+        TransactionController   tc,
+        HashSet               newlyCreatedRoutines )
         throws StandardException {
         //create 10.3 functions used by LOB methods.
         UUID schema_uuid = getSysIBMSchemaDescriptor().getUUID();
@@ -10963,6 +11030,7 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 TypeDescriptor.INTEGER,
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -10982,6 +11050,7 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 null,
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11008,6 +11077,7 @@
                 false,
                 DataTypeDescriptor.getCatalogType(
                     Types.BIGINT),
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11033,6 +11103,7 @@
                 false,
                 DataTypeDescriptor.getCatalogType(
                     Types.BIGINT),
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11053,6 +11124,7 @@
                 false,
                 DataTypeDescriptor.getCatalogType(
                     Types.BIGINT),
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11079,6 +11151,7 @@
                 DataTypeDescriptor.getCatalogType(
                     Types.VARCHAR,
                     LOBStoredProcedure.MAX_CLOB_RETURN_LEN),
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11105,6 +11178,7 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 null,
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11128,6 +11202,7 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 null,
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11149,6 +11224,7 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 TypeDescriptor.INTEGER,
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11168,6 +11244,7 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 null,
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11194,6 +11271,7 @@
                 false,
                 DataTypeDescriptor.getCatalogType(
                     Types.BIGINT),
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11219,6 +11297,7 @@
                 false,
                 DataTypeDescriptor.getCatalogType(
                     Types.BIGINT),
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11241,6 +11320,7 @@
                 false,
                 DataTypeDescriptor.getCatalogType(
                     Types.BIGINT),
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11267,6 +11347,7 @@
                 DataTypeDescriptor.getCatalogType(
                     Types.VARBINARY,
                     LOBStoredProcedure.MAX_BLOB_RETURN_LEN),
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11293,6 +11374,7 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 null,
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11316,6 +11398,7 @@
                 RoutineAliasInfo.CONTAINS_SQL,
                 false,
                 null,
+                newlyCreatedRoutines,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
         }
@@ -11325,9 +11408,10 @@
      * Create the System procedures that are added to 10.5.
      * 
      * @param tc an instance of the TransactionController.
+     * @param newlyCreatedRoutines set of routines we are creating (used to add permissions later on)
      * @throws StandardException Standard exception policy.
      */
-    void create_10_5_system_procedures(TransactionController tc)
+    void create_10_5_system_procedures(TransactionController tc, HashSet newlyCreatedRoutines )
     throws StandardException
     {
         // Create the procedures in the SYSCS_UTIL schema.
@@ -11356,9 +11440,8 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
-
-            createRoutinePermPublicDescriptor(routine_uuid, tc);
         }
     }
 
@@ -11366,14 +11449,15 @@
      * Create the System procedures that are added in 10.3.
      *
      * @param tc an instance of the TransactionController.
+     * @param newlyCreatedRoutines set of routines we are creating (used to add permissions later on)
      * @throws StandardException Standard exception policy. 
      */
-    void create_10_3_system_procedures(TransactionController tc) 
+    void create_10_3_system_procedures(TransactionController tc, HashSet newlyCreatedRoutines ) 
     throws StandardException {
         // Create the procedures in the SYSCS_UTIL schema.
-        create_10_3_system_procedures_SYSCS_UTIL(tc);
+        create_10_3_system_procedures_SYSCS_UTIL(tc, newlyCreatedRoutines );
         //create the procedures in the SYSIBM schema
-        create_10_3_system_procedures_SYSIBM(tc);
+        create_10_3_system_procedures_SYSIBM(tc, newlyCreatedRoutines );
     }
     /**
      * Create system procedures that are part of the
@@ -11384,10 +11468,10 @@
      * <p>
      *
      * @param tc an instance of the Transaction Controller.
+     * @param newlyCreatedRoutines set of routines we are creating (used to add permissions later on)
      * @exception  StandardException  Standard exception policy.
      **/
-    void create_10_3_system_procedures_SYSCS_UTIL(
-    TransactionController   tc)
+    void create_10_3_system_procedures_SYSCS_UTIL( TransactionController   tc, HashSet newlyCreatedRoutines )
         throws StandardException
     {
         UUID  sysUtilUUID = getSystemUtilSchemaDescriptor().getUUID();
@@ -11429,6 +11513,7 @@
 				RoutineAliasInfo.READS_SQL_DATA,
                false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -11470,6 +11555,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -11509,6 +11595,7 @@
                RoutineAliasInfo.MODIFIES_SQL_DATA,
                false,
                (TypeDescriptor) null,
+                newlyCreatedRoutines,
                tc);
         }
 
@@ -11555,6 +11642,7 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
 
@@ -11571,6 +11659,7 @@
                 RoutineAliasInfo.NO_SQL,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
         
@@ -11589,6 +11678,7 @@
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }
         
@@ -11606,6 +11696,7 @@
                 RoutineAliasInfo.READS_SQL_DATA,
                 false,
                 CATALOG_TYPE_SYSTEM_IDENTIFIER,
+                newlyCreatedRoutines,
                 tc);
         }
         
@@ -11621,6 +11712,7 @@
                 RoutineAliasInfo.NO_SQL,
                 false,
                 (TypeDescriptor) null,
+                newlyCreatedRoutines,
                 tc);
         }