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/02/08 00:47:10 UTC

svn commit: r375780 - in /db/ddlutils/trunk/src/java/org/apache/ddlutils: PlatformUtils.java platform/mssql/MSSqlBuilder.java platform/mssql/MSSqlPlatform.java

Author: tomdz
Date: Tue Feb  7 15:47:10 2006
New Revision: 375780

URL: http://svn.apache.org/viewcvs?rev=375780&view=rev
Log:
Fixed/enhanced support for Sql Server
Added support for the new Sql Server 2005 jdbc driver

Modified:
    db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformUtils.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformUtils.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformUtils.java?rev=375780&r1=375779&r2=375780&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformUtils.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/PlatformUtils.java Tue Feb  7 15:47:10 2006
@@ -150,6 +150,8 @@
         jdbcSubProtocolToPlatform.put(SapDbPlatform.JDBC_SUBPROTOCOL,                           MaxDbPlatform.DATABASENAME);
         jdbcSubProtocolToPlatform.put(MckoiPlatform.JDBC_SUBPROTOCOL,                           MckoiPlatform.DATABASENAME);
         jdbcSubProtocolToPlatform.put(MSSqlPlatform.JDBC_SUBPROTOCOL,                           MSSqlPlatform.DATABASENAME);
+        jdbcSubProtocolToPlatform.put(MSSqlPlatform.JDBC_SUBPROTOCOL_NEW,                       MSSqlPlatform.DATABASENAME);
+        jdbcSubProtocolToPlatform.put(MSSqlPlatform.JDBC_SUBPROTOCOL_INTERNAL,                  MSSqlPlatform.DATABASENAME);
         jdbcSubProtocolToPlatform.put(PlatformUtils.JDBC_SUBPROTOCOL_DATADIRECT_SQLSERVER,      MSSqlPlatform.DATABASENAME);
         jdbcSubProtocolToPlatform.put(PlatformUtils.JDBC_SUBPROTOCOL_INET_SQLSERVER,            MSSqlPlatform.DATABASENAME);
         jdbcSubProtocolToPlatform.put(PlatformUtils.JDBC_SUBPROTOCOL_INET_SQLSERVER6,           MSSqlPlatform.DATABASENAME);
@@ -193,6 +195,7 @@
         jdbcDriverToPlatform.put(SapDbPlatform.JDBC_DRIVER,                       MaxDbPlatform.DATABASENAME);
         jdbcDriverToPlatform.put(MckoiPlatform.JDBC_DRIVER,                       MckoiPlatform.DATABASENAME);
         jdbcDriverToPlatform.put(MSSqlPlatform.JDBC_DRIVER,                       MSSqlPlatform.DATABASENAME);
+        jdbcDriverToPlatform.put(MSSqlPlatform.JDBC_DRIVER_NEW,                   MSSqlPlatform.DATABASENAME);
         jdbcDriverToPlatform.put(PlatformUtils.JDBC_DRIVER_DATADIRECT_SQLSERVER,  MSSqlPlatform.DATABASENAME);
         jdbcDriverToPlatform.put(PlatformUtils.JDBC_DRIVER_INET_SQLSERVER,        MSSqlPlatform.DATABASENAME);
         jdbcDriverToPlatform.put(PlatformUtils.JDBC_DRIVER_JSQLCONNECT_SQLSERVER, MSSqlPlatform.DATABASENAME);

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java?rev=375780&r1=375779&r2=375780&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java Tue Feb  7 15:47:10 2006
@@ -17,6 +17,9 @@
  */
 
 import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.sql.Types;
 import java.util.Map;
 
 import org.apache.ddlutils.PlatformInfo;
@@ -26,6 +29,7 @@
 import org.apache.ddlutils.model.Index;
 import org.apache.ddlutils.model.Table;
 import org.apache.ddlutils.platform.SqlBuilder;
+import org.apache.ddlutils.util.Jdbc3Utils;
 
 /**
  * The SQL Builder for the Microsoft SQL Server.
@@ -60,8 +64,24 @@
      */
     protected void alterTable(Database currentModel, Table currentTable, Database desiredModel, Table desiredTable, boolean doDrops, boolean modifyColumns) throws IOException
     {
-        writeQuotationOnStatement();
+    	// we only want to generate the quotation start statement if there is something to write
+    	// thus we write the alteration commands into a temporary writer
+    	// and only if something was written, write the quotation start statement and the
+    	// alteration commands to the original writer
+    	Writer       originalWriter = getWriter();
+    	StringWriter tempWriter     = new StringWriter();
+
+    	setWriter(tempWriter);
         super.alterTable(currentModel, currentTable, desiredModel, desiredTable, doDrops, modifyColumns);
+        setWriter(originalWriter);
+
+        String alterationCommands = tempWriter.toString();
+
+        if (alterationCommands.trim().length() > 0)
+        {
+        	writeQuotationOnStatement();
+        	getWriter().write(alterationCommands);
+        }
     }
 
     /**
@@ -110,6 +130,23 @@
     {
         writeQuotationOnStatement();
         super.dropExternalForeignKeys(table);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected String getNativeDefaultValue(Column column)
+    {
+    	// Sql Server wants BIT default values as 0 or 1
+        if ((column.getTypeCode() == Types.BIT) ||
+            (Jdbc3Utils.supportsJava14JdbcTypes() && (column.getTypeCode() == Jdbc3Utils.determineBooleanTypeCode())))
+        {
+            return getDefaultValueHelper().convert(column.getDefaultValue(), column.getTypeCode(), Types.SMALLINT).toString();
+        }
+        else
+        {
+            return super.getNativeDefaultValue(column);
+        }
     }
 
     /**

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java?rev=375780&r1=375779&r2=375780&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java Tue Feb  7 15:47:10 2006
@@ -30,11 +30,17 @@
 public class MSSqlPlatform extends PlatformImplBase
 {
     /** Database name of this platform. */
-    public static final String DATABASENAME     = "MsSql";
+    public static final String DATABASENAME         = "MsSql";
     /** The standard SQLServer jdbc driver. */
-    public static final String JDBC_DRIVER      = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
-    /** The subprotocol used by the standard SQLServer driver. */
-    public static final String JDBC_SUBPROTOCOL = "microsoft:sqlserver";
+    public static final String JDBC_DRIVER          = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
+    /** The new SQLServer 2005 jdbc driver which can also be used for SQL Server 2000. */
+    public static final String JDBC_DRIVER_NEW      = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
+    /** The subprotocol used by the standard SQL Server driver. */
+    public static final String JDBC_SUBPROTOCOL     = "microsoft:sqlserver";
+    /** The subprotocol recommended for the newer SQL Server 2005 driver. */
+    public static final String JDBC_SUBPROTOCOL_NEW = "sqlserver";
+    /** The subprotocol internally returned by the newer SQL Server 2005 driver. */
+    public static final String JDBC_SUBPROTOCOL_INTERNAL = "sqljdbc";
 
     /**
      * Creates a new platform instance.
@@ -51,27 +57,29 @@
         //info.setCommentPrefix("#");
 
         info.addNativeTypeMapping(Types.ARRAY,         "IMAGE");
+        // BIGINT will be mapped back to BIGINT by the model reader 
         info.addNativeTypeMapping(Types.BIGINT,        "DECIMAL(19,0)");
-        info.addNativeTypeMapping(Types.BLOB,          "IMAGE");
-        info.addNativeTypeMapping(Types.CLOB,          "TEXT");
-        info.addNativeTypeMapping(Types.DATE,          "DATETIME");
+        info.addNativeTypeMapping(Types.BLOB,          "IMAGE",         Types.LONGVARBINARY);
+        info.addNativeTypeMapping(Types.CLOB,          "TEXT",          Types.LONGVARCHAR);
+        info.addNativeTypeMapping(Types.DATE,          "DATETIME",      Types.TIMESTAMP);
         info.addNativeTypeMapping(Types.DISTINCT,      "IMAGE");
-        info.addNativeTypeMapping(Types.DOUBLE,        "FLOAT");
+        info.addNativeTypeMapping(Types.DOUBLE,        "FLOAT",         Types.FLOAT);
         info.addNativeTypeMapping(Types.INTEGER,       "INT");
-        info.addNativeTypeMapping(Types.JAVA_OBJECT,   "IMAGE");
+        info.addNativeTypeMapping(Types.JAVA_OBJECT,   "IMAGE",         Types.LONGVARBINARY);
         info.addNativeTypeMapping(Types.LONGVARBINARY, "IMAGE");
         info.addNativeTypeMapping(Types.LONGVARCHAR,   "TEXT");
-        info.addNativeTypeMapping(Types.NULL,          "IMAGE");
-        info.addNativeTypeMapping(Types.OTHER,         "IMAGE");
-        info.addNativeTypeMapping(Types.REF,           "IMAGE");
-        info.addNativeTypeMapping(Types.STRUCT,        "IMAGE");
-        info.addNativeTypeMapping(Types.TIME,          "DATETIME");
+        info.addNativeTypeMapping(Types.NULL,          "IMAGE",         Types.LONGVARBINARY);
+        info.addNativeTypeMapping(Types.OTHER,         "IMAGE",         Types.LONGVARBINARY);
+        info.addNativeTypeMapping(Types.REF,           "IMAGE",         Types.LONGVARBINARY);
+        info.addNativeTypeMapping(Types.STRUCT,        "IMAGE",         Types.LONGVARBINARY);
+        info.addNativeTypeMapping(Types.TIME,          "DATETIME",      Types.TIMESTAMP);
         info.addNativeTypeMapping(Types.TIMESTAMP,     "DATETIME");
-        info.addNativeTypeMapping(Types.TINYINT,       "SMALLINT");
-        info.addNativeTypeMapping("BOOLEAN",  "BIT");
-        info.addNativeTypeMapping("DATALINK", "IMAGE");
+        info.addNativeTypeMapping(Types.TINYINT,       "SMALLINT",      Types.SMALLINT);
+        info.addNativeTypeMapping("BOOLEAN",  "BIT",   "BIT");
+        info.addNativeTypeMapping("DATALINK", "IMAGE", "LONGVARBINARY");
 
         setSqlBuilder(new MSSqlBuilder(info));
+        setModelReader(new MSSqlModelReader(info));
     }
 
     /**