package org.n3r.eql;
import com.google.common.base.Throwables;
import lombok.SneakyThrows;
import org.junit.BeforeClass;
import org.junit.Test;
import org.n3r.eql.util.Closes;
import java.sql.Timestamp;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
public class TransactionTest {
@BeforeClass
public static void beforeClass() {
new Eql().id("dropTestTable").execute();
new Eql().id("createTestTable").params(new Timestamp(1383122146000l)).execute();
}
@Test
public void testRollback() {
new Eql().id("addBean").params(11000, "bingoo", new Timestamp(1383122146000l)).execute();
String str = new Eql().selectFirst("getBean").params(11000).execute();
assertThat(str, is("bingoo"));
rollback(11000, "dingoo");
str = new Eql().selectFirst("getBean").params(11000).execute();
assertThat(str, is("bingoo"));
}
@Test
public void testCommit() {
new Eql().id("addBean").params(21000, "bingoo", new Timestamp(1383122146000l)).execute();
String str = new Eql().selectFirst("getBean").params(21000).execute();
assertThat(str, is("bingoo"));
commit(21000, "dingoo");
str = new Eql().selectFirst("getBean").params(21000).execute();
assertThat(str, is("dingoo"));
}
private void rollback(int a, String b) {
EqlTran tran = new Eql().newTran();
try {
tran.start();
new Eql().useTran(tran)
.update("updateBean")
.params(a, b)
.execute();
tran.rollback();
} catch (Exception ex) {
tran.rollback();
Throwables.propagate(ex);
} finally {
Closes.closeQuietly(tran);
}
}
@SneakyThrows
private void commit(int a, String b) {
EqlTran tran = new Eql().newTran();
try {
tran.start();
new Eql().useTran(tran)
.update("updateBean")
.params(a, b)
.execute();
tran.commit();
} catch (Exception ex) {
tran.rollback();
throw ex;
} finally {
Closes.closeQuietly(tran);
}
}
}