Skip to content

Commit

Permalink
0002285: Slight performance improvement in reading table metadata on …
Browse files Browse the repository at this point in the history
…Firebird
  • Loading branch information
chenson42 committed Apr 28, 2015
1 parent b42b9a3 commit ddfa012
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 112 deletions.
Expand Up @@ -19,6 +19,7 @@
* under the License.
*/

import static org.apache.commons.lang.StringUtils.isBlank;
import static org.apache.commons.lang.StringUtils.isNotBlank;

import java.sql.Connection;
Expand Down Expand Up @@ -243,6 +244,7 @@ protected List<MetaDataColumnDescriptor> initColumnsForFK() {
result.add(new MetaDataColumnDescriptor("FKTABLE_NAME", Types.VARCHAR));
result.add(new MetaDataColumnDescriptor("KEY_SEQ", Types.TINYINT, new Short((short) 0)));
result.add(new MetaDataColumnDescriptor("FK_NAME", Types.VARCHAR));
result.add(new MetaDataColumnDescriptor("FKTABLE_NAME", Types.VARCHAR));
result.add(new MetaDataColumnDescriptor("PKCOLUMN_NAME", Types.VARCHAR));
result.add(new MetaDataColumnDescriptor("FKCOLUMN_NAME", Types.VARCHAR));
return result;
Expand Down Expand Up @@ -1024,7 +1026,10 @@ protected Collection<ForeignKey> readForeignKeys(Connection connection,

while (fkData.next()) {
Map<String, Object> values = readMetaData(fkData, getColumnsForFK());
readForeignKey(metaData, values, fks);
String fkTableName = (String)values.get("FKTABLE_NAME");
if (isBlank(fkTableName) || fkTableName.equalsIgnoreCase(tableName)) {
readForeignKey(metaData, values, fks);
}
}
} finally {
close(fkData);
Expand Down
Expand Up @@ -24,10 +24,8 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.map.ListOrderedMap;
Expand Down Expand Up @@ -83,47 +81,6 @@ protected void setPrimaryKeyConstraintName(Connection connection, Table table) t
}
}

@Override
protected Collection<Column> readColumns(DatabaseMetaDataWrapper metaData, String tableName)
throws SQLException {
ResultSet columnData = null;
try {
List<Column> columns = new ArrayList<Column>();

if (getPlatform().getDdlBuilder().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());

while (columnData.next()) {
Map<String,Object> values = readMetaData(columnData, getColumnsForColumn());

if (tableName.equals(values.get("TABLE_NAME"))) {
columns.add(readColumn(metaData, values));
}
}
} else {
columnData = metaData.getColumns(tableName, getDefaultColumnPattern());

while (columnData.next()) {
Map<String,Object> values = readMetaData(columnData, getColumnsForColumn());

if (tableName.equals(values.get("TABLE_NAME"))) {
columns.add(readColumn(metaData, values));
}
}
}

return columns;
} finally {
if (columnData != null) {
columnData.close();
}
}
}

@Override
protected Column readColumn(DatabaseMetaDataWrapper metaData, Map<String,Object> values) throws SQLException {
Column column = super.readColumn(metaData, values);
Expand Down Expand Up @@ -183,74 +140,6 @@ protected void determineAutoIncrementColumns(Connection connection, Table table)
}
}

@Override
protected Collection<String> readPrimaryKeyNames(DatabaseMetaDataWrapper metaData, String tableName)
throws SQLException {
List<String> pks = new ArrayList<String>();
ResultSet pkData = null;

try {
if (getPlatform().getDdlBuilder().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());
} else {
pkData = metaData.getPrimaryKeys(tableName);
}
while (pkData.next()) {
Map<String,Object> values = readMetaData(pkData, getColumnsForPK());

if (tableName.equals(values.get("TABLE_NAME"))) {
pks.add(readPrimaryKeyName(metaData, values));
}
}
} finally {
if (pkData != null) {
pkData.close();
}
}
return pks;
}

@Override
protected Collection<ForeignKey> readForeignKeys(Connection connection, DatabaseMetaDataWrapper metaData,
String tableName) throws SQLException {
@SuppressWarnings("unchecked")
Map<String, ForeignKey> fks = new ListOrderedMap();
ResultSet fkData = null;

try {
if (getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) {
// Jaybird has a problem when delimited identifiers are used as
// it is not able to find the foreign key info for the table
// So we have to filter manually below
fkData = metaData.getForeignKeys(getDefaultTablePattern());
while (fkData.next()) {
Map<String,Object> values = readMetaData(fkData, getColumnsForFK());

if (tableName.equals(values.get("FKTABLE_NAME"))) {
readForeignKey(metaData, values, fks);
}
}
} else {
fkData = metaData.getForeignKeys(tableName);
while (fkData.next()) {
Map<String,Object> values = readMetaData(fkData, getColumnsForFK());

if (tableName.equals(values.get("FKTABLE_NAME"))) {
readForeignKey(metaData, values, fks);
}
}
}
} finally {
if (fkData != null) {
fkData.close();
}
}
return fks.values();
}

@Override
protected Collection<IIndex> readIndices(Connection connection, DatabaseMetaDataWrapper metaData,
String tableName) throws SQLException {
Expand Down

0 comments on commit ddfa012

Please sign in to comment.