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())