📄 databaseinformationmain.java
字号:
* SOURCE_DATA_TYPE VARCHAR source type of REF attribute * TYPE_SUB INTEGER HSQLDB data subtype code * </pre> <p> * * @return a <code>Table</code> object describing the * visible columns of all accessible * tables defined within this database.<p> * @throws HsqlException if an error occurs while producing the table */ final Table SYSTEM_COLUMNS() throws HsqlException { Table t = sysTables[SYSTEM_COLUMNS]; if (t == null) { t = createBlankTable(sysTableHsqlNames[SYSTEM_COLUMNS]); addColumn(t, "TABLE_CAT", Types.VARCHAR); addColumn(t, "TABLE_SCHEM", Types.VARCHAR); addColumn(t, "TABLE_NAME", Types.VARCHAR, false); // not null addColumn(t, "COLUMN_NAME", Types.VARCHAR, false); // not null addColumn(t, "DATA_TYPE", Types.SMALLINT, false); // not null addColumn(t, "TYPE_NAME", Types.VARCHAR, 32, false); // not null addColumn(t, "COLUMN_SIZE", Types.INTEGER); addColumn(t, "BUFFER_LENGTH", Types.INTEGER); addColumn(t, "DECIMAL_DIGITS", Types.INTEGER); addColumn(t, "NUM_PREC_RADIX", Types.INTEGER); addColumn(t, "NULLABLE", Types.INTEGER, false); // not null addColumn(t, "REMARKS", Types.VARCHAR); addColumn(t, "COLUMN_DEF", Types.VARCHAR); addColumn(t, "SQL_DATA_TYPE", Types.INTEGER); addColumn(t, "SQL_DATETIME_SUB", Types.INTEGER); addColumn(t, "CHAR_OCTET_LENGTH", Types.INTEGER); addColumn(t, "ORDINAL_POSITION", Types.INTEGER, false); // not null addColumn(t, "IS_NULLABLE", Types.VARCHAR, 3, false); // not null addColumn(t, "SCOPE_CATLOG", Types.VARCHAR); addColumn(t, "SCOPE_SCHEMA", Types.VARCHAR); addColumn(t, "SCOPE_TABLE", Types.VARCHAR); addColumn(t, "SOURCE_DATA_TYPE", Types.VARCHAR); addColumn(t, "TYPE_SUB", Types.INTEGER, false); // not null // order: TABLE_SCHEM, TABLE_NAME, ORDINAL_POSITION // added for unique: TABLE_CAT // false PK, as TABLE_SCHEM and/or TABLE_CAT may be null t.createPrimaryKey(null, new int[] { 1, 2, 16, 0 }, false); return t; } // calculated column values String tableCatalog; String tableSchema; String tableName; // intermediate holders int columnCount; Iterator tables; Table table; Object[] row; DITableInfo ti; // column number mappings final int itable_cat = 0; final int itable_schem = 1; final int itable_name = 2; final int icolumn_name = 3; final int idata_type = 4; final int itype_name = 5; final int icolumn_size = 6; final int ibuffer_length = 7; final int idecimal_digits = 8; final int inum_prec_radix = 9; final int inullable = 10; final int iremark = 11; final int icolumn_def = 12; final int isql_data_type = 13; final int isql_datetime_sub = 14; final int ichar_octet_length = 15; final int iordinal_position = 16; final int iis_nullable = 17; final int itype_sub = 22; // Initialization tables = allTables(); ti = new DITableInfo(); // Do it. while (tables.hasNext()) { table = (Table) tables.next(); if (!isAccessibleTable(table)) { continue; } ti.setTable(table); tableCatalog = ns.getCatalogName(table); tableSchema = table.getSchemaName(); tableName = ti.getName(); columnCount = table.getColumnCount(); for (int i = 0; i < columnCount; i++) { row = t.getEmptyRowData(); row[itable_cat] = tableCatalog; row[itable_schem] = tableSchema; row[itable_name] = tableName; row[icolumn_name] = ti.getColName(i); row[idata_type] = ti.getColDataType(i); row[itype_name] = ti.getColDataTypeName(i); row[icolumn_size] = ti.getColSize(i); row[ibuffer_length] = ti.getColBufLen(i); row[idecimal_digits] = ti.getColScale(i); row[inum_prec_radix] = ti.getColPrecRadix(i); row[inullable] = ti.getColNullability(i); row[iremark] = ti.getColRemarks(i); row[icolumn_def] = ti.getColDefault(i); row[isql_data_type] = ti.getColSqlDataType(i); row[isql_datetime_sub] = ti.getColSqlDateTimeSub(i); row[ichar_octet_length] = ti.getColCharOctLen(i); row[iordinal_position] = ValuePool.getInt(i + 1); row[iis_nullable] = ti.getColIsNullable(i); row[itype_sub] = ti.getColDataTypeSub(i); t.insertSys(row); } } t.setDataReadOnly(true); return t; } /** * Retrieves a <code>Table</code> object describing, for each * accessible referencing and referenced table, how the referencing * tables import, for the purposes of referential integrity, * the columns of the referenced tables.<p> * * Each row is a foreign key column description with the following * columns: <p> * * <pre class="SqlCodeExample"> * PKTABLE_CAT VARCHAR referenced table catalog * PKTABLE_SCHEM VARCHAR referenced table schema * PKTABLE_NAME VARCHAR referenced table name * PKCOLUMN_NAME VARCHAR referenced column name * FKTABLE_CAT VARCHAR referencing table catalog * FKTABLE_SCHEM VARCHAR referencing table schema * FKTABLE_NAME VARCHAR referencing table name * FKCOLUMN_NAME VARCHAR referencing column * KEY_SEQ SMALLINT sequence number within foreign key * UPDATE_RULE SMALLINT * { Cascade | Set Null | Set Default | Restrict (No Action)}? * DELETE_RULE SMALLINT * { Cascade | Set Null | Set Default | Restrict (No Action)}? * FK_NAME VARCHAR foreign key constraint name * PK_NAME VARCHAR primary key or unique constraint name * DEFERRABILITY SMALLINT * { initially deferred | initially immediate | not deferrable } * </pre> <p> * * @return a <code>Table</code> object describing how accessible tables * import other accessible tables' primary key and/or unique * constraint columns * @throws HsqlException if an error occurs while producing the table */ final Table SYSTEM_CROSSREFERENCE() throws HsqlException { Table t = sysTables[SYSTEM_CROSSREFERENCE]; if (t == null) { t = createBlankTable(sysTableHsqlNames[SYSTEM_CROSSREFERENCE]); addColumn(t, "PKTABLE_CAT", Types.VARCHAR); addColumn(t, "PKTABLE_SCHEM", Types.VARCHAR); addColumn(t, "PKTABLE_NAME", Types.VARCHAR, false); // not null addColumn(t, "PKCOLUMN_NAME", Types.VARCHAR, false); // not null addColumn(t, "FKTABLE_CAT", Types.VARCHAR); addColumn(t, "FKTABLE_SCHEM", Types.VARCHAR); addColumn(t, "FKTABLE_NAME", Types.VARCHAR, false); // not null addColumn(t, "FKCOLUMN_NAME", Types.VARCHAR, false); // not null addColumn(t, "KEY_SEQ", Types.SMALLINT, false); // not null addColumn(t, "UPDATE_RULE", Types.SMALLINT, false); // not null addColumn(t, "DELETE_RULE", Types.SMALLINT, false); // not null addColumn(t, "FK_NAME", Types.VARCHAR); addColumn(t, "PK_NAME", Types.VARCHAR); addColumn(t, "DEFERRABILITY", Types.SMALLINT, false); // not null // order: FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and KEY_SEQ // added for unique: FK_NAME // false PK, as FKTABLE_CAT, FKTABLE_SCHEM and/or FK_NAME // may be null t.createPrimaryKey(null, new int[] { 4, 5, 6, 8, 11 }, false); return t; } // calculated column values String pkTableCatalog; String pkTableSchema; String pkTableName; String pkColumnName; String fkTableCatalog; String fkTableSchema; String fkTableName; String fkColumnName; Integer keySequence; Integer updateRule; Integer deleteRule; String fkName; String pkName; Integer deferrability; // Intermediate holders Iterator tables; Table table; Table fkTable; Table pkTable; int columnCount; int[] mainCols; int[] refCols; Constraint[] constraints; Constraint constraint; int constraintCount; HsqlArrayList fkConstraintsList; Object[] row; DITableInfo pkInfo; DITableInfo fkInfo; // column number mappings final int ipk_table_cat = 0; final int ipk_table_schem = 1; final int ipk_table_name = 2; final int ipk_column_name = 3; final int ifk_table_cat = 4; final int ifk_table_schem = 5; final int ifk_table_name = 6; final int ifk_column_name = 7; final int ikey_seq = 8; final int iupdate_rule = 9; final int idelete_rule = 10; final int ifk_name = 11; final int ipk_name = 12; final int ideferrability = 13; tables = database.schemaManager.allTablesIterator(); pkInfo = new DITableInfo(); fkInfo = new DITableInfo(); // the only deferrability rule currently supported by hsqldb is: deferrability = ValuePool.getInt(Constraint.NOT_DEFERRABLE); // We must consider all the constraints in all the user tables, since // this is where reference relationships are recorded. However, we // are only concerned with Constraint.FOREIGN_KEY constraints here // because their corresponing Constraint.MAIN entries are essentially // duplicate data recorded in the referenced rather than the // referencing table. Also, we skip constraints where either // the referenced, referencing or both tables are not accessible // relative to the session of the calling context fkConstraintsList = new HsqlArrayList(); while (tables.hasNext()) { table = (Table) tables.next(); if (!isAccessibleTable(table)) { continue; } constraints = table.getConstraints(); constraintCount = constraints.length; for (int i = 0; i < constraintCount; i++) { constraint = (Constraint) constraints[i]; if (constraint.getType() == Constraint.FOREIGN_KEY && isAccessibleTable(constraint.getRef())) { fkConstraintsList.add(constraint); } } } // Now that we have all of the desired constraints, we need to // process them, generating one row in our ouput table for each // imported/exported column pair of each constraint. // Do it. for (int i = 0; i < fkConstraintsList.size(); i++) { constraint = (Constraint) fkConstraintsList.get(i); pkTable = constraint.getMain(); pkInfo.setTable(pkTable); pkTableName = pkInfo.getName(); fkTable = constraint.getRef(); fkInfo.setTable(fkTable); fkTableName = fkInfo.getName(); pkTableCatalog = ns.getCatalogName(pkTable); pkTableSchema = pkTable.getSchemaName(); fkTableCatalog = ns.getCatalogName(fkTable); fkTableSchema = fkTable.getSchemaName(); mainCols = constraint.getMainColumns(); refCols = constraint.getRefColumns(); columnCount = refCols.length; fkName = constraint.getFkName(); pkName = constraint.getPkName(); //pkName = constraint.getMainIndex().getName().name; deleteRule = ValuePool.getInt(constraint.getDeleteAction()); updateRule = ValuePool.getInt(constraint.getUpdateAction()); for (int j = 0; j < columnCount; j++) { keySequence = ValuePool.getInt(j + 1); pkColumnName = pkInfo.getColName(mainCols[j]); fkColumnName = fkInfo.getColName(refCols[j]); row = t.getEmptyRowData(); row[ipk_table_cat] = pkTableCatalog; row[ipk_table_schem] = pkTableSchema; row[ipk_table_name] = pkTableName; row[ipk_column_name] = pkColumnName; row[ifk_table_cat] = fkTableCatalog; row[ifk_table_schem] = fkTableSchema; row[ifk_table_name] = fkTableName; row[ifk_column_name] = fkColumnName; row[ikey_seq] = keySequence;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -