public static DB<Long> count(String like) { String searchQuery = like.trim(); //an aggregate op expects the resultset to have one element, and that element to be cast to long //useful for numeric aggregate operations return new AggregateOp("SELECT COUNT(*) FROM STUFF WHERE LOWER(DESCRIPTION) LIKE LOWER(?)", ps -> ps.setString(1, searchQuery + "%") ); }
@Test public void rollback() { DB<List<Long>> insertDataFail = insertKeysOp(list("okidoki")).bind(ids -> fail("failed i have")); swallow(() -> DB.transact(insertDataFail)); 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()); }
@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()); }
@Test public void checkMigrationsAreApplied() { SyncDbInterpreter dbi = new SyncDbInterpreter( // provide a piece of code which knows how to spawn connections // in this case we are just using the DriverManager () -> DriverManager.getConnection(FLYWAY_JDBC_URL, "sa", "") ); // check that after flyway migrations are applied the count of FOO is 3 final Long count = dbi.submit(new AggregateOp("SELECT COUNT(*) FROM FLYWAY.FOO")); assertThat(count, is(3L)); }
Long count = sync.submit(new AggregateOp("SELECT COUNT(*) FROM DUMMY")); assertThat(count, is(1L)); count = sync.submit(new AggregateOp("SELECT COUNT(*) FROM DUMMY")); Validation<Exception, Long> successExpected = vdb.submit(new AggregateOp("SELECT COUNT(*) FROM DUMMY")).f(); assertThat(successExpected.isSuccess(), is(true)); assertThat(successExpected.success(), is(1L)); CompletableFuture<Long> countFuture = async.submit(new AggregateOp("SELECT COUNT(*) FROM DUMMY")); CompletableFuture<Long> failedFuture = async.submit(new AggregateOp("BLA BLA BLA"));