private String createDropAgainstExistingSchema(DatabaseSnapshot target) throws Exception {
    final DatabaseSnapshot reference = LiquibaseModelFactory.createEmptySnapshot();

    final StringBuilder sb = new StringBuilder();
    printChanges(reference, target, sb);
    return sb.toString();
  }
  public String createNew(HibernateDatabase newDatabase) throws Exception {

    final DatabaseSnapshot reference = LiquibaseModelFactory.create(newDatabase);
    final DatabaseSnapshot target = LiquibaseModelFactory.createEmptySnapshot();
    final StringBuilder sb = new StringBuilder();
    printChanges(reference, target, sb);

    for (String file : CREATE_SQL_FILES) {
      @SuppressWarnings("unchecked")
      final List<String> lines =
          IOUtils.readLines(
              Thread.currentThread().getContextClassLoader().getResourceAsStream(file));
      for (Object line : lines) {
        sb.append(line).append("\n");
      }
    }

    return sb.toString();
  }
  public String createUpdateAgainstExistingSchema(
      URL schema, String jdbcUrl, String userName, String password, URL indexNames)
      throws Exception {
    final DatabaseSnapshot reference = createFromCommittedSchema(schema, indexNames);
    final DatabaseSnapshot target =
        LiquibaseModelFactory.readSnapshotFromDatabase(jdbcUrl, userName, password);

    final StringBuilder sb = new StringBuilder();
    printChanges(reference, target, sb);
    return sb.toString();
  }
  public String createUpdateAgainstCommittedSchema(
      URL schema, DatabaseWithIndexes newDatabase, URL indexNames) throws Exception {
    final DatabaseSnapshot reference = LiquibaseModelFactory.create(newDatabase.getDatabase());
    final DatabaseSnapshot target = createFromCommittedSchema(schema, indexNames);

    Collections.sort(
        newDatabase.getIndexNames().getIndexNames(),
        Ordering.from(String.CASE_INSENSITIVE_ORDER)
            .onResultOf(
                new Function<HibernateIndexName, String>() {
                  @Override
                  public String apply(HibernateIndexName input) {
                    return input.getTableName() + "-" + StringUtils.join(input.getColumns(), ',');
                  }
                }));

    final StringBuilder sb = new StringBuilder();
    printChanges(reference, target, sb);
    return sb.toString();
  }
  private DatabaseSnapshot createFromCommittedSchema(URL schema, URL indexNames) throws Exception {
    HibernateDatabase hibernateDatabase = getDatabase(schema);
    IndexIdFactory.setIndexNames(hibernateDatabase, getIndexNames(indexNames));

    return LiquibaseModelFactory.create(hibernateDatabase);
  }
 public String createDropAgainstExistingSchema(Connection connection) throws Exception {
   return createDropAgainstExistingSchema(
       LiquibaseModelFactory.readSnapshotFromDatabase(connection));
 }
 public String createDropAgainstExistingSchema(String jdbcUrl, String userName, String password)
     throws Exception {
   return createDropAgainstExistingSchema(
       LiquibaseModelFactory.readSnapshotFromDatabase(jdbcUrl, userName, password));
 }