Search in sources :

Example 16 with Table

use of liquibase.structure.core.Table in project liquibase by liquibase.

the class AddForeignKeyConstraintChange method checkStatus.

@Override
public ChangeStatus checkStatus(Database database) {
    ChangeStatus result = new ChangeStatus();
    try {
        ForeignKey example = new ForeignKey(getConstraintName(), getBaseTableCatalogName(), getBaseTableSchemaName(), getBaseTableName());
        example.setPrimaryKeyTable(new Table(getReferencedTableCatalogName(), getReferencedTableSchemaName(), getReferencedTableName()));
        example.setForeignKeyColumns(Column.listFromNames(getBaseColumnNames()));
        example.setPrimaryKeyColumns(Column.listFromNames(getReferencedColumnNames()));
        ForeignKey snapshot = SnapshotGeneratorFactory.getInstance().createSnapshot(example, database);
        result.assertComplete(snapshot != null, "Foreign key does not exist");
        if (snapshot != null) {
            if (getInitiallyDeferred() != null) {
                result.assertCorrect(getInitiallyDeferred().equals(snapshot.isInitiallyDeferred()), "Initially deferred incorrect");
            }
            if (getDeferrable() != null) {
                result.assertCorrect(getDeferrable().equals(snapshot.isDeferrable()), "Initially deferred incorrect");
            }
        }
        return result;
    } catch (Exception e) {
        return result.unknown(e);
    }
}
Also used : Table(liquibase.structure.core.Table) ForeignKey(liquibase.structure.core.ForeignKey) UnexpectedLiquibaseException(liquibase.exception.UnexpectedLiquibaseException)

Example 17 with Table

use of liquibase.structure.core.Table 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);
    }
}
Also used : Table(liquibase.structure.core.Table) Column(liquibase.structure.core.Column) ForeignKey(liquibase.structure.core.ForeignKey)

Example 18 with Table

use of liquibase.structure.core.Table in project liquibase by liquibase.

the class DropAllForeignKeyConstraintsChange method generateChildren.

private List<DropForeignKeyConstraintChange> generateChildren(Database database) {
    // Make a new list
    List<DropForeignKeyConstraintChange> childDropChanges = new ArrayList<DropForeignKeyConstraintChange>();
    Executor executor = ExecutorService.getInstance().getExecutor(database);
    FindForeignKeyConstraintsStatement sql = new FindForeignKeyConstraintsStatement(getBaseTableCatalogName(), getBaseTableSchemaName(), getBaseTableName());
    try {
        List<Map<String, ?>> results = executor.queryForList(sql);
        Set<String> handledConstraints = new HashSet<String>();
        if (results != null && results.size() > 0) {
            for (Map result : results) {
                String baseTableName = (String) result.get(FindForeignKeyConstraintsStatement.RESULT_COLUMN_BASE_TABLE_NAME);
                String constraintName = (String) result.get(FindForeignKeyConstraintsStatement.RESULT_COLUMN_CONSTRAINT_NAME);
                if (DatabaseObjectComparatorFactory.getInstance().isSameObject(new Table().setName(getBaseTableName()), new Table().setName(baseTableName), null, database)) {
                    if (!handledConstraints.contains(constraintName)) {
                        DropForeignKeyConstraintChange dropForeignKeyConstraintChange = new DropForeignKeyConstraintChange();
                        dropForeignKeyConstraintChange.setBaseTableSchemaName(getBaseTableSchemaName());
                        dropForeignKeyConstraintChange.setBaseTableName(baseTableName);
                        dropForeignKeyConstraintChange.setConstraintName(constraintName);
                        childDropChanges.add(dropForeignKeyConstraintChange);
                        handledConstraints.add(constraintName);
                    }
                } else {
                    throw new IllegalStateException("Expected to return only foreign keys for base table name: " + getBaseTableName() + " and got results for table: " + baseTableName);
                }
            }
        }
        return childDropChanges;
    } catch (DatabaseException e) {
        throw new UnexpectedLiquibaseException("Failed to find foreign keys for table: " + getBaseTableName(), e);
    }
}
Also used : Table(liquibase.structure.core.Table) ArrayList(java.util.ArrayList) Executor(liquibase.executor.Executor) FindForeignKeyConstraintsStatement(liquibase.statement.core.FindForeignKeyConstraintsStatement) Map(java.util.Map) DatabaseException(liquibase.exception.DatabaseException) UnexpectedLiquibaseException(liquibase.exception.UnexpectedLiquibaseException) HashSet(java.util.HashSet)

Example 19 with Table

use of liquibase.structure.core.Table in project liquibase by liquibase.

the class RenameTableChange method checkStatus.

@Override
public ChangeStatus checkStatus(Database database) {
    try {
        ChangeStatus changeStatus = new ChangeStatus();
        Table newTable = SnapshotGeneratorFactory.getInstance().createSnapshot(new Table(getCatalogName(), getSchemaName(), getNewTableName()), database);
        Table oldTable = SnapshotGeneratorFactory.getInstance().createSnapshot(new Table(getCatalogName(), getSchemaName(), getOldTableName()), database);
        if (newTable == null && oldTable == null) {
            return changeStatus.unknown("Neither table exists");
        }
        if (newTable != null && oldTable != null) {
            return changeStatus.unknown("Both tables exist");
        }
        changeStatus.assertComplete(newTable != null, "New table does not exist");
        return changeStatus;
    } catch (Exception e) {
        return new ChangeStatus().unknown(e);
    }
}
Also used : Table(liquibase.structure.core.Table)

Example 20 with Table

use of liquibase.structure.core.Table in project liquibase by liquibase.

the class AddUniqueConstraintGenerator method getAffectedUniqueConstraint.

protected UniqueConstraint getAffectedUniqueConstraint(AddUniqueConstraintStatement statement) {
    UniqueConstraint uniqueConstraint = new UniqueConstraint().setName(statement.getConstraintName()).setTable((Table) new Table().setName(statement.getTableName()).setSchema(statement.getCatalogName(), statement.getSchemaName()));
    int i = 0;
    for (Column column : Column.listFromNames(statement.getColumnNames())) {
        uniqueConstraint.addColumn(i++, column);
    }
    return uniqueConstraint;
}
Also used : Table(liquibase.structure.core.Table) Column(liquibase.structure.core.Column) UniqueConstraint(liquibase.structure.core.UniqueConstraint) UniqueConstraint(liquibase.structure.core.UniqueConstraint)

Aggregations

Table (liquibase.structure.core.Table)28 Column (liquibase.structure.core.Column)13 Schema (liquibase.structure.core.Schema)7 DatabaseException (liquibase.exception.DatabaseException)5 UnexpectedLiquibaseException (liquibase.exception.UnexpectedLiquibaseException)5 SnapshotControl (liquibase.snapshot.SnapshotControl)5 MSSQLDatabase (liquibase.database.core.MSSQLDatabase)4 DatabaseSnapshot (liquibase.snapshot.DatabaseSnapshot)4 ArrayList (java.util.ArrayList)3 Liquibase (liquibase.Liquibase)3 Change (liquibase.change.Change)3 PostgresDatabase (liquibase.database.core.PostgresDatabase)3 EmptyDatabaseSnapshot (liquibase.snapshot.EmptyDatabaseSnapshot)3 ForeignKey (liquibase.structure.core.ForeignKey)3 PrimaryKey (liquibase.structure.core.PrimaryKey)3 Test (org.junit.Test)3 ResultSet (java.sql.ResultSet)2 SQLException (java.sql.SQLException)2 Statement (java.sql.Statement)2 Date (java.util.Date)2