Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support adding computed=true columns with no type set #2340

Merged
merged 5 commits into from Feb 14, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -155,6 +155,7 @@ public SqlStatement[] generateStatements(Database database) {
column.getRemarks(),
constraints.toArray(new ColumnConstraint[constraints.size()]));
addColumnStatement.setDefaultValueConstraintName(column.getDefaultValueConstraintName());
addColumnStatement.setComputed(column.getComputed());

if ((database instanceof MySQLDatabase) && (column.getAfterColumn() != null)) {
addColumnStatement.setAddAfterColumn(column.getAfterColumn());
Expand Down
Expand Up @@ -25,6 +25,7 @@
import liquibase.structure.core.Column;
import liquibase.structure.core.Schema;
import liquibase.structure.core.Table;
import liquibase.util.ObjectUtil;
import liquibase.util.StringUtil;

import java.util.ArrayList;
Expand Down Expand Up @@ -60,7 +61,9 @@ private ValidationErrors validateSingleColumn(AddColumnStatement statement, Data
ValidationErrors validationErrors = new ValidationErrors();

validationErrors.checkRequiredField("columnName", statement.getColumnName());
validationErrors.checkRequiredField("columnType", statement.getColumnType());
if (!ObjectUtil.defaultIfNull(statement.getComputed(), false)) {
validationErrors.checkRequiredField("columnType", statement.getColumnType());
}
validationErrors.checkRequiredField("tableName", statement.getTableName());

if (statement.isPrimaryKey() && ((database instanceof H2Database) || (database instanceof AbstractDb2Database) ||
Expand Down Expand Up @@ -139,9 +142,17 @@ protected String generateSingleColumBaseSQL(AddColumnStatement statement, Databa
}

protected String generateSingleColumnSQL(AddColumnStatement statement, Database database) {
DatabaseDataType columnType = DataTypeFactory.getInstance().fromDescription(statement.getColumnType() + (statement.isAutoIncrement() ? "{autoIncrement:true}" : ""), database).toDatabaseDataType(database);
DatabaseDataType columnType = null;

if (statement.getColumnType() != null) {
columnType = DataTypeFactory.getInstance().fromDescription(statement.getColumnType() + (statement.isAutoIncrement() ? "{autoIncrement:true}" : ""), database).toDatabaseDataType(database);
}

String alterTable = " ADD " + database.escapeColumnName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName(), statement.getColumnName()) + " " + columnType;
String alterTable = " ADD " + database.escapeColumnName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName(), statement.getColumnName());

if (columnType != null) {
alterTable += " " + columnType;
}

if (statement.isAutoIncrement() && database.supportsAutoIncrement()) {
AutoIncrementConstraint autoIncrementConstraint = statement.getAutoIncrementConstraint();
Expand All @@ -166,8 +177,7 @@ protected String generateSingleColumnSQL(AddColumnStatement statement, Database
}
} else {
if ((database instanceof SybaseDatabase) || (database instanceof SybaseASADatabase) || (database
instanceof MySQLDatabase) || ((database instanceof MSSQLDatabase) && "timestamp".equalsIgnoreCase
(columnType.toString()))) {
instanceof MySQLDatabase) || ((database instanceof MSSQLDatabase) && columnType != null && "timestamp".equalsIgnoreCase (columnType.toString()))) {
alterTable += " NULL";
}
}
Expand Down
Expand Up @@ -17,6 +17,7 @@ public class AddColumnStatement extends AbstractSqlStatement {
private String addAfterColumn;
private String addBeforeColumn;
private Integer addAtPosition;
private Boolean computed;
private Set<ColumnConstraint> constraints = new HashSet<>();

private List<AddColumnStatement> columns = new ArrayList<>();
Expand Down Expand Up @@ -215,4 +216,12 @@ public String getDefaultValueConstraintName() {
public void setDefaultValueConstraintName(String defaultValueConstraintName) {
this.defaultValueConstraintName = defaultValueConstraintName;
}

public Boolean getComputed() {
return computed;
}

public void setComputed(Boolean computed) {
this.computed = computed;
}
}