diff --git a/symmetric-db/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDdlBuilder.java b/symmetric-db/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDdlBuilder.java index 5faee6a9a2..a0bfc84ff6 100644 --- a/symmetric-db/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDdlBuilder.java +++ b/symmetric-db/src/main/java/org/jumpmind/db/platform/firebird/FirebirdDdlBuilder.java @@ -27,6 +27,7 @@ import org.jumpmind.db.alter.AddColumnChange; import org.jumpmind.db.alter.AddPrimaryKeyChange; import org.jumpmind.db.alter.ColumnDataTypeChange; +import org.jumpmind.db.alter.ColumnRequiredChange; import org.jumpmind.db.alter.CopyColumnValueChange; import org.jumpmind.db.alter.RemoveColumnChange; import org.jumpmind.db.alter.TableChange; @@ -292,6 +293,9 @@ protected void processTableStructureChanges(Database currentModel, Database desi CopyColumnValueChange copyColumnChange = (CopyColumnValueChange)change; processChange(currentModel, desiredModel, copyColumnChange, ddl); changeIt.remove(); + } else if (change instanceof ColumnRequiredChange) { + processChange(currentModel, desiredModel, (ColumnRequiredChange) change, ddl); + changeIt.remove(); } } for (Iterator changeIt = changes.iterator(); changeIt.hasNext();) { @@ -338,6 +342,16 @@ protected boolean writeAlterColumnDataType(ColumnDataTypeChange change, StringBu return true; } + + protected void processChange(Database currentModel, Database desiredModel, + ColumnRequiredChange change, StringBuilder ddl) { + boolean required = !change.getChangedColumn().isRequired(); + ddl.append("update RDB$RELATION_FIELDS set RDB$NULL_FLAG = " + (required ? "1" : "0") + + " where (RDB$FIELD_NAME = '" + change.getChangedColumn().getName() + + "') and (RDB$RELATION_NAME = '" + + getFullyQualifiedTableNameShorten(change.getChangedTable()) + "')"); + printEndOfStatement(ddl); + } /* * Processes the addition of a column to a table.