protected Snapshot getExistingSnapshot(Scope scope)
     throws liquibase.exception.ActionPerformException {
   Snapshot existingSnapshot = new Snapshot(scope);
   existingSnapshot.add(
       scope.getSingleton(SnapshotFactory.class).snapshot(this.changeLogTable, scope));
   existingSnapshot.addAll(
       scope
           .getSingleton(SnapshotFactory.class)
           .snapshotAll(Column.class, this.changeLogTable, scope));
   return existingSnapshot;
 }
  protected Snapshot createWantedSnapshot(Scope scope) {
    Database database = scope.getDatabase();
    Table wantedVersionTable = new Table(this.changeLogTable.name, this.changeLogTable.getSchema());
    wantedVersionTable.tablespace = changeLogTablespace;
    Collection<Column> wantedVersionColumns = new ArrayList<>();

    wantedVersionColumns.add(
        new Column(
            "id",
            this.changeLogTable,
            new DataType(getCharType(scope), getColumnSize("id", scope)),
            false));
    wantedVersionColumns.add(
        new Column(
            "author",
            this.changeLogTable,
            new DataType(getCharType(scope), getColumnSize("author", scope)),
            false));
    wantedVersionColumns.add(
        new Column(
            "filename",
            this.changeLogTable,
            new DataType(getCharType(scope), getColumnSize("filename", scope)),
            false));
    wantedVersionColumns.add(
        new Column(
            "dateexecuted", this.changeLogTable, new DataType(getDateTimeType(scope)), false));
    wantedVersionColumns.add(
        new Column(
            "orderexecuted",
            this.changeLogTable,
            new DataType(DataType.StandardType.INTEGER),
            false));
    wantedVersionColumns.add(
        new Column(
            "exectype",
            this.changeLogTable,
            new DataType(getCharType(scope), getColumnSize("exectype", scope)),
            false));

    wantedVersionColumns.add(
        new Column(
            "md5sum",
            this.changeLogTable,
            new DataType(getCharType(scope), getColumnSize("md5sum", scope)),
            true));
    wantedVersionColumns.add(
        new Column(
            "description",
            this.changeLogTable,
            new DataType(getCharType(scope), getColumnSize("description", scope)),
            true));
    wantedVersionColumns.add(
        new Column(
            "comments",
            this.changeLogTable,
            new DataType(getCharType(scope), getColumnSize("comments", scope)),
            true));
    wantedVersionColumns.add(
        new Column(
            "tag",
            this.changeLogTable,
            new DataType(getCharType(scope), getColumnSize("tag", scope)),
            true));
    wantedVersionColumns.add(
        new Column(
            "liquibase",
            this.changeLogTable,
            new DataType(getCharType(scope), getColumnSize("liquibase", scope)),
            true));
    wantedVersionColumns.add(
        new Column(
            "labels",
            this.changeLogTable,
            new DataType(getCharType(scope), getColumnSize("labels", scope)),
            true));
    wantedVersionColumns.add(
        new Column(
            "contexts",
            this.changeLogTable,
            new DataType(getCharType(scope), getColumnSize("contexts", scope)),
            true));
    wantedVersionColumns.add(
        new Column(
            "deployment_id",
            this.changeLogTable,
            new DataType(getCharType(scope), getColumnSize("deployment_id", scope)),
            true));

    boolean upperCase =
        database.getIdentifierCaseHandling(Table.class, false, scope)
            != Database.IdentifierCaseHandling.LOWERCASE;
    for (Column column : wantedVersionColumns) {
      if (upperCase) {
        column.name = column.name.toUpperCase();
      }
    }
    Snapshot wantedVersionSnapshot = new Snapshot(scope);
    wantedVersionSnapshot.add(wantedVersionTable);
    wantedVersionSnapshot.addAll(wantedVersionColumns);
    return wantedVersionSnapshot;
  }