package org.hivedb.util;
import org.hivedb.Hive;
import org.hivedb.Schema;
import org.hivedb.meta.Node;
import org.hivedb.util.database.DialectTools;
import org.hivedb.util.database.DriverLoader;
import org.hivedb.util.database.Schemas;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* Systematically destroys a given hive
*
* @author mellwanger
*/
public class HiveDestructor {
public void destroy(Hive hive) {
for (Node node : hive.getNodes()) {
destroy(node);
}
Schemas.uninstall(hive.getPartitionDimension());
for (Node node : hive.getNodes()) {
if (!node.getUri().equals(hive.getUri())) {
shutdown(node);
}
}
shutdown(hive);
}
private void destroy(Node node) {
for (Schema schema : Schemas.getDataSchemas(node.getUri())) {
Schemas.uninstall(schema, node.getUri());
}
}
private void shutdown(Hive hive) {
DriverLoader.initializeDriver(hive.getUri());
try {
DriverManager.getConnection(hive.getUri()).createStatement().execute(DialectTools.getDropDatabase(hive.getDialect(), hive.getName()));
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
}
private void shutdown(Node node) {
DriverLoader.initializeDriver(node.getUri());
try {
DriverManager.getConnection(node.getUri()).createStatement().execute(DialectTools.getDropDatabase(node.getDialect(), node.getName()));
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
}
}