private void generateChangeLog(final Database database, final CatalogAndSchema catalogAndSchema, final DiffToChangeLog changeLogWriter, PrintStream outputStream, final Set<Class<? extends DatabaseObject>> compareTypes) throws DatabaseException, IOException, ParserConfigurationException { @SuppressWarnings("unchecked") final SnapshotControl snapshotControl = new SnapshotControl(database, compareTypes.toArray(new Class[compareTypes.size()])); final CompareControl compareControl = new CompareControl(new CompareControl.SchemaComparison[]{ new CompareControl.SchemaComparison(catalogAndSchema, catalogAndSchema)}, compareTypes); final CatalogAndSchema[] compareControlSchemas = compareControl .getSchemas(CompareControl.DatabaseRole.REFERENCE); try { final DatabaseSnapshot referenceSnapshot = SnapshotGeneratorFactory.getInstance() .createSnapshot(compareControlSchemas, database, snapshotControl); final DatabaseSnapshot comparisonSnapshot = SnapshotGeneratorFactory.getInstance() .createSnapshot(compareControlSchemas, null, snapshotControl); final DiffResult diffResult = DiffGeneratorFactory.getInstance() .compare(referenceSnapshot, comparisonSnapshot, compareControl); changeLogWriter.setDiffResult(diffResult); changeLogWriter.print(outputStream); } catch (InvalidExampleException e) { throw new UnexpectedLiquibaseException(e); } }
new CompareControl() .addSuppressedField(Catalog.class, "name") .addSuppressedField(Schema.class, "name"));
void diff(Connection referenceConnection, Connection targetConnection) throws LiquibaseException, IOException, ParserConfigurationException { Liquibase liquibase = null; try { Database referenceDatabase = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(referenceConnection)); Database targetDatabase = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(targetConnection)); liquibase = new Liquibase("", new FileSystemResourceAccessor(), referenceDatabase); DiffResult diffResult = liquibase.diff(referenceDatabase, targetDatabase, new CompareControl()); new DiffToChangeLog(diffResult, new DiffOutputControl()).print(System.out); } finally { if (liquibase != null) { liquibase.forceReleaseLocks(); } } }
@Override public void process(File generatedFile, File outputDirectory, SchemaGenExtension config) { try (Connection connection = setupDataSource(generatedFile); Connection emptyConnection = setupEmptySource()) { DatabaseFactory databaseFactory = DatabaseFactory.getInstance(); Database database = databaseFactory.findCorrectDatabaseImplementation(new JdbcConnection(connection)); Database emptyDatabase = databaseFactory.findCorrectDatabaseImplementation(new JdbcConnection(emptyConnection)); DiffGeneratorFactory diffGeneratorFactory = DiffGeneratorFactory.getInstance(); CompareControl compareControl = new CompareControl(); DiffResult result = diffGeneratorFactory.compare(database, emptyDatabase, compareControl); DiffOutputControl outputControl = new DiffOutputControl(); DiffToChangeLog changeLog = new DiffToChangeLog(result, outputControl); changeLog.setChangeSetAuthor(config.getLiquibase().getUser()); changeLog.setIdRoot(config.getVersion()); changeLog.generateChangeSets(); File outputFile = new File(outputDirectory, config.getPackageName().replace(".", File.separator) + File.separator + config.getLiquibase().getFileName()); outputFile.getParentFile().mkdirs(); if (outputFile.exists()) { boolean deleted = outputFile.delete(); if (!deleted) { throw new IllegalStateException("cannot delete " + outputFile.getAbsolutePath()); } } changeLog.print(outputFile.getAbsolutePath(), new XMLChangeLogSerializer()); } catch (Exception e) { throw new IllegalStateException(e); } }
private void generateChangeLog(final Database database, final CatalogAndSchema catalogAndSchema, final DiffToChangeLog changeLogWriter, PrintStream outputStream, final Set<Class<? extends DatabaseObject>> compareTypes) throws DatabaseException, IOException, ParserConfigurationException { @SuppressWarnings({"unchecked", "rawtypes"}) final SnapshotControl snapshotControl = new SnapshotControl(database, compareTypes.toArray(new Class[compareTypes.size()])); final CompareControl compareControl = new CompareControl(new CompareControl.SchemaComparison[]{ new CompareControl.SchemaComparison(catalogAndSchema, catalogAndSchema)}, compareTypes); final CatalogAndSchema[] compareControlSchemas = compareControl .getSchemas(CompareControl.DatabaseRole.REFERENCE); try { final DatabaseSnapshot referenceSnapshot = SnapshotGeneratorFactory.getInstance() .createSnapshot(compareControlSchemas, database, snapshotControl); final DatabaseSnapshot comparisonSnapshot = SnapshotGeneratorFactory.getInstance() .createSnapshot(compareControlSchemas, null, snapshotControl); final DiffResult diffResult = DiffGeneratorFactory.getInstance() .compare(referenceSnapshot, comparisonSnapshot, compareControl); changeLogWriter.setDiffResult(diffResult); changeLogWriter.print(outputStream); } catch (InvalidExampleException e) { throw new UnexpectedLiquibaseException(e); } }