📄 databaseinformation.java
字号:
}
return t;
} else if (name.equals("SYSTEM_INDEXINFO")) {
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("NON_UNIQUE", Column.BIT);
t.addColumn("INDEX_QUALIFIER", Column.VARCHAR);
t.addColumn("INDEX_NAME", Column.VARCHAR);
t.addColumn("TYPE", Column.SMALLINT);
t.addColumn(META_ORDINAL_POSITON, Column.SMALLINT);
t.addColumn("COLUMN_NAME", Column.VARCHAR);
t.addColumn(META_ASC_OR_DESC, Column.VARCHAR);
t.addColumn("CARDINALITY", Column.INTEGER);
t.addColumn("PAGES", Column.INTEGER);
t.addColumn("FILTER_CONDITION", Column.VARCHAR);
t.createPrimaryKey();
for (int i = 0; i < tTable.size(); i++) {
Table table = (Table) tTable.elementAt(i);
Index index = null;
while (true) {
index = table.getNextIndex(index);
if (index == null) {
break;
}
int cols[] = index.getColumns();
int len = cols.length;
// this removes the column that makes every index unique
if (!index.isUnique()) {
len--;
}
for (int j = 0; j < len; j++) {
Object o[] = t.getNewRow();
o[2] = table.getName();
o[3] = new Boolean(!index.isUnique());
o[5] = index.getName();
o[6] = new Short(DatabaseMetaData.tableIndexOther);
o[7] = new Short((short) (j + 1));
o[8] = table.getColumnName(cols[j]);
o[9] = "A";
t.insert(o, null);
}
}
}
return t;
} else if (name.equals("SYSTEM_UDTS")) {
Table t = createTable(name);
t.addColumn("TYPE_" + META_CAT, Column.VARCHAR);
t.addColumn("TYPE_" + META_SCHEM, Column.VARCHAR);
t.addColumn("TYPE_NAME", Column.VARCHAR);
t.addColumn("CLASS_NAME", Column.BIT);
t.addColumn("DATA_TYPE", Column.VARCHAR);
t.addColumn("REMARKS", Column.VARCHAR);
t.createPrimaryKey();
return t;
} else if (name.equals("SYSTEM_CONNECTIONINFO")) {
Table t = createTable(name);
t.addColumn("KEY", Column.VARCHAR);
t.addColumn("VALUE", Column.VARCHAR);
t.createPrimaryKey();
Object o[] = t.getNewRow();
o[0] = "USER";
o[1] = channel.getUsername();
t.insert(o, null);
o = t.getNewRow();
o[0] = "READONLY";
o[1] = channel.isReadOnly() ? "TRUE" : "FALSE";
t.insert(o, null);
o = t.getNewRow();
o[0] = "MAXROWS";
o[1] = "" + channel.getMaxRows();
t.insert(o, null);
o = t.getNewRow();
o[0] = "DATABASE";
o[1] = "" + channel.getDatabase().getName();
t.insert(o, null);
o = t.getNewRow();
o[0] = "IDENTITY";
o[1] = "" + channel.getLastIdentity();
t.insert(o, null);
return t;
} else if (name.equals("SYSTEM_USERS")) {
Table t = createTable(name);
t.addColumn("USER", Column.VARCHAR);
t.addColumn("ADMIN", Column.BIT);
t.createPrimaryKey();
Vector v = aAccess.getUsers();
for (int i = 0; i < v.size(); i++) {
User u = (User) v.elementAt(i);
// todo: this is not a nice implementation
if (u == null) {
continue;
}
String user = u.getName();
if (!user.equals("PUBLIC")) {
Object o[] = t.getNewRow();
o[0] = user;
o[1] = new Boolean(u.isAdmin());
t.insert(o, null);
}
}
return t;
}
return null;
}
/**
* Method declaration
*
*
* @param bDrop
* @param bInsert
* @param bCached
* @param channel
*
* @return
*
* @throws SQLException
*/
Result getScript(boolean bDrop, boolean bInsert, boolean bCached,
Channel channel) throws SQLException {
channel.checkAdmin();
Result r = new Result(1);
r.iType[0] = Column.VARCHAR;
r.sTable[0] = "SYSTEM_SCRIPT";
r.sLabel[0] = "COMMAND";
r.sName[0] = "COMMAND";
StringBuffer a;
for (int i = 0; i < tTable.size(); i++) {
Table t = (Table) tTable.elementAt(i);
if (bDrop) {
addRow(r, "DROP TABLE " + t.getName());
}
a = new StringBuffer("CREATE ");
if (t.isCached()) {
a.append("CACHED ");
}
a.append("TABLE ");
a.append(t.getName());
a.append('(');
int columns = t.getColumnCount();
Index pki = t.getIndex("SYSTEM_PK");
int pk = (pki == null) ? -1 : pki.getColumns()[0];
for (int j = 0; j < columns; j++) {
a.append(t.getColumnName(j));
a.append(' ');
a.append(Column.getType(t.getType(j)));
if (!t.getColumnIsNullable(j)) {
a.append(" NOT NULL");
}
if (j == t.getIdentityColumn()) {
a.append(" IDENTITY");
}
if (j == pk) {
a.append(" PRIMARY KEY");
}
if (j < columns - 1) {
a.append(',');
}
}
Vector v = t.getConstraints();
for (int j = 0; j < v.size(); j++) {
Constraint c = (Constraint) v.elementAt(j);
if (c.getType() == Constraint.FOREIGN_KEY) {
a.append(",FOREIGN KEY");
int col[] = c.getRefColumns();
a.append(getColumnList(c.getRef(), col, col.length));
a.append("REFERENCES ");
a.append(c.getMain().getName());
col = c.getMainColumns();
a.append(getColumnList(c.getMain(), col, col.length));
} else if (c.getType() == Constraint.UNIQUE) {
a.append(",UNIQUE");
int col[] = c.getMainColumns();
a.append(getColumnList(c.getMain(), col, col.length));
}
}
a.append(')');
addRow(r, a.toString());
Index index = null;
while (true) {
index = t.getNextIndex(index);
if (index == null) {
break;
}
String indexname = index.getName();
if (indexname.equals("SYSTEM_PK")) {
continue;
} else if (indexname.startsWith("SYSTEM_FOREIGN_KEY")) {
// foreign keys where created in the 'create table'
continue;
} else if (indexname.startsWith("SYSTEM_CONSTRAINT")) {
// constraints where created in the 'create table'
continue;
}
a = new StringBuffer("CREATE ");
if (index.isUnique()) {
a.append("UNIQUE ");
}
a.append("INDEX ");
a.append(indexname);
a.append(" ON ");
a.append(t.getName());
int col[] = index.getColumns();
int len = col.length;
if (!index.isUnique()) {
len--;
}
a.append(getColumnList(t, col, len));
addRow(r, a.toString());
}
if (bInsert) {
Index primary = t.getPrimaryIndex();
Node x = primary.first();
boolean integrity = true;
if (x != null) {
integrity = false;
addRow(r, "SET REFERENTIAL_INTEGRITY FALSE");
}
while (x != null) {
addRow(r, t.getInsertStatement(x.getData()));
x = primary.next(x);
}
if (!integrity) {
addRow(r, "SET REFERENTIAL_INTEGRITY TRUE");
}
}
if (bCached && t.isCached()) {
a = new StringBuffer("SET TABLE ");
a.append(t.getName());
a.append(" INDEX '");
a.append(t.getIndexRoots());
a.append("'");
addRow(r, a.toString());
}
// trigger script
int numTrigs = TriggerDef.numTrigs();
for (int tv = 0; tv < numTrigs; tv++) {
Vector trigVec = t.vTrigs[tv];
int trCount = trigVec.size();
for (int k = 0; k < trCount; k++) {
a = ((TriggerDef) trigVec.elementAt(k)).toBuf();
addRow(r, a.toString());
}
}
}
Vector v = aAccess.getUsers();
for (int i = 0; i < v.size(); i++) {
User u = (User) v.elementAt(i);
// todo: this is not a nice implementation
if (u == null) {
continue;
}
String name = u.getName();
if (!name.equals("PUBLIC")) {
a = new StringBuffer("CREATE USER ");
a.append(name);
a.append(" PASSWORD ");
a.append("\"" + u.getPassword() + "\"");
if (u.isAdmin()) {
a.append(" ADMIN");
}
addRow(r, a.toString());
}
Hashtable rights = u.getRights();
if (rights == null) {
continue;
}
Enumeration e = rights.keys();
while (e.hasMoreElements()) {
String object = (String) e.nextElement();
int right = ((Integer) (rights.get(object))).intValue();
if (right == 0) {
continue;
}
a = new StringBuffer("GRANT ");
a.append(Access.getRight(right));
a.append(" ON ");
a.append(object);
a.append(" TO ");
a.append(u.getName());
addRow(r, a.toString());
}
}
if (dDatabase.isIgnoreCase()) {
addRow(r, "SET IGNORECASE TRUE");
}
Hashtable h = dDatabase.getAlias();
Enumeration e = h.keys();
while (e.hasMoreElements()) {
String alias = (String) e.nextElement();
String java = (String) h.get(alias);
addRow(r, "CREATE ALIAS " + alias + " FOR \"" + java + "\"");
}
return r;
}
/**
* Method declaration
*
*
* @param t
* @param col
* @param len
*
* @return
*/
private String getColumnList(Table t, int col[], int len) {
StringBuffer a = new StringBuffer("(");
for (int i = 0; i < len; i++) {
a.append(t.getColumnName(col[i]));
if (i < len - 1) {
a.append(',');
}
}
return a.append(')').toString();
}
/**
* Method declaration
*
*
* @param r
* @param sql
*/
private void addRow(Result r, String sql) {
String s[] = new String[1];
s[0] = sql;
r.add(s);
}
/**
* Method declaration
*
*
* @param name
*
* @return
*/
private Table createTable(String name) {
return new Table(dDatabase, false, name, false);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -