Author: tomdz
Date: Wed Nov  5 15:41:59 2008
New Revision: 711742

URL: http://svn.apache.org/viewvc?rev=711742&view=rev
Log:
Fixed some Sql Server platform bugs

Modified:
    
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java
    db/ddlutils/trunk/src/test/java/org/apache/ddlutils/io/TestMisc.java

Modified: 
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java?rev=711742&r1=711741&r2=711742&view=diff
==============================================================================
--- 
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java
 (original)
+++ 
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java
 Wed Nov  5 15:41:59 2008
@@ -351,9 +351,16 @@
     {
         // Sql Server per default does not allow us to insert values 
explicitly into
         // identity columns. However, we can change this behavior
-        boolean hasIdentityColumns = 
targetTable.getAutoIncrementColumns().length > 0;
+        // We need to this only if
+        // - there is a column in both tables that is auto increment only in 
the target table, or
+        // - there is a column in both tables that is auto increment in both 
tables
+        Column[] targetIdentityColumns = targetTable.getAutoIncrementColumns();
+
+        // Sql Server allows only one identity column, so let's take a 
shortcut here
+        boolean needToAllowIdentityInsert = (targetIdentityColumns.length > 0) 
&&
+                                            
(sourceTable.findColumn(targetIdentityColumns[0].getName(), 
getPlatform().isDelimitedIdentifierModeOn()) != null);
 
-        if (hasIdentityColumns)
+        if (needToAllowIdentityInsert)
         {
             print("SET IDENTITY_INSERT ");
             printIdentifier(getTableName(targetTable));
@@ -362,7 +369,7 @@
         }
         super.copyData(sourceTable, targetTable);
         // We have to turn it off ASAP because it can be on only for one table 
per session
-        if (hasIdentityColumns)
+        if (needToAllowIdentityInsert)
         {
             print("SET IDENTITY_INSERT ");
             printIdentifier(getTableName(targetTable));

Modified: db/ddlutils/trunk/src/test/java/org/apache/ddlutils/io/TestMisc.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/java/org/apache/ddlutils/io/TestMisc.java?rev=711742&r1=711741&r2=711742&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/java/org/apache/ddlutils/io/TestMisc.java 
(original)
+++ db/ddlutils/trunk/src/test/java/org/apache/ddlutils/io/TestMisc.java Wed 
Nov  5 15:41:59 2008
@@ -37,6 +37,7 @@
 import org.apache.ddlutils.model.Table;
 import org.apache.ddlutils.platform.derby.DerbyPlatform;
 import org.apache.ddlutils.platform.hsqldb.HsqlDbPlatform;
+import org.apache.ddlutils.platform.mssql.MSSqlPlatform;
 import org.apache.ddlutils.platform.mysql.MySql50Platform;
 import org.apache.ddlutils.platform.mysql.MySqlPlatform;
 import org.apache.ddlutils.platform.postgresql.PostgreSqlPlatform;
@@ -1268,7 +1269,8 @@
         if (MySqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
             MySql50Platform.DATABASENAME.equals(getPlatform().getName()) ||
             PostgreSqlPlatform.DATABASENAME.equals(getPlatform().getName()) ||
-            DerbyPlatform.DATABASENAME.equals(getPlatform().getName()))
+            DerbyPlatform.DATABASENAME.equals(getPlatform().getName()) ||
+            MSSqlPlatform.DATABASENAME.equals(getPlatform().getName()))
         {
             query.append(" AS ");
             if (getPlatform().isDelimitedIdentifierModeOn())


Reply via email to