📄 interbasemodelreader.java
字号:
}
rs.close();
}
finally
{
stmt.close();
}
}
/**
* Adjusts the columns in the table by fixing types and default values.
*
* @param table The table
*/
protected void adjustColumns(Table table)
{
Column[] columns = table.getColumns();
for (int idx = 0; idx < columns.length; idx++)
{
if (columns[idx].getTypeCode() == Types.FLOAT)
{
columns[idx].setTypeCode(Types.REAL);
}
else if ((columns[idx].getTypeCode() == Types.NUMERIC) || (columns[idx].getTypeCode() == Types.DECIMAL))
{
if ((columns[idx].getTypeCode() == Types.NUMERIC) && (columns[idx].getSizeAsInt() == 18) && (columns[idx].getScale() == 0))
{
columns[idx].setTypeCode(Types.BIGINT);
}
}
else if (TypeMap.isTextType(columns[idx].getTypeCode()))
{
columns[idx].setDefaultValue(unescape(columns[idx].getDefaultValue(), "'", "''"));
}
}
}
/**
* {@inheritDoc}
*/
protected Collection readPrimaryKeyNames(DatabaseMetaDataWrapper metaData, String tableName) throws SQLException
{
List pks = new ArrayList();
ResultSet pkData = null;
try
{
if (getPlatform().isDelimitedIdentifierModeOn())
{
// Jaybird has a problem when delimited identifiers are used as
// it is not able to find the primary key info for the table
// So we have to filter manually below
pkData = metaData.getPrimaryKeys(getDefaultTablePattern());
while (pkData.next())
{
Map values = readColumns(pkData, getColumnsForPK());
if (tableName.equals(values.get("TABLE_NAME")))
{
pks.add(readPrimaryKeyName(metaData, values));
}
}
}
else
{
pkData = metaData.getPrimaryKeys(tableName);
while (pkData.next())
{
Map values = readColumns(pkData, getColumnsForPK());
pks.add(readPrimaryKeyName(metaData, values));
}
}
}
finally
{
if (pkData != null)
{
pkData.close();
}
}
return pks;
}
/**
* {@inheritDoc}
*/
protected boolean isInternalPrimaryKeyIndex(DatabaseMetaDataWrapper metaData, Table table, Index index) throws SQLException
{
String tableName = getPlatform().getSqlBuilder().getTableName(table);
String indexName = getPlatform().getSqlBuilder().getIndexName(index);
StringBuffer query = new StringBuffer();
query.append("SELECT RDB$CONSTRAINT_NAME FROM RDB$RELATION_CONSTRAINTS where RDB$RELATION_NAME=? AND RDB$CONSTRAINT_TYPE=? AND RDB$INDEX_NAME=?");
PreparedStatement stmt = getConnection().prepareStatement(query.toString());
try
{
stmt.setString(1, getPlatform().isDelimitedIdentifierModeOn() ? tableName : tableName.toUpperCase());
stmt.setString(2, "PRIMARY KEY");
stmt.setString(3, indexName);
ResultSet resultSet = stmt.executeQuery();
return resultSet.next();
}
finally
{
if (stmt != null)
{
stmt.close();
}
}
}
/**
* {@inheritDoc}
*/
protected boolean isInternalForeignKeyIndex(DatabaseMetaDataWrapper metaData, Table table, ForeignKey fk, Index index) throws SQLException
{
String tableName = getPlatform().getSqlBuilder().getTableName(table);
String indexName = getPlatform().getSqlBuilder().getIndexName(index);
String fkName = getPlatform().getSqlBuilder().getForeignKeyName(table, fk);
StringBuffer query = new StringBuffer();
query.append("SELECT RDB$CONSTRAINT_NAME FROM RDB$RELATION_CONSTRAINTS where RDB$RELATION_NAME=? AND RDB$CONSTRAINT_TYPE=? AND RDB$CONSTRAINT_NAME=? AND RDB$INDEX_NAME=?");
PreparedStatement stmt = getConnection().prepareStatement(query.toString());
try
{
stmt.setString(1, getPlatform().isDelimitedIdentifierModeOn() ? tableName : tableName.toUpperCase());
stmt.setString(2, "FOREIGN KEY");
stmt.setString(3, fkName);
stmt.setString(4, indexName);
ResultSet resultSet = stmt.executeQuery();
return resultSet.next();
}
finally
{
if (stmt != null)
{
stmt.close();
}
}
}
/**
* {@inheritDoc}
*/
public String determineSchemaOf(Connection connection, String schemaPattern, Table table) throws SQLException
{
ResultSet tableData = null;
ResultSet columnData = null;
try
{
DatabaseMetaDataWrapper metaData = new DatabaseMetaDataWrapper();
metaData.setMetaData(connection.getMetaData());
metaData.setCatalog(getDefaultCatalogPattern());
metaData.setSchemaPattern(schemaPattern == null ? getDefaultSchemaPattern() : schemaPattern);
metaData.setTableTypes(getDefaultTableTypes());
String tablePattern = table.getName();
if (getPlatform().isDelimitedIdentifierModeOn())
{
tablePattern = tablePattern.toUpperCase();
}
tableData = metaData.getTables(tablePattern);
boolean found = false;
String schema = null;
while (!found && tableData.next())
{
Map values = readColumns(tableData, getColumnsForTable());
String tableName = (String)values.get("TABLE_NAME");
if ((tableName != null) && (tableName.length() > 0))
{
schema = (String)values.get("TABLE_SCHEM");
found = true;
if (getPlatform().isDelimitedIdentifierModeOn())
{
// Jaybird has a problem when delimited identifiers are used as
// it is not able to find the columns for the table
// So we have to filter manually below
columnData = metaData.getColumns(getDefaultTablePattern(), getDefaultColumnPattern());
}
else
{
columnData = metaData.getColumns(tableName, getDefaultColumnPattern());
}
while (found && columnData.next())
{
values = readColumns(columnData, getColumnsForColumn());
if (getPlatform().isDelimitedIdentifierModeOn() &&
!tableName.equals(values.get("TABLE_NAME")))
{
continue;
}
if (table.findColumn((String)values.get("COLUMN_NAME"),
getPlatform().isDelimitedIdentifierModeOn()) == null)
{
found = false;
}
}
columnData.close();
columnData = null;
}
}
return found ? schema : null;
}
finally
{
if (columnData != null)
{
columnData.close();
}
if (tableData != null)
{
tableData.close();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -