/** Returns the run status for the given ChangeSet */ @Override public ChangeSet.RunStatus getRunStatus(ChangeSet changeSet) throws DatabaseException, DatabaseHistoryException { if (!hasDatabaseChangeLogTable()) { return ChangeSet.RunStatus.NOT_RAN; } RanChangeSet foundRan = getRanChangeSet(changeSet); if (foundRan == null) { return ChangeSet.RunStatus.NOT_RAN; } else { if (foundRan.getLastCheckSum() == null) { try { LogFactory.getLogger().info("Updating NULL md5sum for " + changeSet.toString()); ExecutorService.getInstance() .getExecutor(this) .execute( new RawSqlStatement( "UPDATE " + escapeTableName( getLiquibaseSchemaName(), getDatabaseChangeLogTableName()) + " SET MD5SUM='" + changeSet.generateCheckSum().toString() + "' WHERE ID='" + changeSet.getId() + "' AND AUTHOR='" + changeSet.getAuthor() + "' AND FILENAME='" + changeSet.getFilePath() + "'")); this.commit(); } catch (DatabaseException e) { throw new DatabaseException(e); } return ChangeSet.RunStatus.ALREADY_RAN; } else { if (foundRan.getLastCheckSum().equals(changeSet.generateCheckSum())) { return ChangeSet.RunStatus.ALREADY_RAN; } else { if (changeSet.shouldRunOnChange()) { return ChangeSet.RunStatus.RUN_AGAIN; } else { return ChangeSet.RunStatus.INVALID_MD5SUM; // throw new DatabaseHistoryException("MD5 Check for " + changeSet.toString() + " // failed"); } } } } }
@Override public void check(Database database, DatabaseChangeLog changeLog, ChangeSet changeSet) throws PreconditionFailedException, PreconditionErrorException { ObjectQuotingStrategy objectQuotingStrategy = null; if (changeSet == null) { objectQuotingStrategy = ObjectQuotingStrategy.LEGACY; } else { objectQuotingStrategy = changeSet.getObjectQuotingStrategy(); } String changeLogFile = getChangeLogFile(); if (changeLogFile == null) { changeLogFile = changeLog.getLogicalFilePath(); } ChangeSet interestedChangeSet = new ChangeSet( getId(), getAuthor(), false, false, changeLogFile, null, null, false, objectQuotingStrategy, changeLog); RanChangeSet ranChangeSet; try { ranChangeSet = database.getRanChangeSet(interestedChangeSet); } catch (Exception e) { throw new PreconditionErrorException(e, changeLog, this); } if (ranChangeSet == null || ranChangeSet.getExecType() == null || !ranChangeSet.getExecType().ran) { throw new PreconditionFailedException( "Change Set '" + interestedChangeSet.toString(false) + "' has not been run", changeLog, this); } }