@Override public void beginTransaction() { checkIsNotClosed(); myOriginalSession.beginTransaction(); }
@Override public synchronized void close() { final DBLeasedSession theSessionToClose = myOriginalSession; myOriginalSession = null; if (theSessionToClose != null) theSessionToClose.close(); }
@Override public void commit() { checkIsNotClosed(); myOriginalSession.commit(); }
@Test public void isInTransaction_begin_rollback() { final DBLeasedSession session = myFacade.leaseSession(); try { assertThat(session.isInTransaction()).isFalse(); session.beginTransaction(); assertThat(session.isInTransaction()).isTrue(); session.rollback(); assertThat(session.isInTransaction()).isFalse(); } finally { session.close(); } }
@Test public void isInTransaction_begin_commit() { final DBLeasedSession session = myFacade.leaseSession(); try { assertThat(session.isInTransaction()).isFalse(); session.beginTransaction(); assertThat(session.isInTransaction()).isTrue(); session.commit(); assertThat(session.isInTransaction()).isFalse(); } finally { session.close(); } }
@Test public void transaction_commit() { TH.ensureNoTableOrView("Tab_1"); TH.performCommand("create table Tab_1 (C1 char(1))"); TH.performCommand("insert into Tab_1 values ('A')"); DBLeasedSession session = DB.leaseSession(); try { assertThat(TH.countTableRows(session, "Tab_1")).isEqualTo(1); session.beginTransaction(); session.command("insert into Tab_1 values ('B')").run(); assertThat(TH.countTableRows(session, "Tab_1")).isEqualTo(2); session.commit(); assertThat(TH.countTableRows(session, "Tab_1")).isEqualTo(2); } finally { session.close(); } }
@Test public void transaction_rollback() { TH.ensureNoTableOrView("Tab_1"); TH.performCommand("create table Tab_1 (C1 char(1) not null)"); TH.performCommand("insert into Tab_1 values ('A')"); DBLeasedSession session = DB.leaseSession(); try { assertThat(TH.countTableRows(session, "Tab_1")).isEqualTo(1); session.beginTransaction(); session.command("insert into Tab_1 values ('B')").run(); assertThat(TH.countTableRows(session, "Tab_1")).isEqualTo(2); session.rollback(); assertThat(TH.countTableRows(session, "Tab_1")).isEqualTo(1); } finally { session.close(); } }
@Test public void wrap_connection_ownership() throws SQLException { final Connection connection = obtainConnection(); assertThat(connection.isClosed()).isFalse(); final DBLeasedSession session = JdbcSessions.wrap(connection, provider, true); assertThat(session.isClosed()).isFalse(); session.close(); assertThat(session.isClosed()).isTrue(); assertThat(connection.isClosed()).isTrue(); }
@Override public void rollback() { if (myOriginalSession == null) return; myOriginalSession.rollback(); }
@Override public long ping() { checkIsNotClosed(); return myOriginalSession.ping(); }
@Override @NotNull public synchronized DBCommandRunner command(@NotNull final String commandText) { checkIsNotClosed(); return myOriginalSession.command(commandText); }
@Override public synchronized boolean isClosed() { return myOriginalSession == null || myOriginalSession.isClosed(); }
@Override public boolean isInTransaction() { return myOriginalSession != null && myOriginalSession.isInTransaction(); }
@Override @Nullable public synchronized <I> I getSpecificService(@NotNull final Class<I> serviceClass, @NotNull @MagicConstant(valuesFromClass = Names.class) final String serviceName) throws ClassCastException { checkIsNotClosed(); return myOriginalSession.getSpecificService(serviceClass, serviceName); }
@Test public void wrap_connection_not_own() throws SQLException { final Connection connection = obtainConnection(); assertThat(connection.isClosed()).isFalse(); final DBLeasedSession session = JdbcSessions.wrap(connection, provider, false); assertThat(session.isClosed()).isFalse(); session.close(); assertThat(session.isClosed()).isTrue(); assertThat(connection.isClosed()).isFalse(); connection.close(); assertThat(connection.isClosed()).isTrue(); }
@Override @NotNull public synchronized DBCommandRunner command(@NotNull final SqlCommand command) { checkIsNotClosed(); return myOriginalSession.command(command); }