📄 metatable.java
字号:
/*
* Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.table;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.Collator;
import java.util.Locale;
import org.h2.command.Command;
import org.h2.constant.SysProperties;
import org.h2.constraint.Constraint;
import org.h2.constraint.ConstraintCheck;
import org.h2.constraint.ConstraintReferential;
import org.h2.constraint.ConstraintUnique;
import org.h2.engine.Constants;
import org.h2.engine.Database;
import org.h2.engine.DbObject;
import org.h2.engine.FunctionAlias;
import org.h2.engine.Right;
import org.h2.engine.Role;
import org.h2.engine.Session;
import org.h2.engine.Setting;
import org.h2.engine.User;
import org.h2.engine.UserAggregate;
import org.h2.engine.UserDataType;
import org.h2.expression.ValueExpression;
import org.h2.index.Index;
import org.h2.index.IndexType;
import org.h2.index.MetaIndex;
import org.h2.log.InDoubtTransaction;
import org.h2.message.Message;
import org.h2.result.Row;
import org.h2.result.SearchRow;
import org.h2.result.SortOrder;
import org.h2.schema.Constant;
import org.h2.schema.Schema;
import org.h2.schema.Sequence;
import org.h2.schema.TriggerObject;
import org.h2.store.DiskFile;
import org.h2.tools.Csv;
import org.h2.util.ObjectArray;
import org.h2.util.Resources;
import org.h2.util.StringUtils;
import org.h2.value.CompareMode;
import org.h2.value.DataType;
import org.h2.value.Value;
import org.h2.value.ValueNull;
import org.h2.value.ValueString;
/**
* This class is responsible to build the database meta data pseudo tables.
*/
public class MetaTable extends Table {
// TODO INFORMATION_SCHEMA.tables: select table_name
// from INFORMATION_SCHEMA.tables where TABLE_TYPE = 'BASE TABLE'
public static final int TABLES = 0, COLUMNS = 1, INDEXES = 2, TABLE_TYPES = 3, TYPE_INFO = 4, CATALOGS = 5,
SETTINGS = 6, HELP = 7, SEQUENCES = 8, USERS = 9, ROLES = 10, RIGHTS = 11, FUNCTION_ALIASES = 12,
SCHEMATA = 13, TABLE_PRIVILEGES = 14, COLUMN_PRIVILEGES = 15, COLLATIONS = 16, VIEWS = 17, IN_DOUBT = 18,
CROSS_REFERENCES = 19, CONSTRAINTS = 20, FUNCTION_COLUMNS = 21, CONSTANTS = 22, DOMAINS = 23,
TRIGGERS = 24, SESSIONS = 25, LOCKS = 26;
private final int type;
private final int indexColumn;
private MetaIndex index;
public MetaTable(Schema schema, int id, int type) throws SQLException {
// tableName will be set later
super(schema, id, null, true);
this.type = type;
Column[] cols;
String indexColumnName = null;
switch(type) {
case TABLES:
setObjectName("TABLES");
cols = createColumns(new String[]{
"TABLE_CATALOG",
"TABLE_SCHEMA",
"TABLE_NAME",
"TABLE_TYPE",
// extensions
"STORAGE_TYPE",
"SQL",
"REMARKS",
"ID INT"
});
indexColumnName = "TABLE_NAME";
break;
case COLUMNS:
setObjectName("COLUMNS");
cols = createColumns(new String[]{
"TABLE_CATALOG",
"TABLE_SCHEMA",
"TABLE_NAME",
"COLUMN_NAME",
"ORDINAL_POSITION INT",
"COLUMN_DEFAULT",
"IS_NULLABLE",
"DATA_TYPE SMALLINT",
"CHARACTER_MAXIMUM_LENGTH INT",
"CHARACTER_OCTET_LENGTH INT",
"NUMERIC_PRECISION INT",
"NUMERIC_PRECISION_RADIX INT",
"NUMERIC_SCALE INT",
"CHARACTER_SET_NAME",
"COLLATION_NAME",
// extensions
"TYPE_NAME",
"NULLABLE SMALLINT",
"IS_COMPUTED BIT",
"SELECTIVITY INT",
"CHECK_CONSTRAINT",
"REMARKS"
});
indexColumnName = "TABLE_NAME";
break;
case INDEXES:
setObjectName("INDEXES");
cols = createColumns(new String[]{
"TABLE_CATALOG",
"TABLE_SCHEMA",
"TABLE_NAME",
"NON_UNIQUE BIT",
"INDEX_NAME",
"ORDINAL_POSITION SMALLINT",
"COLUMN_NAME",
"CARDINALITY INT",
"PRIMARY_KEY BIT",
"INDEX_TYPE_NAME",
"IS_GENERATED BIT",
"INDEX_TYPE SMALLINT",
"ASC_OR_DESC",
"PAGES INT",
"FILTER_CONDITION",
"REMARKS",
"SQL",
"ID INT",
"SORT_TYPE INT"
});
indexColumnName = "TABLE_NAME";
break;
case TABLE_TYPES:
setObjectName("TABLE_TYPES");
cols = createColumns(
new String[]{"TYPE"});
break;
case TYPE_INFO:
setObjectName("TYPE_INFO");
cols = createColumns(new String[]{
"TYPE_NAME",
"DATA_TYPE SMALLINT",
"PRECISION INT",
"PREFIX",
"SUFFIX",
"PARAMS",
"AUTO_INCREMENT BIT",
"MINIMUM_SCALE SMALLINT",
"MAXIMUM_SCALE SMALLINT",
"RADIX INT",
"POS INT",
"CASE_SENSITIVE BIT",
"NULLABLE SMALLINT",
"SEARCHABLE SMALLINT"
});
break;
case CATALOGS:
setObjectName("CATALOGS");
cols = createColumns(
new String[]{"CATALOG_NAME"});
break;
case SETTINGS:
setObjectName("SETTINGS");
cols = createColumns(
new String[]{"NAME", "VALUE"});
break;
case HELP:
setObjectName("HELP");
cols = createColumns(new String[]{
"ID INT",
"SECTION",
"TOPIC",
"SYNTAX",
"TEXT",
"EXAMPLE"
});
break;
case SEQUENCES:
setObjectName("SEQUENCES");
cols = createColumns(new String[]{
"SEQUENCE_CATALOG",
"SEQUENCE_SCHEMA",
"SEQUENCE_NAME",
"CURRENT_VALUE BIGINT",
"INCREMENT BIGINT",
"IS_GENERATED BIT",
"REMARKS",
"CACHE BIGINT",
"ID INT"
});
break;
case USERS:
setObjectName("USERS");
cols = createColumns(new String[]{
"NAME",
"ADMIN",
"REMARKS",
"ID INT"
});
break;
case ROLES:
setObjectName("ROLES");
cols = createColumns(new String[]{
"NAME",
"REMARKS",
"ID INT"
});
break;
case RIGHTS:
setObjectName("RIGHTS");
cols = createColumns(new String[]{
"GRANTEE",
"GRANTEETYPE",
"GRANTEDROLE",
"RIGHTS",
"TABLE_SCHEMA",
"TABLE_NAME",
"ID INT"
});
indexColumnName = "TABLE_NAME";
break;
case FUNCTION_ALIASES:
setObjectName("FUNCTION_ALIASES");
cols = createColumns(new String[]{
"ALIAS_CATALOG",
"ALIAS_SCHEMA",
"ALIAS_NAME",
"JAVA_CLASS",
"JAVA_METHOD",
"DATA_TYPE INT",
"COLUMN_COUNT INT",
"RETURNS_RESULT SMALLINT",
"REMARKS",
"ID INT"
});
break;
case FUNCTION_COLUMNS:
setObjectName("FUNCTION_COLUMNS");
cols = createColumns(new String[]{
"ALIAS_CATALOG",
"ALIAS_SCHEMA",
"ALIAS_NAME",
"JAVA_CLASS",
"JAVA_METHOD",
"POS INT",
"COLUMN_NAME",
"DATA_TYPE INT",
"TYPE_NAME",
"PRECISION INT",
"SCALE SMALLINT",
"RADIX SMALLINT",
"NULLABLE SMALLINT",
"COLUMN_TYPE SMALLINT",
"REMARKS"
});
break;
case SCHEMATA:
setObjectName("SCHEMATA");
cols = createColumns(new String[]{
"CATALOG_NAME",
"SCHEMA_NAME",
"SCHEMA_OWNER",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -