Author: tomdz
Date: Sat Dec 26 06:28:54 2009
New Revision: 893941
URL: http://svn.apache.org/viewvc?rev=893941&view=rev
Log:
SapDB/MaxDB fixes
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/SqlBuilder.java
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/maxdb/MaxDbBuilder.java
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/sapdb/SapDbBuilder.java
db/ddlutils/trunk/src/test/java/org/apache/ddlutils/platform/TestSapDbPlatform.java
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/SqlBuilder.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/SqlBuilder.java?rev=893941&r1=893940&r2=893941&view=diff
==============================================================================
---
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/SqlBuilder.java
(original)
+++
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/SqlBuilder.java
Sat Dec 26 06:28:54 2009
@@ -448,8 +448,8 @@
/**
* Writes a statement that copies the data from the source to the target
table. Note
* that this copies only those columns that are in both tables.
- * Database-specific implementations might redefine this method though
they usually
- * it suffices to redefine the {...@link #writeCastExpression(Column,
Column)} method.
+ * Database-specific implementations might redefine this method though it
usually
+ * suffices to redefine the {...@link #writeCastExpression(Column,
Column)} method.
*
* @param sourceTable The source table
* @param targetTable The target table
@@ -1956,7 +1956,7 @@
* @param table The table
* @param foreignKey The foreignkey
*/
- private void writeForeignKeyOnDeleteAction(Table table, ForeignKey
foreignKey) throws IOException
+ protected void writeForeignKeyOnDeleteAction(Table table, ForeignKey
foreignKey) throws IOException
{
CascadeActionEnum action = foreignKey.getOnDelete();
@@ -2006,7 +2006,7 @@
* @param table The table
* @param foreignKey The foreignkey
*/
- private void writeForeignKeyOnUpdateAction(Table table, ForeignKey
foreignKey) throws IOException
+ protected void writeForeignKeyOnUpdateAction(Table table, ForeignKey
foreignKey) throws IOException
{
CascadeActionEnum action = foreignKey.getOnUpdate();
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/maxdb/MaxDbBuilder.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/maxdb/MaxDbBuilder.java?rev=893941&r1=893940&r2=893941&view=diff
==============================================================================
---
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/maxdb/MaxDbBuilder.java
(original)
+++
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/maxdb/MaxDbBuilder.java
Sat Dec 26 06:28:54 2009
@@ -23,7 +23,6 @@
import org.apache.ddlutils.Platform;
import org.apache.ddlutils.model.Column;
-import org.apache.ddlutils.model.Database;
import org.apache.ddlutils.model.ForeignKey;
import org.apache.ddlutils.model.Table;
import org.apache.ddlutils.platform.sapdb.SapDbBuilder;
@@ -66,32 +65,6 @@
/**
* {...@inheritdoc}
*/
- public void createForeignKey(Database database, Table table, ForeignKey
foreignKey) throws IOException
- {
- if (foreignKey.getForeignTableName() == null)
- {
- _log.warn("Foreign key table is null for key " + foreignKey);
- }
- else
- {
- writeTableAlterStmt(table);
-
- print("ADD CONSTRAINT ");
- printIdentifier(getForeignKeyName(table, foreignKey));
- print(" FOREIGN KEY (");
- writeLocalReferences(foreignKey);
- print(") REFERENCES ");
-
printIdentifier(getTableName(database.findTable(foreignKey.getForeignTableName())));
- print(" (");
- writeForeignReferences(foreignKey);
- print(")");
- printEndOfStatement();
- }
- }
-
- /**
- * {...@inheritdoc}
- */
public void dropForeignKey(Table table, ForeignKey foreignKey) throws
IOException
{
writeTableAlterStmt(table);
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/sapdb/SapDbBuilder.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/sapdb/SapDbBuilder.java?rev=893941&r1=893940&r2=893941&view=diff
==============================================================================
---
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/sapdb/SapDbBuilder.java
(original)
+++
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/sapdb/SapDbBuilder.java
Sat Dec 26 06:28:54 2009
@@ -22,11 +22,15 @@
import java.io.IOException;
import org.apache.ddlutils.Platform;
+import org.apache.ddlutils.alteration.ColumnDefinitionChange;
+import org.apache.ddlutils.model.CascadeActionEnum;
import org.apache.ddlutils.model.Column;
import org.apache.ddlutils.model.Database;
import org.apache.ddlutils.model.ForeignKey;
import org.apache.ddlutils.model.Table;
+import org.apache.ddlutils.model.TypeMap;
import org.apache.ddlutils.platform.SqlBuilder;
+import org.apache.ddlutils.util.StringUtilsExt;
/**
* The SQL Builder for SapDB.
@@ -85,26 +89,10 @@
/**
* {...@inheritdoc}
*/
- public void createForeignKey(Database database, Table table, ForeignKey
foreignKey) throws IOException
+ protected void writeForeignKeyOnDeleteAction(Table table, ForeignKey
foreignKey) throws IOException
{
- if (foreignKey.getForeignTableName() == null)
- {
- _log.warn("Foreign key table is null for key " + foreignKey);
- }
- else
- {
- writeTableAlterStmt(table);
-
- print(" ADD FOREIGN KEY ");
- printIdentifier(getForeignKeyName(table, foreignKey));
- print(" (");
- writeLocalReferences(foreignKey);
- print(") REFERENCES ");
-
printIdentifier(getTableName(database.findTable(foreignKey.getForeignTableName())));
- print(" (");
- writeForeignReferences(foreignKey);
- print(")");
- printEndOfStatement();
+ if (foreignKey.getOnDelete() != CascadeActionEnum.NONE) {
+ super.writeForeignKeyOnDeleteAction(table, foreignKey);
}
}
@@ -236,4 +224,27 @@
}
printEndOfStatement();
}
+
+ /**
+ * {...@inheritdoc}
+ */
+ protected void writeCastExpression(Column sourceColumn, Column
targetColumn) throws IOException
+ {
+ boolean charSizeChanged =
TypeMap.isTextType(targetColumn.getTypeCode()) &&
+
TypeMap.isTextType(targetColumn.getTypeCode()) &&
+
ColumnDefinitionChange.isSizeChanged(getPlatformInfo(), sourceColumn,
targetColumn) &&
+
!StringUtilsExt.isEmpty(targetColumn.getSize());
+
+ if (charSizeChanged)
+ {
+ print("SUBSTR(");
+ }
+ printIdentifier(getColumnName(sourceColumn));
+ if (charSizeChanged)
+ {
+ print(",1,");
+ print(targetColumn.getSize());
+ print(")");
+ }
+ }
}
Modified:
db/ddlutils/trunk/src/test/java/org/apache/ddlutils/platform/TestSapDbPlatform.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/java/org/apache/ddlutils/platform/TestSapDbPlatform.java?rev=893941&r1=893940&r2=893941&view=diff
==============================================================================
---
db/ddlutils/trunk/src/test/java/org/apache/ddlutils/platform/TestSapDbPlatform.java
(original)
+++
db/ddlutils/trunk/src/test/java/org/apache/ddlutils/platform/TestSapDbPlatform.java
Sat Dec 26 06:28:54 2009
@@ -136,8 +136,8 @@
" \"COL_FK\" INTEGER NOT NULL,\n"+
" PRIMARY KEY (\"COL_PK\")\n"+
");\n"+
- "ALTER TABLE \"table2\" ADD FOREIGN KEY
\"table2_FK_COL_FK_COL_FK_2_table1\" (\"COL_FK_1\", \"COL_FK_2\") REFERENCES
\"table1\" (\"COL_PK_2\", \"COL_PK_1\");\n"+
- "ALTER TABLE \"table3\" ADD FOREIGN KEY \"testfk\" (\"COL_FK\")
REFERENCES \"table2\" (\"COL_PK\");\n",
+ "ALTER TABLE \"table2\" ADD CONSTRAINT
\"table2_FK_COL_FK_COL_FK_2_table1\" FOREIGN KEY(\"COL_FK_1\", \"COL_FK_2\")
REFERENCES \"table1\" (\"COL_PK_2\", \"COL_PK_1\");\n"+
+ "ALTER TABLE \"table3\" ADD CONSTRAINT \"testfk\" FOREIGN
KEY(\"COL_FK\") REFERENCES \"table2\" (\"COL_PK\");\n",
getTableConstraintTestDatabaseCreationSql());
}