Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
0000947: Bad alter statement generated on oracle upgrade: ALTER TABLE…
… "SYM_DATA_EVENT" MODIFY ("BATCH_ID" DEFAULT )
  • Loading branch information
chenson42 committed Dec 13, 2012
1 parent 7de29b2 commit 4fa6c05
Showing 1 changed file with 38 additions and 28 deletions.
Expand Up @@ -245,24 +245,25 @@ public void writeExternalIndexDropStmt(Table table, IIndex index, StringBuilder

@Override
protected void printDefaultValue(Object defaultValue, int typeCode, StringBuilder ddl) {
if (defaultValue != null) {
String defaultValueStr = defaultValue.toString();
boolean shouldUseQuotes = !TypeMap.isNumericType(typeCode)
&& !defaultValueStr.startsWith("TO_DATE(")
&& !defaultValueStr.equalsIgnoreCase("SYSDATE")
&& !defaultValueStr.equalsIgnoreCase("SYSTIMESTAMP")
&& !defaultValueStr.equalsIgnoreCase("CURRENT_TIMESTAMP")
&& !defaultValueStr.equalsIgnoreCase("CURRENT_DATE");


if (shouldUseQuotes) {
// characters are only escaped when within a string literal
ddl.append(databaseInfo.getValueQuoteToken());
ddl.append(escapeStringValue(defaultValueStr));
ddl.append(databaseInfo.getValueQuoteToken());
} else {
ddl.append(defaultValueStr);
}
boolean isNull = defaultValue == null;
if (defaultValue == null) {
defaultValue = "NULL";
}
String defaultValueStr = defaultValue.toString();
boolean shouldUseQuotes = !isNull && !TypeMap.isNumericType(typeCode)
&& !defaultValueStr.startsWith("TO_DATE(")
&& !defaultValueStr.equalsIgnoreCase("SYSDATE")
&& !defaultValueStr.equalsIgnoreCase("SYSTIMESTAMP")
&& !defaultValueStr.equalsIgnoreCase("CURRENT_TIMESTAMP")
&& !defaultValueStr.equalsIgnoreCase("CURRENT_DATE");

if (shouldUseQuotes) {
// characters are only escaped when within a string literal
ddl.append(databaseInfo.getValueQuoteToken());
ddl.append(escapeStringValue(defaultValueStr));
ddl.append(databaseInfo.getValueQuoteToken());
} else {
ddl.append(defaultValueStr);
}
}

Expand Down Expand Up @@ -408,16 +409,25 @@ protected void processTableStructureChanges(Database currentModel, Database desi

protected void processChange(Database currentModel, Database desiredModel,
ColumnDefaultValueChange change, StringBuilder ddl) {
writeTableAlterStmt(change.getChangedTable(), ddl);
ddl.append(" MODIFY (");
Column column = change.getChangedColumn();
column.setDefaultValue(change.getNewDefaultValue());
printIdentifier(getColumnName(column), ddl);
ddl.append(" DEFAULT ");
writeColumnDefaultValue(change.getChangedTable(), column, ddl);
ddl.append(" )");
printEndOfStatement(ddl);
}
boolean changeNeeded = true;
String newValue = change.getNewDefaultValue();
String oldValue = change.getChangedColumn().getDefaultValue();
if ((oldValue == null && "NULL".equals(newValue))
|| (newValue == null && "NULL".equals(oldValue))) {
changeNeeded = false;
}
if (changeNeeded) {
writeTableAlterStmt(change.getChangedTable(), ddl);
ddl.append(" MODIFY (");
Column column = change.getChangedColumn();
column.setDefaultValue(change.getNewDefaultValue());
printIdentifier(getColumnName(column), ddl);
ddl.append(" DEFAULT ");
writeColumnDefaultValue(change.getChangedTable(), column, ddl);
ddl.append(" )");
printEndOfStatement(ddl);
}
}

protected boolean processChange(Database currentModel, Database desiredModel,
ColumnAutoIncrementChange change, StringBuilder ddl) {
Expand Down

0 comments on commit 4fa6c05

Please sign in to comment.