📄 metatable.java
字号:
"DEFAULT_CHARACTER_SET_NAME",
"DEFAULT_COLLATION_NAME",
"IS_DEFAULT BIT",
"REMARKS",
"ID INT"
});
break;
case TABLE_PRIVILEGES:
setObjectName("TABLE_PRIVILEGES");
cols = createColumns(new String[]{
"GRANTOR",
"GRANTEE",
"TABLE_CATALOG",
"TABLE_SCHEMA",
"TABLE_NAME",
"PRIVILEGE_TYPE",
"IS_GRANTABLE",
});
indexColumnName = "TABLE_NAME";
break;
case COLUMN_PRIVILEGES:
setObjectName("COLUMN_PRIVILEGES");
cols = createColumns(new String[]{
"GRANTOR",
"GRANTEE",
"TABLE_CATALOG",
"TABLE_SCHEMA",
"TABLE_NAME",
"COLUMN_NAME",
"PRIVILEGE_TYPE",
"IS_GRANTABLE",
});
indexColumnName = "TABLE_NAME";
break;
case COLLATIONS:
setObjectName("COLLATIONS");
cols = createColumns(new String[]{
"NAME",
"KEY"
});
break;
case VIEWS:
setObjectName("VIEWS");
cols = createColumns(new String[]{
"TABLE_CATALOG",
"TABLE_SCHEMA",
"TABLE_NAME",
"VIEW_DEFINITION",
"CHECK_OPTION",
"IS_UPDATABLE",
"STATUS",
"REMARKS",
"ID INT"
});
indexColumnName = "TABLE_NAME";
break;
case IN_DOUBT:
setObjectName("IN_DOUBT");
cols = createColumns(new String[]{
"TRANSACTION",
"STATE",
});
break;
case CROSS_REFERENCES:
setObjectName("CROSS_REFERENCES");
cols = createColumns(new String[]{
"PKTABLE_CATALOG",
"PKTABLE_SCHEMA",
"PKTABLE_NAME",
"PKCOLUMN_NAME",
"FKTABLE_CATALOG",
"FKTABLE_SCHEMA",
"FKTABLE_NAME",
"FKCOLUMN_NAME",
"ORDINAL_POSITION SMALLINT",
"UPDATE_RULE SMALLINT",
"DELETE_RULE SMALLINT",
"FK_NAME",
"PK_NAME",
"DEFERRABILITY SMALLINT"
});
indexColumnName = "PKTABLE_NAME";
break;
case CONSTRAINTS:
setObjectName("CONSTRAINTS");
cols = createColumns(new String[]{
"CONSTRAINT_CATALOG",
"CONSTRAINT_SCHEMA",
"CONSTRAINT_NAME",
"CONSTRAINT_TYPE",
"TABLE_CATALOG",
"TABLE_SCHEMA",
"TABLE_NAME",
"CHECK_EXPRESSION",
"COLUMN_LIST",
"REMARKS",
"SQL",
"ID INT"
});
indexColumnName = "TABLE_NAME";
break;
case CONSTANTS:
setObjectName("CONSTANTS");
cols = createColumns(new String[]{
"CONSTANT_CATALOG",
"CONSTANT_SCHEMA",
"CONSTANT_NAME",
"DATA_TYPE SMALLINT",
"REMARKS",
"SQL",
"ID INT"
});
break;
case DOMAINS:
setObjectName("DOMAINS");
cols = createColumns(new String[]{
"DOMAIN_CATALOG",
"DOMAIN_SCHEMA",
"DOMAIN_NAME",
"COLUMN_DEFAULT",
"IS_NULLABLE",
"DATA_TYPE SMALLINT",
"PRECISION INT",
"SCALE INT",
"TYPE_NAME",
"SELECTIVITY INT",
"CHECK_CONSTRAINT",
"REMARKS",
"SQL",
"ID INT"
});
break;
case TRIGGERS:
setObjectName("TRIGGERS");
cols = createColumns(new String[]{
"TRIGGER_CATALOG",
"TRIGGER_SCHEMA",
"TRIGGER_NAME",
"TRIGGER_TYPE",
"TABLE_CATALOG",
"TABLE_SCHEMA",
"TABLE_NAME",
"BEFORE BIT",
"JAVA_CLASS",
"QUEUE_SIZE INT",
"NO_WAIT BIT",
"REMARKS",
"SQL",
"ID INT"
});
break;
case SESSIONS: {
setObjectName("SESSIONS");
cols = createColumns(new String[]{
"ID INT",
"USER_NAME",
"SESSION_START",
"STATEMENT",
"STATEMENT_START"
});
break;
}
case LOCKS: {
setObjectName("LOCKS");
cols = createColumns(new String[]{
"TABLE_SCHEMA",
"TABLE_NAME",
"SESSION_ID INT",
"LOCK_TYPE",
});
break;
}
default:
throw Message.getInternalError("type="+type);
}
setColumns(cols);
if (indexColumnName == null) {
indexColumn = -1;
} else {
indexColumn = getColumn(indexColumnName).getColumnId();
IndexColumn[] indexCols = IndexColumn.wrap(new Column[] { cols[indexColumn] });
index = new MetaIndex(this, indexCols, false);
}
}
private Column[] createColumns(String[] names) {
Column[] cols = new Column[names.length];
for (int i = 0; i < names.length; i++) {
String nameType = names[i];
int idx = nameType.indexOf(' ');
int type;
String name;
if (idx < 0) {
type = Value.STRING;
name = nameType;
} else {
type = DataType.getTypeByName(nameType.substring(idx + 1)).type;
name = nameType.substring(0, idx);
}
cols[i] = new Column(name, type);
}
return cols;
}
public String getDropSQL() {
return null;
}
public String getCreateSQL() {
return null;
}
public Index addIndex(Session session, String indexName, int indexId, IndexColumn[] cols, IndexType indexType,
int headPos, String comment) throws SQLException {
throw Message.getUnsupportedException();
}
public void lock(Session session, boolean exclusive, boolean force) throws SQLException {
// nothing to do
}
public boolean isLockedExclusively() {
return false;
}
private String identifier(String s) {
if (database.getMode().lowerCaseIdentifiers) {
s = (s == null ? null : StringUtils.toLowerEnglish(s));
}
return s;
}
private ObjectArray getAllTables(Session session) {
ObjectArray tables = database.getAllSchemaObjects(DbObject.TABLE_OR_VIEW);
ObjectArray tempTables = session.getLocalTempTables();
tables.addAll(tempTables);
return tables;
}
private boolean checkIndex(Session session, String value, Value indexFrom, Value indexTo) throws SQLException {
if (value == null || (indexFrom == null && indexTo == null)) {
return true;
}
Database db = session.getDatabase();
Value v = ValueString.get(value);
if (indexFrom != null && db.compare(v, indexFrom) < 0) {
return false;
}
if (indexTo != null && db.compare(v, indexTo) > 0) {
return false;
}
return true;
}
private String replaceNullWithEmpty(String s) {
return s == null ? "" : s;
}
public ObjectArray generateRows(Session session, SearchRow first, SearchRow last) throws SQLException {
Value indexFrom = null, indexTo = null;
if (indexColumn >= 0) {
if (first != null) {
indexFrom = first.getValue(indexColumn);
}
if (last != null) {
indexTo = last.getValue(indexColumn);
}
}
ObjectArray rows = new ObjectArray();
String catalog = identifier(database.getShortName());
switch (type) {
case TABLES: {
ObjectArray tables = getAllTables(session);
for (int i = 0; i < tables.size(); i++) {
Table table = (Table) tables.get(i);
String tableName = identifier(table.getName());
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
String storageType;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -