public EffectOp(String sql) { this.op = new UpdateOp(sql, NO_BINDER); }
private static UpdateOp insertSingleChar(String dummy) { return new UpdateOp("INSERT INTO MySqlTest_IDS(DUMMY) VALUES (?)", (stmt) -> stmt.setString(1, dummy)); }
public static DB<Integer> insertStuff(String description) { // an UpdateOp takes SQL, and a binder. It returns an update count // a binder is a piece of code which takes a prepared statement, and returns nothing. // it is so called because it binds the prepared statement parameters return new UpdateOp( "INSERT INTO STUFF(DESCRIPTION) VALUES(?)", // bind the single parameter of the statement ps -> ps.setString(1, description) ); }
private DB<Integer> insert(String x) { return new UpdateOp("INSERT INTO BAR VALUES(?)", ps -> ps.setString(1, x)); }
private DB<Integer> insert(String x) { return new UpdateOp("INSERT INTO BAR VALUES(?)", ps -> ps.setString(1, x)); }
@Override public void migrate(Connection c) throws Exception { new UpdateOp("INSERT INTO FLYWAY.FOO (DESCRIPTION) VALUES (?)", ps -> ps.setString(1, "description 3")).run(c); } }
public static DB<Unit> insertUser(String email, String pass) { return new UpdateOp( "INSERT INTO USERS(EMAIL, PASSWORD_HASH) VALUES(?, ?)", ps -> { ps.setString(1, email); ps.setString(2, hash(pass)); } ).map(ignore -> Unit.unit()); }
@Test public void shouldSupportWhereSelects() throws ExecutionException, InterruptedException { //CREATE TABLE MySqlTest_EXPIRING_STUFF (ID INTEGER PRIMARY KEY AUTO_INCREMENT, DESCRIPTION VARCHAR(100),STAMP BIGINT)" UpdateOp insert = new UpdateOp("INSERT INTO MySqlTest_EXPIRING_STUFF(DESCRIPTION,STAMP) VALUES (?,?)", (stmt) -> { stmt.setString(1, "a"); stmt.setLong(2, 1L); }); final DB<List<String>> selectOp = insert .bind(ignore -> new SelectOp.FjList<>("SELECT * FROM MySqlTest_EXPIRING_STUFF WHERE STAMP < ? ", (stmt) -> stmt.setLong(1, 2L), resultSet -> resultSet.getString(2))); List<String> result = DB.submit(selectOp); assertEquals(list("a"), result); }
@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 iterableBinder() { List<P2<String, String>> data = arrayList(p("x1", "y1"), p("x2", "y2"), p("x3", "y3")); String sql = format( "INSERT INTO MySqlTest_FOO(X,Y) VALUES ({0})", SqlStringUtils.placeholderRows(data.length(), 2) ); UpdateOp insert = new UpdateOp( sql, Binders.iterableBinder((pos, ps, x) -> { int currentPosition = pos; ps.setString(currentPosition++, x._1()); ps.setString(currentPosition++, x._2()); return currentPosition; }, data) ); int updateCount = DB.transact(insert); assertThat(updateCount, is(3)); List<P2<String, String>> readData = DB.submit(new SelectOp.FjList<>("SELECT X,Y FROM MySqlTest_FOO", NO_BINDER, rs -> p(rs.getString(1), rs.getString(2)))); assertThat(readData, is(data)); }
dbi.submit(new UpdateOp( "CREATE TABLE FOO (WHATEVER VARCHAR(200))", NO_BINDER