package liquibase.sqlgenerator.core;
import liquibase.database.Database;
import liquibase.database.core.DB2Database;
import liquibase.database.core.DB2iDatabase;
import liquibase.database.core.MySQLDatabase;
import liquibase.database.core.OracleDatabase;
import liquibase.database.core.PostgresDatabase;
import liquibase.exception.ValidationErrors;
import liquibase.sql.Sql;
import liquibase.sql.UnparsedSql;
import liquibase.sqlgenerator.SqlGeneratorChain;
import liquibase.statement.core.SetTableRemarksStatement;
public class SetTableRemarksGenerator extends AbstractSqlGenerator<SetTableRemarksStatement> {
@Override
public boolean supports(SetTableRemarksStatement statement, Database database) {
return database instanceof MySQLDatabase || database instanceof OracleDatabase || database instanceof PostgresDatabase
|| database instanceof DB2Database;
}
public ValidationErrors validate(SetTableRemarksStatement setTableRemarksStatement, Database database, SqlGeneratorChain sqlGeneratorChain) {
ValidationErrors validationErrors = new ValidationErrors();
validationErrors.checkRequiredField("tableName", setTableRemarksStatement.getTableName());
validationErrors.checkRequiredField("remarks", setTableRemarksStatement.getRemarks());
return validationErrors;
}
public Sql[] generateSql(SetTableRemarksStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) {
String sql;
String remarks = database.escapeStringForDatabase(statement.getRemarks());
if (database instanceof MySQLDatabase) {
sql = "ALTER TABLE " + database.escapeTableName(statement.getSchemaName(), statement.getTableName()) + " COMMENT = '" + remarks
+ "'";
} else {
String command = "COMMENT";
if (database instanceof DB2iDatabase) {
command = "LABEL";
}
sql = command + " ON TABLE " + database.escapeTableName(statement.getSchemaName(), statement.getTableName()) + " IS '"
+ database.escapeStringForDatabase(remarks) + "'";
}
return new Sql[] { new UnparsedSql(sql) };
}
}