/** * Shorthand of sequence() that returns an fj.data.List */ public static <A> DB<fj.data.List<A>> sequence(Iterable<DB<A>> xs) { return sequence(xs, fjListCanBuildFrom()); }
@After public void cleanup() { SyncDbInterpreter dbi = new SyncDbInterpreter( () -> DriverManager.getConnection("jdbc:hsqldb:mem:DescribeVsInterpret", "sa", "") ); DB<List<String>> selectAllTables = new SelectOp.FjList<>( "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='DescribeVsInterpret'", NO_BINDER, rs -> rs.getString(1) ); DB<Unit> dropAllTables = selectAllTables .bind(tables -> sequence(tables.map(tableName -> new UpdateOp(format("DROP TABLE {0}", tableName), NO_BINDER)), fjListCanBuildFrom())) .map(ignore -> Unit.unit()); dbi.submit(dropAllTables); } }
@Test public void testIt() { SyncDbInterpreter dbi = new SyncDbInterpreter( () -> DriverManager.getConnection("jdbc:hsqldb:mem:test", "sa", "") ); //given an iterable of DB's List<DB<String>> dbList = arrayList( DB.unit("foo"), DB.unit("bar"), DB.unit("baz") ); //we can treat it as a DB<List> DB<List<String>> db = sequence(dbList); List<String> result = dbi.submit(db); assertThat(result, is(arrayList("foo", "bar", "baz"))); } }
@BeforeClass public static void setupSuite() { fj.control.db.DB<Unit> createSchema = sequence( arrayList(new EffectOp("CREATE TABLE MySqlTest_IDS (ID INTEGER PRIMARY KEY IDENTITY, DUMMY CHAR)"), new EffectOp("CREATE TABLE MySqlTest_DATA (ID INTEGER PRIMARY KEY, DESCRIPTION VARCHAR(100))"), new EffectOp("CREATE TABLE MySqlTest_EXPIRING_STUFF (ID INTEGER PRIMARY KEY IDENTITY," + " DESCRIPTION VARCHAR(100), STAMP BIGINT)"), new EffectOp("CREATE TABLE MySqlTest_FOO (X VARCHAR (100), Y VARCHAR(100))") )).map(ignore -> Unit.unit()); DB.transact(createSchema); }
@Test public void dbSequence() { DB.transact(insertDataOp(arrayList(p(1, "foo"), p(2, "bar"), p(3, "zzz")))); List<DB<Option<String>>> dbs = arrayList(selectByUniqueDescOp("foo"), selectByUniqueDescOp("zzz"), selectByUniqueDescOp("no_such")); List<Option<String>> result = DB.submit(sequence(dbs, fjListCanBuildFrom())); assertThat(result, is(arrayList(some("foo"), some("zzz"), none()))); }