You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ddlutils-dev@db.apache.org by to...@apache.org on 2007/04/17 08:47:59 UTC

svn commit: r529502 - in /db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase: InterbaseBuilder.java InterbaseModelReader.java

Author: tomdz
Date: Mon Apr 16 23:47:59 2007
New Revision: 529502

URL: http://svn.apache.org/viewvc?view=rev&rev=529502
Log:
Fixed a bug in the foreign key reading in the Interbase platform

Modified:
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseBuilder.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseModelReader.java

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseBuilder.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseBuilder.java?view=diff&rev=529502&r1=529501&r2=529502
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseBuilder.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseBuilder.java Mon Apr 16 23:47:59 2007
@@ -128,7 +128,7 @@
         printEndOfStatement();
 
         print("CREATE TRIGGER ");
-        printIdentifier(getConstraintName("trg", table, column.getName(), null));
+        printIdentifier(getTriggerName(table, column));
         print(" FOR ");
         printlnIdentifier(getTableName(table));
         println("ACTIVE BEFORE INSERT POSITION 0 AS");
@@ -151,12 +151,24 @@
     private void writeAutoIncrementDropStmts(Table table, Column column) throws IOException
     {
         print("DROP TRIGGER ");
-        printIdentifier(getConstraintName("trg", table, column.getName(), null));
+        printIdentifier(getTriggerName(table, column));
         printEndOfStatement();
 
         print("DROP GENERATOR ");
         printIdentifier(getGeneratorName(table, column));
         printEndOfStatement();
+    }
+
+    /**
+     * Determines the name of the trigger for an auto-increment column.
+     * 
+     * @param table  The table
+     * @param column The auto-increment column
+     * @return The trigger name
+     */
+    protected String getTriggerName(Table table, Column column)
+    {
+        return getConstraintName("trg", table, column.getName(), null);
     }
 
     /**

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseModelReader.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseModelReader.java?view=diff&rev=529502&r1=529501&r2=529502
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseModelReader.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/interbase/InterbaseModelReader.java Mon Apr 16 23:47:59 2007
@@ -31,6 +31,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.collections.map.ListOrderedMap;
 import org.apache.ddlutils.Platform;
 import org.apache.ddlutils.model.Column;
 import org.apache.ddlutils.model.ForeignKey;
@@ -320,6 +321,53 @@
             }
         }
         return pks;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected Collection readForeignKeys(DatabaseMetaDataWrapper metaData, String tableName) throws SQLException
+    {
+        Map       fks    = new ListOrderedMap();
+        ResultSet fkData = null;
+
+        try
+        {
+            if (getPlatform().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 values = readColumns(fkData, getColumnsForFK());
+    
+                    if (tableName.equals(values.get("FKTABLE_NAME")))
+                    {
+                        readForeignKey(metaData, values, fks);
+                    }
+                }
+            }
+            else
+            {
+                fkData = metaData.getForeignKeys(tableName);
+                while (fkData.next())
+                {
+                    Map values = readColumns(fkData, getColumnsForFK());
+    
+                    readForeignKey(metaData, values, fks);
+                }
+            }
+        }
+        finally
+        {
+            if (fkData != null)
+            {
+                fkData.close();
+            }
+        }
+        return fks.values();
     }
 
     /**