package liquibase.changelog.filter; import liquibase.changelog.ChangeSet; import liquibase.database.Database; import liquibase.sql.visitor.SqlVisitor; import java.util.List; import java.util.ArrayList; public class DbmsChangeSetFilter implements ChangeSetFilter { private String databaseString; public DbmsChangeSetFilter(Database database) { this.databaseString = database.getTypeName(); } public boolean accepts(ChangeSet changeSet) { List<SqlVisitor> visitorsToRemove = new ArrayList<SqlVisitor>(); for (SqlVisitor visitor : changeSet.getSqlVisitors()) { if (databaseString != null && visitor.getApplicableDbms() != null && visitor.getApplicableDbms().size() > 0) { boolean shouldRemove = true; if (visitor.getApplicableDbms().contains(databaseString)) { shouldRemove = false; } if (shouldRemove) { visitorsToRemove.add(visitor); } } } changeSet.getSqlVisitors().removeAll(visitorsToRemove); if (databaseString == null) { return true; } if (changeSet.getDbmsSet() == null) { return true; } for (String dbms : changeSet.getDbmsSet()) { if (databaseString.equals(dbms)) { return true; } } return false; } }