package com.venky.swf.db.jdbc;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.util.HashMap;
import java.util.Map;
import com.venky.swf.db.Database;
/**
* Created by venky on 22/5/16.
*/
public class SWFSavepoint implements Savepoint{
private static int savepointId = 0;
private String savepointName;
public SWFSavepoint(String name){
savepointId++;
savepointName = name;
}
public int getSavepointId() throws SQLException {
return savepointId;
}
public String getSavepointName() throws SQLException {
return savepointName;
}
private Map<String,Savepoint> savepointMap = new HashMap<String, Savepoint>();
public void addSavepoint(String pool) throws SQLException{
if (!savepointMap.containsKey(pool)){
if (Database.getJdbcTypeHelper(pool).isSavepointManagedByJdbc()){
Savepoint pt = Database.getInstance().getConnection(pool).setSavepoint();
savepointMap.put(pool,pt);
}else {
Database.getInstance().createStatement(pool,Database.getJdbcTypeHelper(pool).getEstablishSavepointStatement(getSavepointName())).execute();
savepointMap.put(pool,null);
}
}
}
public void removeSavepoint(String pool) throws SQLException{
Savepoint pt = savepointMap.remove(pool);
if (Database.getJdbcTypeHelper(pool).isSavepointManagedByJdbc()) {
if (pt != null) Database.getInstance().getConnection(pool).releaseSavepoint(pt);
}else {
Database.getInstance().createStatement(pool,Database.getJdbcTypeHelper(pool).getReleaseSavepointStatement(getSavepointName())).execute();
}
}
public void rollback(String pool) throws SQLException {
Savepoint pt = savepointMap.remove(pool);
if (Database.getJdbcTypeHelper(pool).isSavepointManagedByJdbc()) {
Database.getInstance().getConnection(pool).rollback(pt);
} else {
Database.getInstance().createStatement(pool,Database.getJdbcTypeHelper(pool).getRollbackToSavepointStatement(getSavepointName())).execute();
}
}
}