Search in sources :

Example 1 with DatabaseObjectComparatorChain

use of liquibase.diff.compare.DatabaseObjectComparatorChain in project liquibase by liquibase.

the class ForeignKeyComparator method isSameObject.

@Override
public boolean isSameObject(DatabaseObject databaseObject1, DatabaseObject databaseObject2, Database accordingTo, DatabaseObjectComparatorChain chain) {
    if (!((databaseObject1 instanceof ForeignKey) && (databaseObject2 instanceof ForeignKey))) {
        return false;
    }
    ForeignKey thisForeignKey = (ForeignKey) databaseObject1;
    ForeignKey otherForeignKey = (ForeignKey) databaseObject2;
    if ((thisForeignKey.getPrimaryKeyTable() == null) || (thisForeignKey.getForeignKeyTable() == null) || (otherForeignKey.getPrimaryKeyTable() == null) || (otherForeignKey.getForeignKeyTable() == null)) {
        if (thisForeignKey.getForeignKeyTable() != null && otherForeignKey.getForeignKeyTable() != null) {
            // FK names are not necessarily unique across all tables, so first check if FK tables are different
            if (!chain.isSameObject(thisForeignKey.getForeignKeyTable(), otherForeignKey.getForeignKeyTable(), accordingTo)) {
                return false;
            }
        }
        if ((thisForeignKey.getName() != null) && (otherForeignKey.getName() != null)) {
            if (accordingTo.isCaseSensitive()) {
                return thisForeignKey.getName().equals(otherForeignKey.getName());
            } else {
                return thisForeignKey.getName().equalsIgnoreCase(otherForeignKey.getName());
            }
        } else {
            return false;
        }
    }
    if ((thisForeignKey.getForeignKeyColumns() != null) && (thisForeignKey.getPrimaryKeyColumns() != null) && (otherForeignKey.getForeignKeyColumns() != null) && (otherForeignKey.getPrimaryKeyColumns() != null)) {
        boolean columnsTheSame;
        StringUtil.StringUtilFormatter<Column> formatter = obj -> obj.toString(false);
        if (accordingTo.isCaseSensitive()) {
            columnsTheSame = StringUtil.join(thisForeignKey.getForeignKeyColumns(), ",", formatter).equals(StringUtil.join(otherForeignKey.getForeignKeyColumns(), ",", formatter)) && StringUtil.join(thisForeignKey.getPrimaryKeyColumns(), ",", formatter).equals(StringUtil.join(otherForeignKey.getPrimaryKeyColumns(), ",", formatter));
        } else {
            columnsTheSame = StringUtil.join(thisForeignKey.getForeignKeyColumns(), ",", formatter).equalsIgnoreCase(StringUtil.join(otherForeignKey.getForeignKeyColumns(), ",", formatter)) && StringUtil.join(thisForeignKey.getPrimaryKeyColumns(), ",", formatter).equalsIgnoreCase(StringUtil.join(otherForeignKey.getPrimaryKeyColumns(), ",", formatter));
        }
        return columnsTheSame && DatabaseObjectComparatorFactory.getInstance().isSameObject(thisForeignKey.getForeignKeyTable(), otherForeignKey.getForeignKeyTable(), chain.getSchemaComparisons(), accordingTo) && DatabaseObjectComparatorFactory.getInstance().isSameObject(thisForeignKey.getPrimaryKeyTable(), otherForeignKey.getPrimaryKeyTable(), chain.getSchemaComparisons(), accordingTo);
    }
    return false;
}
Also used : DatabaseObjectComparator(liquibase.diff.compare.DatabaseObjectComparator) DatabaseObjectComparatorFactory(liquibase.diff.compare.DatabaseObjectComparatorFactory) DatabaseObjectComparatorChain(liquibase.diff.compare.DatabaseObjectComparatorChain) DatabaseObject(liquibase.structure.DatabaseObject) Column(liquibase.structure.core.Column) CompareControl(liquibase.diff.compare.CompareControl) ForeignKey(liquibase.structure.core.ForeignKey) Set(java.util.Set) Database(liquibase.database.Database) ObjectDifferences(liquibase.diff.ObjectDifferences) StringUtil(liquibase.util.StringUtil) Table(liquibase.structure.core.Table) Column(liquibase.structure.core.Column) ForeignKey(liquibase.structure.core.ForeignKey) StringUtil(liquibase.util.StringUtil)

Aggregations

Set (java.util.Set)1 Database (liquibase.database.Database)1 ObjectDifferences (liquibase.diff.ObjectDifferences)1 CompareControl (liquibase.diff.compare.CompareControl)1 DatabaseObjectComparator (liquibase.diff.compare.DatabaseObjectComparator)1 DatabaseObjectComparatorChain (liquibase.diff.compare.DatabaseObjectComparatorChain)1 DatabaseObjectComparatorFactory (liquibase.diff.compare.DatabaseObjectComparatorFactory)1 DatabaseObject (liquibase.structure.DatabaseObject)1 Column (liquibase.structure.core.Column)1 ForeignKey (liquibase.structure.core.ForeignKey)1 Table (liquibase.structure.core.Table)1 StringUtil (liquibase.util.StringUtil)1