It appeared that I goofed up. Missed one condition. Here's the improved patch.
Thanks,
Wilfred
Wilfred Springer | Software Architect | TomTom | [EMAIL PROTECTED] |
Index: src/java/org/apache/ddlutils/platform/hsqldb/HsqlDbBuilder.java =================================================================== --- src/java/org/apache/ddlutils/platform/hsqldb/HsqlDbBuilder.java (revision 387801) +++ src/java/org/apache/ddlutils/platform/hsqldb/HsqlDbBuilder.java (working copy) @@ -21,6 +21,10 @@ import org.apache.ddlutils.Platform; import org.apache.ddlutils.model.Table; import org.apache.ddlutils.platform.SqlBuilder; +import org.apache.ddlutils.DynaSqlException; +import org.apache.ddlutils.model.Index; +import org.apache.ddlutils.model.IndexColumn; +import org.apache.ddlutils.model.Column; /** * The SQL Builder for the HsqlDb database. @@ -60,4 +64,41 @@ { return "CALL IDENTITY()"; } + + /** + * [EMAIL PROTECTED] + * + * In case of a unique index, this implementation will generate an + * ALTER TABLE ADD CONSTRAINT statement instead, in line with <a + * href="http://www.hsqldb.org/doc/guide/ch09.html#create_index-section">the + * HSQLDB documentation</a>. + * + * @see http://www.hsqldb.org/doc/guide/ch09.html#create_index-section + */ + protected void writeExternalIndexCreateStmt(Table table, Index index) throws IOException { + if (index.isUnique()) { + print("ALTER TABLE "); + printIdentifier(getTableName(table)); + print(" ADD CONSTRAINT "); + printIdentifier(getIndexName(index)); + print(" UNIQUE ("); + for (int idx = 0; idx < index.getColumnCount(); idx++) { + IndexColumn idxColumn = index.getColumn(idx); + Column col = table.findColumn(idxColumn.getName()); + if (col == null) { + //would get null pointer on next line anyway, so throw exception + throw new DynaSqlException("Invalid column '" + idxColumn.getName() + "' on index " + index.getName() + " for table " + table.getName()); + } + if (idx > 0) { + print(", "); + } + printIdentifier(getColumnName(col)); + } + print(")"); + printEndOfStatement(); + } else { + super.writeExternalIndexCreateStmt(table, index); + } + } + }