liquibase.dbdoc.PendingSQLWriter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of liquibase-core Show documentation
Show all versions of liquibase-core Show documentation
Liquibase is a tool for managing and executing database changes.
package liquibase.dbdoc;
import liquibase.Scope;
import liquibase.change.Change;
import liquibase.change.ChangeFactory;
import liquibase.changelog.ChangeSet;
import liquibase.changelog.DatabaseChangeLog;
import liquibase.database.Database;
import liquibase.exception.DatabaseException;
import liquibase.exception.DatabaseHistoryException;
import liquibase.exception.MigrationFailedException;
import liquibase.executor.Executor;
import liquibase.executor.ExecutorService;
import liquibase.executor.LoggingExecutor;
import liquibase.resource.Resource;
import java.io.IOException;
import java.io.Writer;
import java.util.List;
public class PendingSQLWriter extends HTMLWriter {
private final DatabaseChangeLog databaseChangeLog;
public PendingSQLWriter(Resource rootOutputDir, Database database, DatabaseChangeLog databaseChangeLog) {
super(rootOutputDir.resolve("pending"), database);
this.databaseChangeLog = databaseChangeLog;
}
@Override
protected String createTitle(Object object) {
return "Pending SQL";
}
@Override
protected void writeBody(Writer fileWriter, Object object, List ranChanges, List changesToRun) throws IOException, DatabaseHistoryException, DatabaseException {
Executor oldTemplate = Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", database);
LoggingExecutor loggingExecutor = new LoggingExecutor(oldTemplate, fileWriter, database);
Scope.getCurrentScope().getSingleton(ExecutorService.class).setExecutor("logging", database, loggingExecutor);
Scope.getCurrentScope().getSingleton(ExecutorService.class).setExecutor("jdbc", database, loggingExecutor);
try {
if (changesToRun.isEmpty()) {
fileWriter.append("NONE");
}
fileWriter.append("");
ChangeSet lastRunChangeSet = null;
for (Change change : changesToRun) {
ChangeSet thisChangeSet = change.getChangeSet();
if (thisChangeSet.equals(lastRunChangeSet)) {
continue;
}
lastRunChangeSet = thisChangeSet;
String anchor = thisChangeSet.toString(false).replaceAll("\\W","_");
fileWriter.append("");
try {
thisChangeSet.execute(databaseChangeLog, null, this.database);
} catch (MigrationFailedException e) {
fileWriter.append("EXECUTION ERROR: ").append(Scope.getCurrentScope().getSingleton(ChangeFactory.class).getChangeMetaData(change).getDescription()).append(": ").append(e.getMessage()).append("\n\n");
}
}
fileWriter.append("
");
} finally {
Scope.getCurrentScope().getSingleton(ExecutorService.class).setExecutor("jdbc", database, oldTemplate);
}
}
@Override
protected void writeCustomHTML(Writer fileWriter, Object object, List changes, Database database) throws IOException {
}
}