@Test public void chainedTransaction() { DB<List<String>> readInserted = insertKeysOp(asList("a", "b", "c")).bind(ids -> { List<P2<Integer, String>> data = ids.zip(list("Pesho", "Gosho", "Dragan")); return insertDataOp(data).bind(whatever -> SELECT_ALL_DATA_OP); }); List<String> result = DB.transact(readInserted); assertThat(result, is(list("Pesho", "Gosho", "Dragan"))); }
@Test public void rollback2() { DB<Unit> failedInsert = insertKeysOp(list("ok")) .bind(ids -> insertDataOp(ids.zip(list("description"))).bind(insertCount -> { throw new RuntimeException("failed I have"); })); swallow(() -> DB.transact(failedInsert)); DB<P2<Long, Long>> tryCounts = COUNT_IDS.bind(idCount -> COUNT_DATA.map(dataCount -> p(idCount, dataCount))); P2<Long, Long> counts = DB.submit(tryCounts); assertEquals(0, (long) counts._1()); assertEquals(0, (long) counts._2()); }