package liquibase.sqlgenerator.core;
import liquibase.database.Database;
import liquibase.database.core.MSSQLDatabase;
import liquibase.exception.LiquibaseException;
import liquibase.sql.Sql;
import liquibase.sqlgenerator.SqlGeneratorChain;
import liquibase.statement.core.InsertOrUpdateStatement;
public class InsertOrUpdateGeneratorMSSQL extends InsertOrUpdateGenerator {
public boolean supports(InsertOrUpdateStatement statement, Database database) {
return database instanceof MSSQLDatabase;
}
protected String getRecordCheck(InsertOrUpdateStatement insertOrUpdateStatement, Database database, String whereClause) {
StringBuffer recordCheck = new StringBuffer();
recordCheck.append("DECLARE @reccount integer\n");
recordCheck.append("SELECT @reccount = count(*) FROM ");
recordCheck.append(database.escapeTableName(insertOrUpdateStatement.getSchemaName(),insertOrUpdateStatement.getTableName()));
recordCheck.append(" WHERE ");
recordCheck.append(whereClause);
recordCheck.append("\n");
recordCheck.append("IF @reccount = 0\n");
return recordCheck.toString();
}
@Override
protected String getInsertStatement(InsertOrUpdateStatement insertOrUpdateStatement, Database database, SqlGeneratorChain sqlGeneratorChain) {
StringBuffer insertBlock = new StringBuffer();
insertBlock.append("BEGIN\n");
insertBlock.append(super.getInsertStatement(insertOrUpdateStatement, database, sqlGeneratorChain));
insertBlock.append("END\n");
return insertBlock.toString();
}
protected String getElse(Database database) {
return "ELSE\n";
}
@Override
protected String getUpdateStatement(InsertOrUpdateStatement insertOrUpdateStatement, Database database, String whereClause, SqlGeneratorChain sqlGeneratorChain) throws LiquibaseException {
StringBuffer updateBlock = new StringBuffer();
updateBlock.append("BEGIN\n");
updateBlock.append(super.getUpdateStatement(insertOrUpdateStatement, database, whereClause, sqlGeneratorChain));
updateBlock.append("END\n");
return updateBlock.toString();
}
@Override
public Sql[] generateSql(InsertOrUpdateStatement insertOrUpdateStatement, Database database, SqlGeneratorChain sqlGeneratorChain) {
return super.generateSql(insertOrUpdateStatement, database, sqlGeneratorChain); //To change body of overridden methods use File | Settings | File Templates.
}
}