Author: tomdz Date: Sat Mar 1 23:51:25 2008 New Revision: 632720 URL: http://svn.apache.org/viewvc?rev=632720&view=rev Log: Fix for Sql Server for text columns without size specification
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java?rev=632720&r1=632719&r2=632720&view=diff ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java Sat Mar 1 23:51:25 2008 @@ -45,6 +45,7 @@ import org.apache.ddlutils.model.ModelException; import org.apache.ddlutils.model.Table; import org.apache.ddlutils.model.TypeMap; +import org.apache.ddlutils.util.StringUtilsExt; /** * This class is a collection of Strategy methods for creating the DDL required to create and drop @@ -1397,28 +1398,13 @@ sqlType.append(sizePos >= 0 ? nativeType.substring(0, sizePos) : nativeType); - Object sizeSpec = column.getSize(); + String sizeSpec = getSizeSpec(column); - if (sizeSpec == null) + if (!StringUtilsExt.isEmpty(sizeSpec)) { - sizeSpec = getPlatformInfo().getDefaultSize(column.getTypeCode()); - } - if (sizeSpec != null) - { - if (getPlatformInfo().hasSize(column.getTypeCode())) - { - sqlType.append("("); - sqlType.append(sizeSpec.toString()); - sqlType.append(")"); - } - else if (getPlatformInfo().hasPrecisionAndScale(column.getTypeCode())) - { - sqlType.append("("); - sqlType.append(column.getSizeAsInt()); - sqlType.append(","); - sqlType.append(column.getScale()); - sqlType.append(")"); - } + sqlType.append("("); + sqlType.append(sizeSpec); + sqlType.append(")"); } sqlType.append(sizePos >= 0 ? nativeType.substring(sizePos + SIZE_PLACEHOLDER.length()) : ""); @@ -1450,6 +1436,39 @@ int sizePos = nativeType.indexOf(SIZE_PLACEHOLDER); return sizePos >= 0 ? nativeType.substring(0, sizePos) : nativeType; + } + + /** + * Returns the size specification for the given column. If the column is of a type that has size + * or precision and scale, and no size is defined for the column itself, then the default size + * or precision/scale for that type and platform is used instead. + * + * @param column The column + * @return The size spec + */ + protected String getSizeSpec(Column column) + { + StringBuffer result = new StringBuffer(); + Object sizeSpec = column.getSize(); + + if (sizeSpec == null) + { + sizeSpec = getPlatformInfo().getDefaultSize(column.getTypeCode()); + } + if (sizeSpec != null) + { + if (getPlatformInfo().hasSize(column.getTypeCode())) + { + result.append(sizeSpec.toString()); + } + else if (getPlatformInfo().hasPrecisionAndScale(column.getTypeCode())) + { + result.append(column.getSizeAsInt()); + result.append(","); + result.append(column.getScale()); + } + } + return result.toString(); } /** Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/mssql/MSSqlBuilder.java?rev=632720&r1=632719&r2=632720&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 Sat Mar 1 23:51:25 2008 @@ -530,7 +530,7 @@ print(" AS "); print(getNativeType(targetColumn)); print("),1,"); - print(targetColumn.getSize()); + print(getSizeSpec(targetColumn)); print(")"); } else