示例#1
0
  @Override
  protected void doClean() throws SQLException {
    if ("SYSTEM".equals(name.toUpperCase())) {
      throw new FlywayException(
          "Clean not supported on Oracle for user 'SYSTEM'! You should NEVER add your own objects to the SYSTEM schema!");
    }

    jdbcTemplate.execute("PURGE RECYCLEBIN");

    for (String statement : generateDropStatementsForSpatialExtensions()) {
      jdbcTemplate.execute(statement);
    }

    for (String statement : generateDropStatementsForQueueTables()) {
      // for dropping queue tables, a special grant is required:
      // GRANT EXECUTE ON DBMS_AQADM TO flyway;
      jdbcTemplate.execute(statement);
    }

    for (String statement : generateDropStatementsForObjectType("SEQUENCE", "")) {
      jdbcTemplate.execute(statement);
    }

    for (String statement : generateDropStatementsForObjectType("FUNCTION", "")) {
      jdbcTemplate.execute(statement);
    }

    for (String statement :
        generateDropStatementsForObjectType("MATERIALIZED VIEW", "PRESERVE TABLE")) {
      jdbcTemplate.execute(statement);
    }

    for (String statement : generateDropStatementsForObjectType("PACKAGE", "")) {
      jdbcTemplate.execute(statement);
    }

    for (String statement : generateDropStatementsForObjectType("PROCEDURE", "")) {
      jdbcTemplate.execute(statement);
    }

    for (String statement : generateDropStatementsForObjectType("SYNONYM", "")) {
      jdbcTemplate.execute(statement);
    }

    for (String statement : generateDropStatementsForObjectType("TRIGGER", "")) {
      jdbcTemplate.execute(statement);
    }

    for (String statement : generateDropStatementsForObjectType("VIEW", "CASCADE CONSTRAINTS")) {
      jdbcTemplate.execute(statement);
    }

    for (Table table : allTables()) {
      table.drop();
    }

    for (String statement : generateDropStatementsForXmlTables()) {
      jdbcTemplate.execute(statement);
    }

    for (String statement : generateDropStatementsForObjectType("TYPE", "FORCE")) {
      jdbcTemplate.execute(statement);
    }
  }