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();
+            }
+        }
+    }
 }


Reply via email to