📄 databaseinformation.java
字号:
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.NUMERIC);
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 Short((short)0);
o[16]=o[15];
o[17]=new Integer(10);
t.insert(o,null);
}
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;
}
return null;
}
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));
}
}
a.append(')');
addRow(r,a.toString());
Index index=null;
while(true) {
index=t.getNextIndex(index);
if(index==null) {
break;
}
if(index.getName().equals("SYSTEM_PK")) {
continue;
}
if(index.getName().startsWith("SYSTEM_FOREIGN_KEY")) {
// foreign keys where created in the 'create table'
continue;
}
a=new StringBuffer("CREATE ");
if(index.isUnique()) {
a.append("UNIQUE ");
}
a.append("INDEX ");
a.append(index.getName());
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());
}
}
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;
}
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();
}
private void addRow(Result r,String sql) {
String s[]=new String[1];
s[0]=sql;
r.add(s);
}
private Table createTable(String name) {
return new Table(dDatabase,false,name,false);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -