package liquibase.sqlgenerator.core; import static liquibase.util.SqlUtil.replacePredicatePlaceholders; import liquibase.database.Database; import liquibase.exception.ValidationErrors; import liquibase.sql.Sql; import liquibase.sql.UnparsedSql; import liquibase.sqlgenerator.SqlGeneratorChain; import liquibase.statement.core.DeleteStatement; import liquibase.structure.core.Relation; import liquibase.structure.core.Table; public class DeleteGenerator extends AbstractSqlGenerator<DeleteStatement> { @Override public ValidationErrors validate(DeleteStatement deleteStatement, Database database, SqlGeneratorChain sqlGeneratorChain) { ValidationErrors validationErrors = new ValidationErrors(); validationErrors.checkRequiredField("tableName", deleteStatement.getTableName()); if (deleteStatement.getWhereParameters() != null && deleteStatement.getWhereParameters().size() > 0 && deleteStatement.getWhere() == null) { validationErrors.addError("whereParams set but no whereClause"); } return validationErrors; } @Override public Sql[] generateSql(DeleteStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) { StringBuffer sql = new StringBuffer("DELETE FROM " + database.escapeTableName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName())); if (statement.getWhere() != null) { sql.append(" WHERE ").append(replacePredicatePlaceholders(database, statement.getWhere(), statement.getWhereColumnNames(), statement.getWhereParameters())); } return new Sql[] { new UnparsedSql(sql.toString(), getAffectedTable(statement)) }; } protected Relation getAffectedTable(DeleteStatement statement) { return new Table().setName(statement.getTableName()).setSchema(statement.getCatalogName(), statement.getSchemaName()); } }