use of liquibase.sql.Sql in project liquibase by liquibase.
the class DropIndexGenerator method generateSql.
@Override
public Sql[] generateSql(DropIndexStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) {
List<String> associatedWith = StringUtils.splitAndTrim(statement.getAssociatedWith(), ",");
if (associatedWith != null) {
if (associatedWith.contains(Index.MARK_PRIMARY_KEY) || associatedWith.contains(Index.MARK_UNIQUE_CONSTRAINT)) {
return new Sql[0];
} else if (associatedWith.contains(Index.MARK_FOREIGN_KEY)) {
if (!(database instanceof OracleDatabase || database instanceof MSSQLDatabase)) {
return new Sql[0];
}
}
}
String schemaName = statement.getTableSchemaName();
if (database instanceof MySQLDatabase) {
return new Sql[] { new UnparsedSql("DROP INDEX " + database.escapeIndexName(null, null, statement.getIndexName()) + " ON " + database.escapeTableName(statement.getTableCatalogName(), schemaName, statement.getTableName()), getAffectedIndex(statement)) };
} else if (database instanceof MSSQLDatabase) {
return new Sql[] { new UnparsedSql("DROP INDEX " + database.escapeIndexName(null, null, statement.getIndexName()) + " ON " + database.escapeTableName(null, schemaName, statement.getTableName()), getAffectedIndex(statement)) };
} else if (database instanceof SybaseDatabase) {
return new Sql[] { new UnparsedSql("DROP INDEX " + statement.getTableName() + "." + statement.getIndexName(), getAffectedIndex(statement)) };
} else if (database instanceof PostgresDatabase) {
return new Sql[] { new UnparsedSql("DROP INDEX " + database.escapeIndexName(statement.getTableCatalogName(), schemaName, statement.getIndexName()), getAffectedIndex(statement)) };
}
return new Sql[] { new UnparsedSql("DROP INDEX " + database.escapeIndexName(statement.getTableCatalogName(), schemaName, statement.getIndexName()), getAffectedIndex(statement)) };
}
use of liquibase.sql.Sql in project liquibase by liquibase.
the class InsertOrUpdateGenerator method getUpdateStatement.
/**
*
* @param insertOrUpdateStatement
* @param database
* @param whereClause
* @param sqlGeneratorChain
* @return the update statement, if there is nothing to update return null
*/
protected String getUpdateStatement(InsertOrUpdateStatement insertOrUpdateStatement, Database database, String whereClause, SqlGeneratorChain sqlGeneratorChain) throws LiquibaseException {
StringBuffer updateSqlString = new StringBuffer();
UpdateGenerator update = new UpdateGenerator();
UpdateStatement updateStatement = new UpdateStatement(insertOrUpdateStatement.getCatalogName(), insertOrUpdateStatement.getSchemaName(), insertOrUpdateStatement.getTableName());
if (!(database instanceof OracleDatabase && insertOrUpdateStatement.getOnlyUpdate() != null && insertOrUpdateStatement.getOnlyUpdate())) {
whereClause += ";\n";
}
updateStatement.setWhereClause(whereClause);
String[] pkFields = insertOrUpdateStatement.getPrimaryKey().split(",");
HashSet<String> hashPkFields = new HashSet<String>(Arrays.asList(pkFields));
for (String columnKey : insertOrUpdateStatement.getColumnValues().keySet()) {
if (!hashPkFields.contains(columnKey)) {
updateStatement.addNewColumnValue(columnKey, insertOrUpdateStatement.getColumnValue(columnKey));
}
}
// this isn't very elegant but the code fails above without any columns to update
if (updateStatement.getNewColumnValues().isEmpty()) {
throw new LiquibaseException("No fields to update in set clause");
}
Sql[] updateSql = update.generateSql(updateStatement, database, sqlGeneratorChain);
for (Sql s : updateSql) {
updateSqlString.append(s.toSql());
updateSqlString.append(";");
}
updateSqlString.deleteCharAt(updateSqlString.lastIndexOf(";"));
updateSqlString.append("\n");
return updateSqlString.toString();
}
use of liquibase.sql.Sql in project liquibase by liquibase.
the class ModifyDataTypeGenerator method generateSql.
@Override
public Sql[] generateSql(ModifyDataTypeStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) {
String alterTable = "ALTER TABLE " + database.escapeTableName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName());
// add "MODIFY"
alterTable += " " + getModifyString(database) + " ";
// add column name
String columnName = database.escapeColumnName(statement.getCatalogName(), statement.getSchemaName(), statement.getTableName(), statement.getColumnName());
alterTable += columnName;
// adds a space if nothing else
alterTable += getPreDataTypeString(database);
// add column type
DatabaseDataType newDataType = DataTypeFactory.getInstance().fromDescription(statement.getNewDataType(), database).toDatabaseDataType(database);
alterTable += newDataType;
if (database instanceof PostgresDatabase) {
alterTable += " USING (" + columnName + "::" + newDataType + ")";
}
return new Sql[] { new UnparsedSql(alterTable, getAffectedTable(statement)) };
}
use of liquibase.sql.Sql in project liquibase by liquibase.
the class CreateTableGeneratorTest method testAutoIncrementStartWithH2Database.
@Test
public void testAutoIncrementStartWithH2Database() throws Exception {
for (Database database : TestContext.getInstance().getAllDatabases()) {
if (database instanceof H2Database) {
CreateTableStatement statement = new CreateTableStatement(CATALOG_NAME, SCHEMA_NAME, TABLE_NAME);
statement.addColumn(COLUMN_NAME1, DataTypeFactory.getInstance().fromDescription("BIGINT{autoIncrement:true}", database), new AutoIncrementConstraint(COLUMN_NAME1, BigInteger.ZERO, null));
Sql[] generatedSql = this.generatorUnderTest.generateSql(statement, database, null);
assertEquals("CREATE TABLE SCHEMA_NAME.TABLE_NAME (COLUMN1_NAME BIGINT AUTO_INCREMENT (0))", generatedSql[0].toSql());
}
}
}
use of liquibase.sql.Sql in project liquibase by liquibase.
the class DeleteGeneratorTest method testGenerateSql.
@Test
public void testGenerateSql() {
// given
DeleteStatement statement = new DeleteStatement(null, null, "DATABASECHANGELOG");
statement.setWhere(":name = :value AND :name = :value AND :name = :value");
statement.addWhereColumnName("ID");
statement.addWhereColumnName("AUTHOR");
statement.addWhereColumnName("FILENAME");
statement.addWhereParameter("1");
statement.addWhereParameter("a");
statement.addWhereParameter("server_principals/BUILTIN$Administrators.xml");
Database database = new MSSQLDatabase();
DeleteGenerator generator = new DeleteGenerator();
// when
Sql[] sqls = generator.generateSql(statement, database, null);
// then
assertEquals("DELETE FROM [DATABASECHANGELOG] " + "WHERE [ID] = '1' " + "AND [AUTHOR] = 'a' " + "AND [FILENAME] = 'server_principals/BUILTIN$Administrators.xml'", sqls[0].toSql());
}
Aggregations