![JAR search and dependency download from the Maven repository](/logo.png)
liquibase.sqlgenerator.ext.AddColumnGeneratorHanaDB Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of liquibase-hana Show documentation
Show all versions of liquibase-hana Show documentation
Liquibase support for SAP Hana DB
The newest version!
package liquibase.sqlgenerator.ext;
import liquibase.database.Database;
import liquibase.database.ext.HanaDBDatabase;
import liquibase.datatype.DataTypeFactory;
import liquibase.metadata.ForeignKeyConstraintMetaData;
import liquibase.sql.Sql;
import liquibase.sql.UnparsedSql;
import liquibase.sqlgenerator.SqlGeneratorChain;
import liquibase.sqlgenerator.core.AddColumnGenerator;
import liquibase.statement.AutoIncrementConstraint;
import liquibase.statement.core.AddColumnStatement;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class AddColumnGeneratorHanaDB extends AddColumnGenerator {
@Override
public int getPriority() {
return PRIORITY_DATABASE;
}
@Override
public boolean supports(AddColumnStatement statement, Database database) {
return database instanceof HanaDBDatabase;
}
@Override
public Sql[] generateSql(AddColumnStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) {
if (!supports(statement, database)) {
return sqlGeneratorChain.generateSql(statement, database);
}
String catalogName = statement.getCatalogName();
String schemaName = statement.getSchemaName();
if (schemaName == null) {
schemaName = database.getDefaultSchemaName();
}
String tableName = statement.getTableName();
String columnName = statement.getColumnName();
String columnType = statement.getColumnType();
String alterTable = "ALTER TABLE " + database.escapeTableName(catalogName, schemaName, tableName) +
" ADD (" + database.escapeColumnName(catalogName, schemaName, tableName, columnName) +
" " + DataTypeFactory.getInstance().fromDescription(columnType +
(statement.isAutoIncrement() ? "{autoIncrement:true}" : ""), database).toDatabaseDataType(database);
if (statement.isAutoIncrement() && database.supportsAutoIncrement()) {
AutoIncrementConstraint autoIncrementConstraint = statement.getAutoIncrementConstraint();
alterTable += " " + database.getAutoIncrementClause(autoIncrementConstraint.getStartWith(), autoIncrementConstraint.getIncrementBy());
}
if (!statement.isNullable()) {
alterTable += " NOT NULL";
}
if (statement.isPrimaryKey()) {
alterTable += " PRIMARY KEY";
}
// "ALTER TABLE ADD COLUMN ..." does not support unique constraints in Hana
// if (statement.isUnique()) {
// alterTable += " UNIQUE ";
// }
alterTable += getDefaultClause(statement, database);
if ( database instanceof HanaDBDatabase ) {
alterTable += ")";
}
List returnSql = new ArrayList();
// drop both incoming and outgoing foreign key constraints before adding column
Set constraints = SqlGeneratorHelperHanaDB.getAllForeignKeyConstraints(database, schemaName, tableName);
SqlGeneratorHelperHanaDB.addDropForeignKeyConstraintsStatements(returnSql, database, constraints);
returnSql.add(new UnparsedSql(alterTable, getAffectedColumn(statement)));
// recreate foreign key constraints
SqlGeneratorHelperHanaDB.addCreateForeignKeyConstraintsStatements(returnSql, database, constraints);
addForeignKeyStatements(statement, database, returnSql);
return returnSql.toArray(new Sql[returnSql.size()]);
}
private String getDefaultClause(AddColumnStatement statement, Database database) {
String clause = "";
Object defaultValue = statement.getDefaultValue();
if (defaultValue != null) {
clause += " DEFAULT " + DataTypeFactory.getInstance().fromObject(defaultValue, database).objectToSql(defaultValue, database);
}
return clause;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy