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/05/05 00:02:00 UTC
svn commit: r399869 - in /db/ddlutils/trunk/src:
java/org/apache/ddlutils/platform/ java/org/apache/ddlutils/platform/derby/
test/org/apache/ddlutils/io/
Author: tomdz
Date: Thu May 4 15:01:59 2006
New Revision: 399869
URL: http://svn.apache.org/viewcvs?rev=399869&view=rev
Log:
Fixes for the Derby platform
Fixes to the alteration tests
Modified:
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyBuilder.java
db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java
db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAlteration.java
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/SqlBuilder.java?rev=399869&r1=399868&r2=399869&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 Thu May 4 15:01:59 2006
@@ -904,7 +904,7 @@
}
print("INSERT INTO ");
- printlnIdentifier(getTableName(targetTable));
+ printIdentifier(getTableName(targetTable));
print(" (");
for (Iterator columnIt = columns.keySet().iterator(); columnIt.hasNext();)
{
@@ -927,7 +927,7 @@
}
}
print(" FROM ");
- printlnIdentifier(getTableName(sourceTable));
+ printIdentifier(getTableName(sourceTable));
printEndOfStatement();
}
@@ -1998,6 +1998,20 @@
String nativeType = (String)getPlatformInfo().getNativeType(column.getTypeCode());
return nativeType == null ? column.getType() : nativeType;
+ }
+
+ /**
+ * Returns the bare database-native type for the given column without any size specifies.
+ *
+ * @param column The column
+ * @return The native type
+ */
+ protected String getBareNativeType(Column column)
+ {
+ String nativeType = getNativeType(column);
+ int sizePos = nativeType.indexOf(SIZE_PLACEHOLDER);
+
+ return sizePos >= 0 ? nativeType.substring(0, sizePos) : nativeType;
}
/**
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyBuilder.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyBuilder.java?rev=399869&r1=399868&r2=399869&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyBuilder.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyBuilder.java Thu May 4 15:01:59 2006
@@ -21,7 +21,9 @@
import org.apache.ddlutils.Platform;
import org.apache.ddlutils.model.Column;
+import org.apache.ddlutils.model.Index;
import org.apache.ddlutils.model.Table;
+import org.apache.ddlutils.model.TypeMap;
import org.apache.ddlutils.platform.cloudscape.CloudscapeBuilder;
import org.apache.ddlutils.util.Jdbc3Utils;
@@ -65,5 +67,46 @@
protected void writeColumnAutoIncrementStmt(Table table, Column column) throws IOException
{
print("GENERATED BY DEFAULT AS IDENTITY");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void writeExternalIndexDropStmt(Table table, Index index) throws IOException
+ {
+ // Index names in Derby are unique to a schema and hence Derby does not
+ // use the ON <tablename> clause
+ print("DROP INDEX ");
+ printIdentifier(getIndexName(index));
+ printEndOfStatement();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected void writeCastExpression(Column sourceColumn, Column targetColumn) throws IOException
+ {
+ String sourceNativeType = getBareNativeType(sourceColumn);
+ String targetNativeType = getBareNativeType(targetColumn);
+
+ if (sourceNativeType.equals(targetNativeType))
+ {
+ printIdentifier(getColumnName(sourceColumn));
+ }
+ else
+ {
+ // Derby currently has the limitation that it cannot convert numeric values
+ // to VARCHAR, though it can convert them to CHAR
+ if (TypeMap.isNumericType(sourceColumn.getTypeCode()) &&
+ "VARCHAR".equalsIgnoreCase(targetNativeType))
+ {
+ targetNativeType = "CHAR";
+ }
+
+ print(targetNativeType);
+ print("(");
+ printIdentifier(getColumnName(sourceColumn));
+ print(")");
+ }
}
}
Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java?rev=399869&r1=399868&r2=399869&view=diff
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java Thu May 4 15:01:59 2006
@@ -19,6 +19,7 @@
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
+import java.sql.Types;
import java.util.Iterator;
import java.util.Map;
@@ -48,6 +49,8 @@
public DerbyPlatform()
{
super();
+ getPlatformInfo().addNativeTypeMapping(Types.DOUBLE, "DOUBLE");
+ getPlatformInfo().addNativeTypeMapping(Types.FLOAT, "DOUBLE", Types.DOUBLE);
setSqlBuilder(new DerbyBuilder(this));
setModelReader(new DerbyModelReader(this));
}
Modified: db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAlteration.java
URL: http://svn.apache.org/viewcvs/db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAlteration.java?rev=399869&r1=399868&r2=399869&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAlteration.java (original)
+++ db/ddlutils/trunk/src/test/org/apache/ddlutils/io/TestAlteration.java Thu May 4 15:01:59 2006
@@ -260,7 +260,11 @@
insertRow("roundtrip", new Object[] { new Integer(1), new Integer(2) });
+ // since some databases require/automatically make the column required
+ // we use it like this in this test in order to avoid problems when
+ // comparing the model from the live database with our assumed one
model.getTable(0).getColumn(1).setAutoIncrement(true);
+ model.getTable(0).getColumn(1).setRequired(true);
alterDatabase(model);
@@ -969,7 +973,7 @@
newPkColumn.setName("pk");
newPkColumn.setTypeCode(Types.VARCHAR);
- newPkColumn.setSize("20");
+ newPkColumn.setSize("32");
newPkColumn.setPrimaryKey(true);
newPkColumn.setRequired(true);
newTable.setName("roundtrip2");