📄 metatable.java
字号:
break;
}
case RIGHTS: {
ObjectArray rights = database.getAllRights();
for (int i = 0; i < rights.size(); i++) {
Right r = (Right) rights.get(i);
Role role = r.getGrantedRole();
DbObject grantee = r.getGrantee();
String type = grantee.getType() == DbObject.USER ? "USER" : "ROLE";
if (role == null) {
Table granted = r.getGrantedTable();
String tableName = identifier(granted.getName());
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
add(rows, new String[] {
identifier(grantee.getName()), // GRANTEE
type, // GRANTEETYPE
"", // GRANTEDROLE
r.getRights(), // RIGHTS
identifier(granted.getSchema().getName()), // TABLE_SCHEMA
identifier(granted.getName()), // TABLE_NAME
"" + r.getId() // ID
});
} else {
add(rows, new String[] {
identifier(grantee.getName()), // GRANTEE
type, // GRANTEETYPE
identifier(role.getName()), // GRANTEDROLE
"", // RIGHTS
"", // TABLE_SCHEMA
"", // TABLE_NAME
"" + r.getId() // ID
});
}
}
break;
}
case FUNCTION_ALIASES: {
ObjectArray aliases = database.getAllFunctionAliases();
for (int i = 0; i < aliases.size(); i++) {
FunctionAlias alias = (FunctionAlias) aliases.get(i);
int returnsResult = alias.getDataType() == Value.NULL ? DatabaseMetaData.procedureNoResult
: DatabaseMetaData.procedureReturnsResult;
add(rows, new String[] {
catalog, // ALIAS_CATALOG
Constants.SCHEMA_MAIN, // ALIAS_SCHEMA
identifier(alias.getName()), // ALIAS_NAME
alias.getJavaClassName(), // JAVA_CLASS
alias.getJavaMethodName(), // JAVA_METHOD
""+DataType.convertTypeToSQLType(alias.getDataType()), // DATA_TYPE
""+ alias.getColumnClasses().length, // COLUMN_COUNT INT
""+ returnsResult, // RETURNS_RESULT SMALLINT
replaceNullWithEmpty(alias.getComment()), // REMARKS
"" + alias.getId() // ID
});
}
ObjectArray aggregates = database.getAllAggregates();
for (int i = 0; i < aggregates.size(); i++) {
UserAggregate agg = (UserAggregate) aggregates.get(i);
int returnsResult = DatabaseMetaData.procedureReturnsResult;
add(rows, new String[] {
catalog, // ALIAS_CATALOG
Constants.SCHEMA_MAIN, // ALIAS_SCHEMA
identifier(agg.getName()), // ALIAS_NAME
agg.getJavaClassName(), // JAVA_CLASS
"", // JAVA_METHOD
""+DataType.convertTypeToSQLType(Value.NULL), // DATA_TYPE
"1", // COLUMN_COUNT INT
""+ returnsResult, // RETURNS_RESULT SMALLINT
replaceNullWithEmpty(agg.getComment()), // REMARKS
"" + agg.getId() // ID
});
}
break;
}
case FUNCTION_COLUMNS: {
ObjectArray aliases = database.getAllFunctionAliases();
for (int i = 0; i < aliases.size(); i++) {
FunctionAlias alias = (FunctionAlias) aliases.get(i);
Class[] columns = alias.getColumnClasses();
for (int j = 0; j < columns.length; j++) {
Class clazz = columns[j];
int type = DataType.getTypeFromClass(clazz);
DataType dt = DataType.getDataType(type);
int nullable = clazz.isPrimitive() ? DatabaseMetaData.columnNoNulls
: DatabaseMetaData.columnNullable;
add(rows, new String[] {
catalog, // ALIAS_CATALOG
Constants.SCHEMA_MAIN, // ALIAS_SCHEMA
identifier(alias.getName()), // ALIAS_NAME
alias.getJavaClassName(), // JAVA_CLASS
alias.getJavaMethodName(), // JAVA_METHOD
"" + j, // POS INT
"P" + (j+1), // COLUMN_NAME
"" + DataType.convertTypeToSQLType(dt.type), // DATA_TYPE
dt.name, // TYPE_NAME
"" + dt.defaultPrecision, // PRECISION
"" + dt.defaultScale, // SCALE
"10", // RADIX
"" + nullable, // NULLABLE SMALLINT
"" + DatabaseMetaData.procedureColumnIn, // COLUMN_TYPE
"" // REMARKS
});
}
}
break;
}
case SCHEMATA: {
ObjectArray schemas = database.getAllSchemas();
String collation = database.getCompareMode().getName();
for (int i = 0; i < schemas.size(); i++) {
Schema schema = (Schema) schemas.get(i);
add(rows, new String[] {
catalog, // CATALOG_NAME
identifier(schema.getName()), // SCHEMA_NAME
identifier(schema.getOwner().getName()), // SCHEMA_OWNER
Constants.CHARACTER_SET_NAME, // DEFAULT_CHARACTER_SET_NAME
collation, // DEFAULT_COLLATION_NAME
Constants.SCHEMA_MAIN.equals(schema.getName()) ? "TRUE" : "FALSE", // IS_DEFAULT
replaceNullWithEmpty(schema.getComment()), // REMARKS
"" + schema.getId() // ID
});
}
break;
}
case TABLE_PRIVILEGES: {
ObjectArray rights = database.getAllRights();
for (int i = 0; i < rights.size(); i++) {
Right r = (Right) rights.get(i);
Table table = r.getGrantedTable();
if (table == null) {
continue;
}
String tableName = identifier(table.getName());
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
addPrivileges(rows, r.getGrantee(), catalog, table, null, r.getRightMask());
}
break;
}
case COLUMN_PRIVILEGES: {
ObjectArray rights = database.getAllRights();
for (int i = 0; i < rights.size(); i++) {
Right r = (Right) rights.get(i);
Table table = r.getGrantedTable();
if (table == null) {
continue;
}
String tableName = identifier(table.getName());
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
DbObject grantee = r.getGrantee();
int mask = r.getRightMask();
Column[] columns = table.getColumns();
for (int j = 0; j < columns.length; j++) {
String column = columns[j].getName();
addPrivileges(rows, grantee, catalog, table, column, mask);
}
}
break;
}
case COLLATIONS: {
Locale[] locales = Collator.getAvailableLocales();
for (int i = 0; i < locales.length; i++) {
Locale l = locales[i];
add(rows, new String[] {
CompareMode.getName(l), // NAME
l.toString(), // KEY
});
}
break;
}
case VIEWS: {
ObjectArray tables = getAllTables(session);
for (int i = 0; i < tables.size(); i++) {
Table table = (Table) tables.get(i);
if (!table.getTableType().equals(Table.VIEW)) {
continue;
}
String tableName = identifier(table.getName());
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
TableView view = (TableView) table;
add(rows, new String[]{
catalog, // TABLE_CATALOG
identifier(table.getSchema().getName()), // TABLE_SCHEMA
tableName, // TABLE_NAME
table.getCreateSQL(), // VIEW_DEFINITION
"NONE", // CHECK_OPTION
"NO", // IS_UPDATABLE
view.getInvalid() ? "INVALID" : "VALID", // STATUS
replaceNullWithEmpty(view.getComment()), // REMARKS
"" + view.getId() // ID
});
}
break;
}
case IN_DOUBT: {
ObjectArray prepared = database.getLog().getInDoubtTransactions();
for (int i = 0; prepared != null && i < prepared.size(); i++) {
InDoubtTransaction prep = (InDoubtTransaction) prepared.get(i);
add(rows, new String[] {
prep.getTransaction(), // TRANSACTION
prep.getState(), // STATE
});
}
break;
}
case CROSS_REFERENCES: {
ObjectArray constraints = database.getAllSchemaObjects(DbObject.CONSTRAINT);
for (int i = 0; i < constraints.size(); i++) {
Constraint constraint = (Constraint) constraints.get(i);
if (!(constraint.getConstraintType().equals(Constraint.REFERENTIAL))) {
continue;
}
ConstraintReferential ref = (ConstraintReferential) constraint;
IndexColumn[] cols = ref.getColumns();
IndexColumn[] refCols = ref.getRefColumns();
Table tab = ref.getTable();
Table refTab = ref.getRefTable();
String tableName = identifier(refTab.getName());
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
int update = getRefAction(ref.getUpdateAction());
int delete = getRefAction(ref.getDeleteAction());
for (int j = 0; j < cols.length; j++) {
add(rows, new String[] {
catalog, // PKTABLE_CATALOG
identifier(refTab.getSchema().getName()), // PKTABLE_SCHEMA
identifier(refTab.getName()), // PKTABLE_NAME
identifier(refCols[j].column.getName()), // PKCOLUMN_NAME
catalog, // FKTABLE_CATALOG
identifier(tab.getSchema().getName()), // FKTABLE_SCHEMA
identifier(tab.getName()), // FKTABLE_NAME
identifier(cols[j].column.getName()), // FKCOLUMN_NAME
String.valueOf(j + 1), // ORDINAL_POSITION
String.valueOf(update), // UPDATE_RULE SMALLINT
String.valueOf(delete), // DELETE_RULE SMALLINT
identifier(ref.getName()), // FK_NAME
null, // PK_NAME
"" + DatabaseMetaData.importedKeyNotDeferrable, // DEFERRABILITY
});
}
}
break;
}
case CONSTRAINTS: {
ObjectArray constraints = database.getAllSchemaObjects(DbObject.CONSTRAINT);
for (int i = 0; i < constraints.size(); i++) {
Constraint constraint = (Constraint) constraints.get(i);
String type = constraint.getConstraintType();
String checkExpression = null;
IndexColumn[] columns = null;
Table table = constraint.getTable();
String tableName = identifier(table.getName());
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
if (type.equals(Constraint.CHECK)) {
checkExpression = ((ConstraintCheck) constraint).getExpression().getSQL();
} else if (type.equals(Constraint.UNIQUE) || type.equals(Constraint.PRIMARY_KEY)) {
columns = ((ConstraintUnique) constraint).getColumns();
} else if (type.equals(Constraint.REFERENTIAL)) {
columns = ((ConstraintReferential) constraint).getColumns();
}
String columnList = null;
if (columns != null) {
StringBuffer buff = new StringBuffer();
for (int j = 0; j < columns.length; j++) {
if (j > 0) {
buff.append(',');
}
buff.append(columns[j].column.getName());
}
columnList = buff.toString();
}
add(rows, new String[] {
catalog, // CONSTRAINT_CATALOG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -