📄 databaseinformation.java
字号:
/*
* DatabaseInformation.java
*
* Copyright (c) 2001, The HSQL Development Group
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
*
* Neither the name of the HSQL Development Group nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This package is based on HypersonicSQL, originally developed by Thomas Mueller.
*
*/
package org.hsqldb;
import java.sql.*;
import java.io.*;
import java.net.*;
import java.util.*;
/**
* DatabaseInformation class declaration
*
*
* @version 1.0.0.1
*/
class DatabaseInformation {
private Database dDatabase;
private Access aAccess;
private Vector tTable;
/**
* Constructor declaration
*
*
* @param db
* @param tables
* @param access
*/
DatabaseInformation(Database db, Vector tables, Access access) {
dDatabase = db;
tTable = tables;
aAccess = access;
}
// some drivers use the following titles:
// static final String META_SCHEM="OWNER";
// static final String META_CAT="QUALIFIER";
// static final String META_COLUMN_SIZE="PRECISION";
// static final String META_BUFFER_LENGTH="LENGTH";
// static final String META_DECIMAL_DIGITS="SCALE";
// static final String META_NUM_PREC_RADIX="RADIX";
// static final String META_FIXED_PREC_SCALE="MONEY";
// static final String META_ORDINAL_POSITON="SEQ_IN_INDEX";
// static final String META_ASC_OR_DESC="COLLATION";
static final String META_SCHEM = "SCHEM";
static final String META_CAT = "CAT";
static final String META_COLUMN_SIZE = "COLUMN_SIZE";
static final String META_BUFFER_LENGTH = "BUFFER_LENGTH";
static final String META_DECIMAL_DIGITS = "DECIMAL_DIGITS";
static final String META_NUM_PREC_RADIX = "NUM_PREC_RADIX";
static final String META_FIXED_PREC_SCALE = "FIXED_PREC_SCALE";
static final String META_ORDINAL_POSITON = "ORDINAL_POSITON";
static final String META_ASC_OR_DESC = "ASC_OR_DESC";
/**
* Method declaration
*
*
* @param name
* @param channel
*
* @return
*
* @throws SQLException
*/
Table getSystemTable(String name, Channel channel) throws SQLException {
if (name.equals("SYSTEM_PROCEDURES")) {
Table t = createTable(name);
t.addColumn("PROCEDURE_" + META_CAT, Column.VARCHAR);
t.addColumn("PROCEDURE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("PROCEDURE_NAME", Column.VARCHAR);
t.addColumn("NUM_INPUT_PARAMS", Column.INTEGER);
t.addColumn("NUM_OUTPUT_PARAMS", Column.INTEGER);
t.addColumn("NUM_RESULT_SETS", Column.INTEGER);
t.addColumn("REMARKS", Column.VARCHAR);
t.addColumn("PROCEDURE_TYPE", Column.SMALLINT);
t.createPrimaryKey();
return t;
} else if (name.equals("SYSTEM_PROCEDURECOLUMNS")) {
Table t = createTable(name);
t.addColumn("PROCEDURE_" + META_CAT, Column.VARCHAR);
t.addColumn("PROCEDURE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("PROCEDURE_NAME", Column.VARCHAR);
t.addColumn("COLUMN_NAME", Column.VARCHAR);
t.addColumn("COLUMN_TYPE", Column.SMALLINT);
t.addColumn("DATA_TYPE", Column.SMALLINT);
t.addColumn("TYPE_NAME", Column.VARCHAR);
t.addColumn("PRECISION", Column.INTEGER);
t.addColumn("LENGTH", Column.INTEGER);
t.addColumn("SCALE", Column.SMALLINT);
t.addColumn("RADIX", Column.SMALLINT);
t.addColumn("NULLABLE", Column.SMALLINT);
t.addColumn("REMARKS", Column.VARCHAR);
t.createPrimaryKey();
return t;
} else if (name.equals("SYSTEM_TABLES")) {
Table t = createTable(name);
t.addColumn("TABLE_" + META_CAT, Column.VARCHAR);
t.addColumn("TABLE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("TABLE_NAME", Column.VARCHAR);
t.addColumn("TABLE_TYPE", Column.VARCHAR);
t.addColumn("REMARKS", Column.VARCHAR);
t.createPrimaryKey();
for (int i = 0; i < tTable.size(); i++) {
Table table = (Table) tTable.elementAt(i);
Object o[] = t.getNewRow();
o[2] = table.getName();
o[3] = "TABLE";
t.insert(o, null);
}
return t;
} else if (name.equals("SYSTEM_SCHEMAS")) {
Table t = createTable(name);
t.addColumn("TABLE_" + META_SCHEM, Column.VARCHAR);
t.createPrimaryKey();
return t;
} else if (name.equals("SYSTEM_CATALOGS")) {
Table t = createTable(name);
t.addColumn("TABLE_" + META_CAT, Column.VARCHAR);
t.createPrimaryKey();
return t;
} else if (name.equals("SYSTEM_TABLETYPES")) {
Table t = createTable(name);
t.addColumn("TABLE_TYPE", Column.VARCHAR);
t.createPrimaryKey();
Object o[] = t.getNewRow();
o[0] = "TABLE";
t.insert(o, null);
return t;
} else if (name.equals("SYSTEM_COLUMNS")) {
Table t = createTable(name);
t.addColumn("TABLE_" + META_CAT, Column.VARCHAR);
t.addColumn("TABLE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("TABLE_NAME", Column.VARCHAR);
t.addColumn("COLUMN_NAME", Column.VARCHAR);
t.addColumn("DATA_TYPE", Column.SMALLINT);
t.addColumn("TYPE_NAME", Column.VARCHAR);
t.addColumn(META_COLUMN_SIZE, Column.INTEGER);
t.addColumn(META_BUFFER_LENGTH, Column.INTEGER);
t.addColumn(META_DECIMAL_DIGITS, Column.INTEGER);
t.addColumn(META_NUM_PREC_RADIX, Column.INTEGER);
t.addColumn("NULLABLE", Column.INTEGER);
t.addColumn("REMARKS", Column.VARCHAR);
// Access and Intersolv do not return this fields
t.addColumn("COLUMN_DEF", Column.VARCHAR);
t.addColumn("SQL_DATA_TYPE", Column.VARCHAR);
t.addColumn("SQL_DATETIME_SUB", Column.INTEGER);
t.addColumn("CHAR_OCTET_LENGTH", Column.INTEGER);
t.addColumn("ORDINAL_POSITION", Column.VARCHAR);
t.addColumn("IS_NULLABLE", Column.VARCHAR);
t.createPrimaryKey();
for (int i = 0; i < tTable.size(); i++) {
Table table = (Table) tTable.elementAt(i);
int columns = table.getColumnCount();
for (int j = 0; j < columns; j++) {
Object o[] = t.getNewRow();
o[2] = table.getName();
o[3] = table.getColumnName(j);
o[4] = new Short((short) table.getColumnType(j));
o[5] = Column.getType(table.getColumnType(j));
int nullable;
if (table.getColumnIsNullable(j)) {
nullable = DatabaseMetaData.columnNullable;
} else {
nullable = DatabaseMetaData.columnNoNulls;
}
o[10] = new Integer(nullable);
if (table.getIdentityColumn() == j) {
o[11] = "IDENTITY";
}
t.insert(o, null);
}
}
return t;
} else if (name.equals("SYSTEM_COLUMNPRIVILEGES")) {
Table t = createTable(name);
t.addColumn("TABLE_" + META_CAT, Column.VARCHAR);
t.addColumn("TABLE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("TABLE_NAME", Column.VARCHAR);
t.addColumn("COLUMN_NAME", Column.VARCHAR);
t.addColumn("GRANTOR", Column.VARCHAR);
t.addColumn("GRANTEE", Column.VARCHAR);
t.addColumn("PRIVILEGE", Column.VARCHAR);
t.addColumn("IS_GRANTABLE", Column.VARCHAR);
t.createPrimaryKey();
/*
* // todo: get correct info
* for(int i=0;i<tTable.size();i++) {
* Table table=(Table)tTable.elementAt(i);
* int columns=table.getColumnCount();
* for(int j=0;j<columns;j++) {
* Object o[]=t.getNewRow();
* o[2]=table.getName();
* o[3]=table.getColumnName(j);
* o[4]="sa";
* o[6]="FULL";
* o[7]="NO";
* t.insert(o,null);
* }
* }
*/
return t;
} else if (name.equals("SYSTEM_TABLEPRIVILEGES")) {
Table t = createTable(name);
t.addColumn("TABLE_" + META_CAT, Column.VARCHAR);
t.addColumn("TABLE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("TABLE_NAME", Column.VARCHAR);
t.addColumn("GRANTOR", Column.VARCHAR);
t.addColumn("GRANTEE", Column.VARCHAR);
t.addColumn("PRIVILEGE", Column.VARCHAR);
t.addColumn("IS_GRANTABLE", Column.VARCHAR);
t.createPrimaryKey();
for (int i = 0; i < tTable.size(); i++) {
Table table = (Table) tTable.elementAt(i);
Object o[] = t.getNewRow();
o[2] = table.getName();
o[3] = "sa";
o[5] = "FULL";
t.insert(o, null);
}
return t;
} else if (name.equals("SYSTEM_BESTROWIDENTIFIER")) {
Table t = createTable(name);
t.addColumn("SCOPE", Column.SMALLINT);
t.addColumn("COLUMN_NAME", Column.VARCHAR);
t.addColumn("DATA_TYPE", Column.SMALLINT);
t.addColumn("TYPE_NAME", Column.VARCHAR);
t.addColumn(META_COLUMN_SIZE, Column.INTEGER);
t.addColumn(META_BUFFER_LENGTH, Column.INTEGER);
t.addColumn(META_DECIMAL_DIGITS, Column.SMALLINT);
t.addColumn("PSEUDO_COLUMN", Column.SMALLINT);
t.createPrimaryKey();
return t;
} else if (name.equals("SYSTEM_VERSIONCOLUMNS")) {
Table t = createTable(name);
t.addColumn("SCOPE", Column.INTEGER);
t.addColumn("COLUMN_NAME", Column.VARCHAR);
t.addColumn("DATA_TYPE", Column.SMALLINT);
t.addColumn("TYPE_NAME", Column.VARCHAR);
t.addColumn(META_COLUMN_SIZE, Column.SMALLINT);
t.addColumn(META_BUFFER_LENGTH, Column.INTEGER);
t.addColumn(META_DECIMAL_DIGITS, Column.SMALLINT);
t.addColumn("PSEUDO_COLUMN", Column.SMALLINT);
t.createPrimaryKey();
return t;
} else if (name.equals("SYSTEM_PRIMARYKEYS")) {
Table t = createTable(name);
t.addColumn("TABLE_" + META_CAT, Column.VARCHAR);
t.addColumn("TABLE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("TABLE_NAME", Column.VARCHAR);
t.addColumn("COLUMN_NAME", Column.VARCHAR);
t.addColumn("KEY_SEQ", Column.SMALLINT);
t.addColumn("PK_NAME", Column.VARCHAR);
t.createPrimaryKey();
for (int i = 0; i < tTable.size(); i++) {
Table table = (Table) tTable.elementAt(i);
Index index = table.getIndex("SYSTEM_PK");
int cols[] = index.getColumns();
int len = cols.length;
for (int j = 0; j < len; j++) {
Object o[] = t.getNewRow();
o[2] = table.getName();
o[3] = table.getColumnName(cols[j]);
o[4] = new Short((short) (j + 1));
o[5] = "SYSTEM_PK";
t.insert(o, null);
}
}
return t;
} else if (name.equals("SYSTEM_IMPORTEDKEYS")) {
Table t = createTable(name);
t.addColumn("PKTABLE_" + META_CAT, Column.VARCHAR);
t.addColumn("PKTABLE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("PKTABLE_NAME", Column.VARCHAR);
t.addColumn("PKCOLUMN_NAME", Column.VARCHAR);
t.addColumn("FKTABLE_" + META_CAT, Column.VARCHAR);
t.addColumn("FKTABLE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("FKTABLE_NAME", Column.VARCHAR);
t.addColumn("FKCOLUMN_NAME", Column.VARCHAR);
t.addColumn("KEY_SEQ", Column.SMALLINT);
t.addColumn("UPDATE_RULE", Column.SMALLINT);
t.addColumn("DELETE_RULE", Column.SMALLINT);
t.addColumn("FK_NAME", Column.VARCHAR);
t.addColumn("PK_NAME", Column.VARCHAR);
t.addColumn("DEFERRABILITY", Column.SMALLINT);
t.createPrimaryKey();
return t;
} else if (name.equals("SYSTEM_EXPORTEDKEYS")) {
Table t = createTable(name);
t.addColumn("PKTABLE_" + META_CAT, Column.VARCHAR);
t.addColumn("PKTABLE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("PKTABLE_NAME", Column.VARCHAR);
t.addColumn("PKCOLUMN_NAME", Column.VARCHAR);
t.addColumn("FKTABLE_" + META_CAT, Column.VARCHAR);
t.addColumn("FKTABLE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("FKTABLE_NAME", Column.VARCHAR);
t.addColumn("FKCOLUMN_NAME", Column.VARCHAR);
t.addColumn("KEY_SEQ", Column.SMALLINT);
t.addColumn("UPDATE_RULE", Column.SMALLINT);
t.addColumn("DELETE_RULE", Column.SMALLINT);
t.addColumn("FK_NAME", Column.VARCHAR);
t.addColumn("PK_NAME", Column.VARCHAR);
t.addColumn("DEFERRABILITY", Column.SMALLINT);
t.createPrimaryKey();
return t;
} else if (name.equals("SYSTEM_CROSSREFERENCE")) {
Table t = createTable(name);
t.addColumn("PKTABLE_" + META_CAT, Column.VARCHAR);
t.addColumn("PKTABLE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("PKTABLE_NAME", Column.VARCHAR);
t.addColumn("PKCOLUMN_NAME", Column.VARCHAR);
t.addColumn("FKTABLE_" + META_CAT, Column.VARCHAR);
t.addColumn("FKTABLE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("FKTABLE_NAME", Column.VARCHAR);
t.addColumn("FKCOLUMN_NAME", Column.VARCHAR);
t.addColumn("KEY_SEQ", Column.INTEGER);
t.addColumn("UPDATE_RULE", Column.SMALLINT);
t.addColumn("DELETE_RULE", Column.SMALLINT);
t.addColumn("FK_NAME", Column.VARCHAR);
t.addColumn("PK_NAME", Column.VARCHAR);
t.addColumn("DEFERRABILITY", Column.SMALLINT);
t.createPrimaryKey();
return t;
} else if (name.equals("SYSTEM_TYPEINFO")) {
Table t = createTable(name);
t.addColumn("TYPE_NAME", Column.VARCHAR);
t.addColumn("DATA_TYPE", Column.SMALLINT);
t.addColumn("PRECISION", Column.INTEGER);
t.addColumn("LITERAL_PREFIX", Column.VARCHAR);
t.addColumn("LITERAL_SUFFIX", Column.VARCHAR);
t.addColumn("CREATE_PARAMS", Column.VARCHAR);
t.addColumn("NULLABLE", Column.SMALLINT);
t.addColumn("CASE_SENSITIVE", Column.VARCHAR);
t.addColumn("SEARCHABLE", Column.SMALLINT);
t.addColumn("UNSIGNED_ATTRIBUTE", Column.BIT);
t.addColumn(META_FIXED_PREC_SCALE, Column.BIT);
t.addColumn("AUTO_INCREMENT", Column.BIT);
t.addColumn("LOCAL_TYPE_NAME", Column.VARCHAR);
t.addColumn("MINIMUM_SCALE", Column.SMALLINT);
t.addColumn("MAXIMUM_SCALE", Column.SMALLINT);
// this columns are not supported by Access and Intersolv
t.addColumn("SQL_DATE_TYPE", Column.INTEGER);
t.addColumn("SQL_DATETIME_SUB", Column.INTEGER);
t.addColumn("NUM_PREC_RADIX", Column.INTEGER);
t.createPrimaryKey();
for (int i = 0; i < Column.TYPES.length; i++) {
Object o[] = t.getNewRow();
int type = Column.TYPES[i];
o[0] = Column.getType(type);
o[1] = new Short((short) type);
o[2] = new Integer(0); // precision
o[6] = new Short((short) DatabaseMetaData.typeNullable);
o[7] = new Boolean(true); // case sensitive
o[8] = new Short((short) DatabaseMetaData.typeSearchable);
o[9] = new Boolean(false); // unsigned
o[10] = new Boolean(type == Column.NUMERIC
|| type == Column.DECIMAL);
o[11] = new Boolean(type == Column.INTEGER);
o[12] = o[0];
o[13] = new Short((short) 0);
o[14] = new Short((short) 0); // maximum scale
o[15] = new Integer((short) 0);
o[16] = o[15];
o[17] = new Integer(10);
t.insert(o, null);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -