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 2006/04/09 22:34:59 UTC

svn commit: r392833 - /db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlModelReader.java

Author: tomdz
Date: Sun Apr  9 13:34:58 2006
New Revision: 392833

URL: http://svn.apache.org/viewcvs?rev=392833&view=rev
Log:
Enhanced unique index filtering for sql server so that auto-generated indices created for named primary keys are filtered

Modified:
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlModelReader.java

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlModelReader.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlModelReader.java?rev=392833&r1=392832&r2=392833&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlModelReader.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlModelReader.java Sun Apr  9 13:34:58 2006
@@ -17,10 +17,12 @@
  */
 
 import java.sql.Date;
+import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Time;
 import java.sql.Timestamp;
 import java.sql.Types;
+import java.util.Iterator;
 import java.util.Map;
 
 import org.apache.ddlutils.DdlUtilsException;
@@ -87,6 +89,22 @@
         {
             // Sql Server does not return the auto-increment status via the database metadata
             determineAutoIncrementFromResultSetMetaData(table, table.getColumns());
+
+            // TODO: Replace this manual filtering using named pks once they are available
+            //       This is then probably of interest to every platform
+            for (int idx = 0; idx < table.getIndexCount();)
+            {
+                Index index = table.getIndex(idx);
+
+                if (index.isUnique() && existsPKWithName(metaData, table, index.getName()))
+                {
+                    table.removeIndex(idx);
+                }
+                else
+                {
+                    idx++;
+                }
+            }
         }
         return table;
 	}
@@ -106,6 +124,37 @@
 		return index.getName().toUpperCase().startsWith(pkIndexName.toString().toUpperCase());
 	}
 
+    /**
+     * Determines whether there is a pk for the table with the given name.
+     * 
+     * @param metaData The database metadata
+     * @param table    The table
+     * @param name     The pk name
+     * @return <code>true</code> if there is such a pk
+     */
+    private boolean existsPKWithName(DatabaseMetaDataWrapper metaData, Table table, String name)
+    {
+        try
+        {
+            ResultSet pks   = metaData.getPrimaryKeys(table.getName());
+            boolean   found = false;
+    
+            while (pks.next() && !found)
+            {
+                if (name.equals(pks.getString("PK_NAME")))
+                {
+                    found = true;
+                }
+            }
+            pks.close();
+            return found;
+        }
+        catch (SQLException ex)
+        {
+            throw new DdlUtilsException(ex);
+        }
+    }
+    
     /**
      * {@inheritDoc}
      */