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 da...@apache.org on 2008/01/22 18:50:24 UTC
svn commit: r614273 - 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/
storeless/org/apache/derby/impl/storeless/ testing/org/apache/derbyTest...
Author: dag
Date: Tue Jan 22 09:50:10 2008
New Revision: 614273
URL: http://svn.apache.org/viewvc?rev=614273&view=rev
Log:
DERBY-3137 SQL roles: add catalog support
Patch DERBY-3137-uuid adds a UUID column to SYS.SYSROLES. The new column is needed for
implementing persistent dependencies on role definitions and grants.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDescriptorGenerator.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/RoleDescriptor.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/SYSROLESRowFactory.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateRoleConstantAction.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GrantRoleConstantAction.java
db/derby/code/trunk/java/storeless/org/apache/derby/impl/storeless/EmptyDictionary.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/SystemCatalogTest.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDescriptorGenerator.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDescriptorGenerator.java?rev=614273&r1=614272&r2=614273&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDescriptorGenerator.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/DataDescriptorGenerator.java Tue Jan 22 09:50:10 2008
@@ -488,6 +488,7 @@
/**
* Create a new role descriptor
*
+ * @param uuid unique identifier for this role descriptor in time and space
* @param roleName the name of the role for which a new descriptor
* is created
* @param grantee authorization identifier of grantee
@@ -497,7 +498,8 @@
* @param isDef if true, this descriptor represents a role
* definition, otherwise it represents a grant.
*/
- public RoleDescriptor newRoleDescriptor(String roleName,
+ public RoleDescriptor newRoleDescriptor(UUID uuid,
+ String roleName,
String grantee,
String grantor,
boolean withadminoption,
@@ -505,6 +507,7 @@
throws StandardException
{
return new RoleDescriptor(dataDictionary,
+ uuid,
roleName,
grantee,
grantor,
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=614273&r1=614272&r2=614273&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 Jan 22 09:50:10 2008
@@ -1843,6 +1843,18 @@
throws StandardException;
/**
+ * Get the descriptor corresponding to the uuid
+ *
+ * @param uuid
+ *
+ * @return The descriptor for the role (definition or grant descriptor)
+ *
+ * @exception StandardException Thrown on error
+ */
+ public RoleDescriptor getRoleDescriptor(UUID uuid)
+ throws StandardException;
+
+ /**
* Get a role descriptor for a role grant
*
* @param roleName The name of the role whose definition we seek
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/RoleDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/RoleDescriptor.java?rev=614273&r1=614272&r2=614273&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/RoleDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/dictionary/RoleDescriptor.java Tue Jan 22 09:50:10 2008
@@ -21,16 +21,23 @@
package org.apache.derby.iapi.sql.dictionary;
+import org.apache.derby.catalog.UUID;
+import org.apache.derby.catalog.DependableFinder;
+import org.apache.derby.catalog.Dependable;
import org.apache.derby.iapi.error.StandardException;
import org.apache.derby.iapi.services.sanity.SanityManager;
+import org.apache.derby.iapi.services.io.StoredFormatIds;
import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
+import org.apache.derby.iapi.sql.depend.Provider;
import org.apache.derby.iapi.store.access.TransactionController;
+import org.apache.derby.impl.sql.catalog.DDdependableFinder;
/**
* This class is used by rows in the SYS.SYSROLES system table.
*/
public class RoleDescriptor extends TupleDescriptor
{
+ private final UUID uuid;
private final String roleName;
private final String grantee;
private final String grantor;
@@ -42,6 +49,8 @@
* Constructor
*
* @param dd data dictionary
+ * @param uuid unique identification in time and space of this role
+ * descriptor
* @param roleName
* @param grantee
* @param grantor
@@ -50,12 +59,14 @@
*
*/
RoleDescriptor(DataDictionary dd,
+ UUID uuid,
String roleName,
String grantee,
String grantor,
boolean withAdminOption,
boolean isDef) {
super(dd);
+ this.uuid = uuid;
this.roleName = roleName;
this.grantee = grantee;
this.grantor = grantor;
@@ -63,6 +74,10 @@
this.isDef = isDef;
}
+ public UUID getUUID() {
+ return uuid;
+ }
+
public String getGrantee() {
return grantee;
}
@@ -89,7 +104,8 @@
public String toString() {
if (SanityManager.DEBUG) {
- return "roleName: " + roleName + "\n" +
+ return "uuid: " + uuid + "\n" +
+ "roleName: " + roleName + "\n" +
"grantor: " + grantor + "\n" +
"grantee: " + grantee + "\n" +
"withadminoption: " + withAdminOption + "\n" +
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=614273&r1=614272&r2=614273&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 Jan 22 09:50:10 2008
@@ -1747,7 +1747,8 @@
keyRow.setColumn(2, granteeOrderable);
keyRow.setColumn(3, grantorOrderable);
- ti.deleteRow(tc, keyRow, SYSROLESRowFactory.SYSROLES_INDEX1_ID );
+ ti.deleteRow(tc, keyRow,
+ SYSROLESRowFactory.SYSROLES_INDEX_ID_EE_OR_IDX);
}
@@ -2696,7 +2697,7 @@
dropRoleGrants(ti,
rf,
- rf.SYSROLES_GRANTEE_IN_INDEX1,
+ rf.SYSROLES_GRANTEE_COLPOS_IN_INDEX_ID_EE_OR,
grantee,
tc);
}
@@ -2720,7 +2721,7 @@
dropRoleGrants(ti,
rf,
- rf.SYSROLES_ROLEID_IN_INDEX1,
+ rf.SYSROLES_ROLEID_COLPOS_IN_INDEX_ID_EE_OR,
roleName,
tc);
}
@@ -2758,7 +2759,7 @@
false);
ScanController sc = tc.openScan(
- ti.getIndexConglomerate(rf.SYSROLES_INDEX1_ID),
+ ti.getIndexConglomerate(rf.SYSROLES_INDEX_ID_EE_OR_IDX),
false, // don't hold open across commit
0, // for update
TransactionController.MODE_RECORD,
@@ -2773,13 +2774,13 @@
try {
ExecRow outRow = rf.makeEmptyRow();
ExecIndexRow indexRow = getIndexRowFromHeapRow(
- ti.getIndexRowGenerator(rf.SYSROLES_INDEX1_ID),
+ ti.getIndexRowGenerator(rf.SYSROLES_INDEX_ID_EE_OR_IDX),
heapCC.newRowLocationTemplate(),
outRow);
while (sc.fetchNext(indexRow.getRowArray())) {
ti.deleteRow(tc, indexRow,
- rf.SYSROLES_INDEX1_ID);
+ rf.SYSROLES_INDEX_ID_EE_OR_IDX);
}
} finally {
if (sc != null) {
@@ -11506,6 +11507,43 @@
return rd;
}
+
+ /**
+ * Get the descriptor corresponding to the uuid
+ *
+ * @param uuid
+ *
+ * @return The descriptor for the role (definition or grant descriptor)
+ *
+ * @exception StandardException Thrown on error
+ */
+ public RoleDescriptor getRoleDescriptor(UUID uuid)
+ throws StandardException
+ {
+ DataValueDescriptor UUIDStringOrderable;
+
+ TabInfoImpl ti = getNonCoreTI(SYSROLES_CATALOG_NUM);
+
+ /* Use UUIDStringOrderable in both start and stop position for
+ * scan.
+ */
+ UUIDStringOrderable = getIDValueAsCHAR(uuid);
+
+ /* Set up the start/stop position for the scan */
+ ExecIndexRow keyRow = exFactory.getIndexableRow(2);
+ keyRow.setColumn(1, UUIDStringOrderable);
+
+ return (RoleDescriptor)
+ getDescriptorViaIndex(
+ SYSROLESRowFactory.SYSROLES_INDEX_UUID_IDX,
+ keyRow,
+ (ScanQualifier [][]) null,
+ ti,
+ (TupleDescriptor) null,
+ (List) null,
+ false);
+ }
+
/**
* Get a role descriptor for a role grant
@@ -11559,7 +11597,7 @@
return (RoleDescriptor)
getDescriptorViaIndex(
- SYSROLESRowFactory.SYSROLES_INDEX2_ID,
+ SYSROLESRowFactory.SYSROLES_INDEX_ID_DEF_IDX,
keyRow,
(ScanQualifier [][]) null,
ti,
@@ -11609,12 +11647,12 @@
return (RoleDescriptor)
getDescriptorViaIndex(
- SYSROLESRowFactory.SYSROLES_INDEX1_ID,
- keyRow,
- (ScanQualifier [][]) null,
- ti,
- (TupleDescriptor) null,
- (List) null,
- false);
+ SYSROLESRowFactory.SYSROLES_INDEX_ID_EE_OR_IDX,
+ keyRow,
+ (ScanQualifier [][]) null,
+ ti,
+ (TupleDescriptor) null,
+ (List) null,
+ false);
}
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSROLESRowFactory.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSROLESRowFactory.java?rev=614273&r1=614272&r2=614273&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSROLESRowFactory.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/SYSROLESRowFactory.java Tue Jan 22 09:50:10 2008
@@ -21,6 +21,7 @@
package org.apache.derby.impl.sql.catalog;
+import org.apache.derby.catalog.UUID;
import org.apache.derby.iapi.types.SQLChar;
import org.apache.derby.iapi.types.SQLVarchar;
import org.apache.derby.iapi.types.DataValueDescriptor;
@@ -45,34 +46,44 @@
{
private static final String TABLENAME_STRING = "SYSROLES";
- private static final int SYSROLES_COLUMN_COUNT = 5;
+ private static final int SYSROLES_COLUMN_COUNT = 6;
/* Column #s for sysinfo (1 based) */
- private static final int SYSROLES_ROLEID = 1;
- private static final int SYSROLES_GRANTEE = 2;
- private static final int SYSROLES_GRANTOR = 3;
- private static final int SYSROLES_WITHADMINOPTION = 4;
- private static final int SYSROLES_ISDEF = 5;
-
- static final int SYSROLES_INDEX1_ID = 0;
- static final int SYSROLES_INDEX2_ID = 1;
-
+ private static final int SYSROLES_ROLE_UUID = 1;
+ private static final int SYSROLES_ROLEID = 2;
+ private static final int SYSROLES_GRANTEE = 3;
+ private static final int SYSROLES_GRANTOR = 4;
+ private static final int SYSROLES_WITHADMINOPTION = 5;
+ private static final int SYSROLES_ISDEF = 6;
private static final int[][] indexColumnPositions =
{
{SYSROLES_ROLEID, SYSROLES_GRANTEE, SYSROLES_GRANTOR},
- {SYSROLES_ROLEID, SYSROLES_ISDEF}
+ {SYSROLES_ROLEID, SYSROLES_ISDEF},
+ {SYSROLES_ROLE_UUID}
};
- static final int SYSROLES_ROLEID_IN_INDEX1 = 1;
- static final int SYSROLES_GRANTEE_IN_INDEX1 = 2;
+ // (role)ID_(grant)EE_(grant)OR
+ static final int SYSROLES_INDEX_ID_EE_OR_IDX = 0;
+ // (role)ID_(is)DEF
+ static final int SYSROLES_INDEX_ID_DEF_IDX = 1;
+ // UUID
+ static final int SYSROLES_INDEX_UUID_IDX = 2;
- private static final boolean[] uniqueness = {true,false};
+
+ static final int SYSROLES_ROLEID_COLPOS_IN_INDEX_ID_EE_OR = 1;
+ static final int SYSROLES_GRANTEE_COLPOS_IN_INDEX_ID_EE_OR = 2;
+
+ private static final boolean[] uniqueness = {
+ true,
+ false, // many rows have same roleid and is not a definition
+ true};
private static final String[] uuids = {
"e03f4017-0115-382c-08df-ffffe275b270", // catalog UUID
"c851401a-0115-382c-08df-ffffe275b270", // heap UUID
- "c065801d-0115-382c-08df-ffffe275b270", // SYSROLES_INDEX1
- "787c0020-0115-382c-08df-ffffe275b270" // SYSROLES_INDEX2
+ "c065801d-0115-382c-08df-ffffe275b270", // SYSROLES_INDEX_ID_EE_OR
+ "787c0020-0115-382c-08df-ffffe275b270", // SYSROLES_INDEX_ID_DEF
+ "629f8094-0116-d8f9-5f97-ffffe275b270" // SYSROLES_INDEX_UUID
};
/**
@@ -106,6 +117,7 @@
throws StandardException
{
ExecRow row;
+ String oid_string = null;
String roleid = null;
String grantee = null;
String grantor = null;
@@ -121,25 +133,30 @@
grantor = roleDescriptor.getGrantor();
wao = roleDescriptor.isWithAdminOption();
isdef = roleDescriptor.isDef();
+ UUID oid = roleDescriptor.getUUID();
+ oid_string = oid.toString();
}
/* Build the row to insert */
row = getExecutionFactory().getValueRow(SYSROLES_COLUMN_COUNT);
- /* 1st column is ROLEID */
- row.setColumn(1, new SQLVarchar(roleid));
+ /* 1st column is UUID */
+ row.setColumn(1, new SQLChar(oid_string));
+
+ /* 2nd column is ROLEID */
+ row.setColumn(2, new SQLVarchar(roleid));
- /* 2nd column is GRANTEE */
- row.setColumn(2, new SQLVarchar(grantee));
+ /* 3rd column is GRANTEE */
+ row.setColumn(3, new SQLVarchar(grantee));
- /* 3rd column is GRANTOR */
- row.setColumn(3, new SQLVarchar(grantor));
+ /* 4th column is GRANTOR */
+ row.setColumn(4, new SQLVarchar(grantor));
- /* 4th column is WITHADMINOPTION */
- row.setColumn(4, new SQLChar(wao ? "Y" : "N"));
+ /* 5th column is WITHADMINOPTION */
+ row.setColumn(5, new SQLChar(wao ? "Y" : "N"));
- /* 4th column is ISDEF */
- row.setColumn(5, new SQLChar(isdef ? "Y" : "N"));
+ /* 6th column is ISDEF */
+ row.setColumn(6, new SQLChar(isdef ? "Y" : "N"));
return row;
}
@@ -170,6 +187,7 @@
DataValueDescriptor col;
RoleDescriptor descriptor;
+ String oid_string;
String roleid;
String grantee;
String grantor;
@@ -183,31 +201,37 @@
"Wrong number of columns for a SYSROLES row");
}
- // first column is roleid (varchar(128))
+ // first column is uuid of this role descriptor (char(36))
col = row.getColumn(1);
- roleid = col.getString();
+ oid_string = col.getString();
- // second column is grantee (varchar(128))
+ // second column is roleid (varchar(128))
col = row.getColumn(2);
- grantee = col.getString();
+ roleid = col.getString();
- // third column is grantor (varchar(128))
+ // third column is grantee (varchar(128))
col = row.getColumn(3);
- grantor = col.getString();
+ grantee = col.getString();
- // fourth column is withadminoption (char(1))
+ // fourth column is grantor (varchar(128))
col = row.getColumn(4);
- wao = col.getString();
+ grantor = col.getString();
- // fifth column is isdef (char(1))
+ // fifth column is withadminoption (char(1))
col = row.getColumn(5);
+ wao = col.getString();
+
+ // sixth column is isdef (char(1))
+ col = row.getColumn(6);
isdef = col.getString();
- descriptor = ddg.newRoleDescriptor(roleid,
- grantee,
- grantor,
- wao.equals("Y") ? true: false,
- isdef.equals("Y") ? true: false);
+ descriptor = ddg.newRoleDescriptor
+ (getUUIDFactory().recreateUUID(oid_string),
+ roleid,
+ grantee,
+ grantor,
+ wao.equals("Y") ? true: false,
+ isdef.equals("Y") ? true: false);
return descriptor;
}
@@ -221,6 +245,7 @@
public SystemColumn[] buildColumnList()
{
return new SystemColumn[] {
+ SystemColumnImpl.getUUIDColumn("UUID", false),
SystemColumnImpl.getIdentifierColumn("ROLEID", false),
SystemColumnImpl.getIdentifierColumn("GRANTEE", false),
SystemColumnImpl.getIdentifierColumn("GRANTOR", false),
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateRoleConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateRoleConstantAction.java?rev=614273&r1=614272&r2=614273&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateRoleConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateRoleConstantAction.java Tue Jan 22 09:50:10 2008
@@ -97,11 +97,13 @@
// can't guarantee against collision if users are externally
// defined or added later).
- rd = ddg.newRoleDescriptor(roleName,
- currentAuthId,// grantee
- Authorizer.SYSTEM_AUTHORIZATION_ID,// grantor
- true, // with admin option
- true); // is definition
+ rd = ddg.newRoleDescriptor(
+ dd.getUUIDFactory().createUUID(),
+ roleName,
+ currentAuthId,// grantee
+ Authorizer.SYSTEM_AUTHORIZATION_ID,// grantor
+ true, // with admin option
+ true); // is definition
dd.startWriting(lcc);
dd.addDescriptor(rd,
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GrantRoleConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GrantRoleConstantAction.java?rev=614273&r1=614272&r2=614273&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GrantRoleConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GrantRoleConstantAction.java Tue Jan 22 09:50:10 2008
@@ -150,16 +150,19 @@
// FIXME: Grantee is role, need to check for circularity
}
- rd = ddg.newRoleDescriptor(role,
- grantee,
- grantor, // dbo for now
- withAdminOption,
- false); // not definition
- dd.addDescriptor(rd,
- null, // parent
- DataDictionary.SYSROLES_CATALOG_NUM,
- false, // no duplicatesAllowed
- tc);
+ rd = ddg.newRoleDescriptor(
+ dd.getUUIDFactory().createUUID(),
+ role,
+ grantee,
+ grantor, // dbo for now
+ withAdminOption,
+ false); // not definition
+ dd.addDescriptor(
+ rd,
+ null, // parent
+ DataDictionary.SYSROLES_CATALOG_NUM,
+ false, // no duplicatesAllowed
+ tc);
} // else exists already, no need to add
}
}
Modified: db/derby/code/trunk/java/storeless/org/apache/derby/impl/storeless/EmptyDictionary.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/storeless/org/apache/derby/impl/storeless/EmptyDictionary.java?rev=614273&r1=614272&r2=614273&view=diff
==============================================================================
--- db/derby/code/trunk/java/storeless/org/apache/derby/impl/storeless/EmptyDictionary.java (original)
+++ db/derby/code/trunk/java/storeless/org/apache/derby/impl/storeless/EmptyDictionary.java Tue Jan 22 09:50:10 2008
@@ -201,6 +201,14 @@
return null;
}
+
+ public RoleDescriptor getRoleDescriptor(UUID uuid)
+ throws StandardException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
public RoleDescriptor getRoleGrantDescriptor(String roleName,
String grantee,
String grantor)
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/SystemCatalogTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/SystemCatalogTest.java?rev=614273&r1=614272&r2=614273&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/SystemCatalogTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/SystemCatalogTest.java Tue Jan 22 09:50:10 2008
@@ -238,11 +238,12 @@
{"SYSFOREIGNKEYS", "UPDATERULE", "5", "CHAR(1) NOT NULL"},
{"SYSKEYS", "CONGLOMERATEID", "2", "CHAR(36) NOT NULL"},
{"SYSKEYS", "CONSTRAINTID", "1", "CHAR(36) NOT NULL"},
- {"SYSROLES", "GRANTEE", "2", "VARCHAR(128) NOT NULL"},
- {"SYSROLES", "GRANTOR", "3", "VARCHAR(128) NOT NULL"},
- {"SYSROLES", "ISDEF", "5", "CHAR(1) NOT NULL"},
- {"SYSROLES", "ROLEID", "1", "VARCHAR(128) NOT NULL"},
- {"SYSROLES", "WITHADMINOPTION", "4", "CHAR(1) NOT NULL"},
+ {"SYSROLES", "GRANTEE", "3", "VARCHAR(128) NOT NULL"},
+ {"SYSROLES", "GRANTOR", "4", "VARCHAR(128) NOT NULL"},
+ {"SYSROLES", "ISDEF", "6", "CHAR(1) NOT NULL"},
+ {"SYSROLES", "ROLEID", "2", "VARCHAR(128) NOT NULL"},
+ {"SYSROLES", "UUID", "1", "CHAR(36) NOT NULL"},
+ {"SYSROLES", "WITHADMINOPTION", "5", "CHAR(1) NOT NULL"},
{"SYSROUTINEPERMS", "ALIASID", "4", "CHAR(36) NOT NULL"},
{"SYSROUTINEPERMS", "GRANTEE", "2", "VARCHAR(128) NOT NULL"},
{"SYSROUTINEPERMS", "GRANTOPTION", "5", "CHAR(1) NOT NULL"},
@@ -354,6 +355,7 @@
{"SYSKEYS", "SYSKEYS_HEAP", "false"},
{"SYSKEYS", "SYSKEYS_INDEX1", "true"},
{"SYSROLES", "SYSROLES_HEAP", "false"},
+ {"SYSROLES", "SYSROLES_INDEX3", "true"},
{"SYSROLES", "SYSROLES_INDEX2", "true"},
{"SYSROLES", "SYSROLES_INDEX1", "true"},
{"SYSROUTINEPERMS", "SYSROUTINEPERMS_HEAP", "false"},