use of liquibase.structure.core.Column in project liquibase by liquibase.
the class RenameColumnChange method generateStatementsForSQLiteDatabase.
private SqlStatement[] generateStatementsForSQLiteDatabase(Database database) {
// SQLite does not support this ALTER TABLE operation until now.
// For more information see: http://www.sqlite.org/omitted.html.
// This is a small work around...
List<SqlStatement> statements = new ArrayList<SqlStatement>();
// define alter table logic
AlterTableVisitor rename_alter_visitor = new AlterTableVisitor() {
@Override
public ColumnConfig[] getColumnsToAdd() {
return new ColumnConfig[0];
}
@Override
public boolean copyThisColumn(ColumnConfig column) {
return true;
}
@Override
public boolean createThisColumn(ColumnConfig column) {
if (column.getName().equals(getOldColumnName())) {
column.setName(getNewColumnName());
}
return true;
}
@Override
public boolean createThisIndex(Index index) {
if (index.getColumnNames().contains(getOldColumnName())) {
Iterator<Column> columnIterator = index.getColumns().iterator();
while (columnIterator.hasNext()) {
Column column = columnIterator.next();
if (column.getName().equals(getOldColumnName())) {
columnIterator.remove();
break;
}
}
index.addColumn(new Column(getNewColumnName()).setRelation(index.getTable()));
}
return true;
}
};
try {
// alter table
statements.addAll(SQLiteDatabase.getAlterTableStatements(rename_alter_visitor, database, getCatalogName(), getSchemaName(), getTableName()));
} catch (Exception e) {
System.err.println(e);
e.printStackTrace();
}
return statements.toArray(new SqlStatement[statements.size()]);
}
use of liquibase.structure.core.Column in project liquibase by liquibase.
the class CreateIndexChange method checkStatus.
@Override
public ChangeStatus checkStatus(Database database) {
ChangeStatus result = new ChangeStatus();
try {
Index example = new Index(getIndexName(), getCatalogName(), getSchemaName(), getTableName());
if (getColumns() != null) {
for (ColumnConfig column : getColumns()) {
example.addColumn(new Column(column));
}
}
Index snapshot = SnapshotGeneratorFactory.getInstance().createSnapshot(example, database);
result.assertComplete(snapshot != null, "Index does not exist");
if (snapshot != null) {
if (isUnique() != null) {
result.assertCorrect(isUnique().equals(snapshot.isUnique()), "Unique does not match");
}
}
return result;
} catch (Exception e) {
return result.unknown(e);
}
}
use of liquibase.structure.core.Column in project liquibase by liquibase.
the class AddDefaultValueChange method checkStatus.
@Override
public ChangeStatus checkStatus(Database database) {
ChangeStatus result = new ChangeStatus();
try {
Column column = SnapshotGeneratorFactory.getInstance().createSnapshot(new Column(Table.class, getCatalogName(), getSchemaName(), getTableName(), getColumnName()), database);
if (column == null) {
return result.unknown("Column " + getColumnName() + " does not exist");
}
result.assertComplete(column.getDefaultValue() != null, "Column " + getColumnName() + " has no default value");
if (column.getDefaultValue() == null) {
return result;
}
if (getDefaultValue() != null) {
return result.assertCorrect(getDefaultValue().equals(column.getDefaultValue()), "Default value was " + column.getDefaultValue());
} else if (getDefaultValueDate() != null) {
return result.assertCorrect(getDefaultValueDate().equals(new ISODateFormat().format((Date) column.getDefaultValue())), "Default value was " + column.getDefaultValue());
} else if (getDefaultValueNumeric() != null) {
return result.assertCorrect(getDefaultValueNumeric().equals(column.getDefaultValue().toString()), "Default value was " + column.getDefaultValue());
} else if (getDefaultValueBoolean() != null) {
return result.assertCorrect(getDefaultValueBoolean().equals(column.getDefaultValue()), "Default value was " + column.getDefaultValue());
} else if (getDefaultValueComputed() != null) {
return result.assertCorrect(getDefaultValueComputed().equals(column.getDefaultValue()), "Default value was " + column.getDefaultValue());
} else if (getDefaultValueSequenceNext() != null) {
return result.assertCorrect(getDefaultValueSequenceNext().equals(column.getDefaultValue()), "Default value was " + column.getDefaultValue());
} else {
return result.unknown("Unknown default value type");
}
} catch (Exception e) {
return result.unknown(e);
}
}
use of liquibase.structure.core.Column in project liquibase by liquibase.
the class AddLookupTableChange method checkStatus.
@Override
public ChangeStatus checkStatus(Database database) {
ChangeStatus result = new ChangeStatus();
try {
Table newTableExample = new Table(getNewTableCatalogName(), getNewTableSchemaName(), getNewTableName());
Column newColumnExample = new Column(Table.class, getNewTableCatalogName(), getNewTableSchemaName(), getNewTableName(), getNewColumnName());
ForeignKey foreignKeyExample = new ForeignKey(getConstraintName(), getExistingTableCatalogName(), getExistingTableSchemaName(), getExistingTableName());
foreignKeyExample.setPrimaryKeyTable(newTableExample);
foreignKeyExample.setForeignKeyColumns(Column.listFromNames(getExistingColumnName()));
foreignKeyExample.setPrimaryKeyColumns(Column.listFromNames(getNewColumnName()));
result.assertComplete(SnapshotGeneratorFactory.getInstance().has(newTableExample, database), "New table does not exist");
result.assertComplete(SnapshotGeneratorFactory.getInstance().has(newColumnExample, database), "New column does not exist");
result.assertComplete(SnapshotGeneratorFactory.getInstance().has(foreignKeyExample, database), "Foreign key does not exist");
return result;
} catch (Exception e) {
return result.unknown(e);
}
}
use of liquibase.structure.core.Column in project liquibase by liquibase.
the class DropColumnChange method generateStatementsForSQLiteDatabase.
private SqlStatement[] generateStatementsForSQLiteDatabase(Database database) throws DatabaseException {
SqlStatement[] sqlStatements = null;
// Since SQLite does not support a drop column statement, use alter table visitor to copy the table
// except for the column (and index containing that column) to delete.
Set<String> removedColumnNames = columns.stream().map(ColumnConfig::getName).collect(Collectors.toSet());
SQLiteDatabase.AlterTableVisitor alterTableVisitor = new SQLiteDatabase.AlterTableVisitor() {
@Override
public ColumnConfig[] getColumnsToAdd() {
return new ColumnConfig[0];
}
@Override
public boolean copyThisColumn(ColumnConfig column) {
return !removedColumnNames.contains(column.getName());
}
@Override
public boolean createThisColumn(ColumnConfig column) {
return !removedColumnNames.contains(column.getName());
}
@Override
public boolean createThisIndex(Index index) {
// don't create the index if it has the column we are dropping
boolean indexContainsColumn = false;
for (Column column : index.getColumns()) {
if (removedColumnNames.contains(column.getName())) {
indexContainsColumn = true;
}
}
return !indexContainsColumn;
}
};
List<SqlStatement> statements = SQLiteDatabase.getAlterTableStatements(alterTableVisitor, database, getCatalogName(), getSchemaName(), getTableName());
if (statements.size() > 0) {
sqlStatements = new SqlStatement[statements.size()];
return statements.toArray(sqlStatements);
}
return sqlStatements;
}
Aggregations