Author: tomdz Date: Tue Jul 11 23:32:01 2006 New Revision: 421164 URL: http://svn.apache.org/viewvc?rev=421164&view=rev Log: Minor enhancement to the Firebird platform
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/firebird/FirebirdModelReader.java Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/firebird/FirebirdModelReader.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/firebird/FirebirdModelReader.java?rev=421164&r1=421163&r2=421164&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/firebird/FirebirdModelReader.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/firebird/FirebirdModelReader.java Tue Jul 11 23:32:01 2006 @@ -332,24 +332,68 @@ } /** - * [EMAIL PROTECTED] - */ - protected boolean isInternalPrimaryKeyIndex(DatabaseMetaDataWrapper metaData, Table table, Index index) - { - // In Firebird, primary keys can only be determined from a live database by looking for - // unique indexes that cover the primary key columns - // These checks however already have been done when DdlUtils enters this method - return true; - } - - /** - * [EMAIL PROTECTED] - */ - protected boolean isInternalForeignKeyIndex(DatabaseMetaDataWrapper metaData, Table table, ForeignKey fk, Index index) - { - // Firebird generates a normal index that has the same name as the fk - return fk.getName().equals(index.getName()); - } + * [EMAIL PROTECTED] + */ + 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(); + } + } + } + + /** + * [EMAIL PROTECTED] + */ + 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(); + } + } + } }