private static DB<Option<String>> selectByUniqueDescOp(String desc) { return DbOps.unique(new SelectOp.FjList<>("SELECT * FROM MySqlTest_DATA WHERE DESCRIPTION=?", (preparedStatement) -> preparedStatement.setString(1, desc), resultSet -> resultSet.getString(2))); }
public static DB<Option<Stuff>> selectByKey(int id) { //given a regular operation which returns an iterable: DB<List<Stuff>> temp = new SelectOp.FjList<>( "SELECT ID, DESCRIPTION FROM STUFF WHERE ID=?", ps -> ps.setInt(1, id), rs -> new Stuff(rs.getInt(1), rs.getString(2))); // using the unique() function, // we can convert it to an operation which expects at most one result, and returns that optional result: return unique(temp); }
private static DB<Option<User>> selectUser(String email) { return unique(new SelectOp.FjList<>( "SELECT * FROM USERS WHERE EMAIL=?", ps -> ps.setString(1, email), rs -> new User(rs.getString(1), rs.getString(2)) )); }
@Test public void insertGenKeys() { Integer id = DB.transact(new InsertGenKeysOp.Int( "INSERT INTO MySqlTest_IDS(DUMMY) VALUES (?)", ps -> ps.setString(1, "a"))); assertThat(id, is(notNullValue())); String str = DB.submit(DbOps .unique(new SelectOp.List<>("SELECT DUMMY FROM MySqlTest_IDS WHERE ID=?", ps -> ps.setInt(1, id), rs -> rs.getString(1)))).some(); assertThat(str, is("a")); }
@Test public void nextValFromSequence() { DB.submit(new EffectOp("CREATE SEQUENCE MY_SEQ START WITH 1 MINVALUE 1")); final Option<Long> firstValFromSeqOp = DB.submit(unique(new SelectOp.FjList<>("call NEXT VALUE FOR MY_SEQ", NO_BINDER, rs -> rs.getLong(1)))); assertThat(firstValFromSeqOp.some(), is(1L)); final Option<Long> secondsValFromSeqOp = DB.submit(unique(new SelectOp.FjList<>("call NEXT VALUE FOR MY_SEQ", NO_BINDER, rs -> rs.getLong(1)))); assertThat(secondsValFromSeqOp.some(), is(2L)); }