package squill.tests;
import static java.util.Arrays.asList;
import static junit.framework.Assert.assertEquals;
import static squill.functions.Operations.concat;
import static squill.functions.Operations.eq;
import static squill.tuple.Tuple2._;
import static squill.tests.TestUtil.date;
import java.util.Date;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import squill.Squill;
import squill.builder.ResultBuilder;
import squill.callback.ResultCallback;
import squill.db.Database;
import squill.tuple.Tuple1;
import squill.tuple.Tuple2;
import squill.model.CustomerData.CustomerTable;
public class CallbackSelectTest {
private Squill squill;
private static final Tuple2<String, Date> EXPECTED = _("Tooth Fairy", date("0003-02-18"));
private final CustomerTable customer = new CustomerTable();
@Test
public void callbackSelect2() {
List<Void> result =
squill
.from(customer)
.where(eq(customer.id, 1))
.selectCallback(concat(customer.firstName, " ", customer.lastName), customer.birthdate,
new ResultCallback<Tuple2<String, Date>, Void>() {
public Void handle(Tuple2<String, Date> tuple, Status status) {
assertEquals(EXPECTED, tuple);
assertEquals(0, status.getRow());
return null;
}
});
assertEquals("result", 1, result.size());
}
@Test
public void callbackSelect1() {
List<Void> result =
squill
.from(customer)
.where(eq(customer.id, 1))
.selectCallback(concat(customer.firstName, " ", customer.lastName),
new ResultCallback<String, Void>() {
public Void handle(String name, Status status) {
assertEquals(EXPECTED.v1, name);
assertEquals(0, status.getRow());
return null;
}
});
assertEquals("result", 1, result.size());
}
@Test
public void selectAs() {
List<Void> result =
squill
.from(customer)
.where(eq(customer.id, 1))
.selectAs(concat(customer.firstName, " ", customer.lastName),
customer.birthdate).map(
new ResultCallback<Tuple2<String, Date>, Void>() {
public Void handle(Tuple2<String, Date> tuple, Status status) {
assertEquals(EXPECTED, tuple);
assertEquals(0, status.getRow());
return null;
}
});
assertEquals("result", 1, result.size());
}
@Test
public void multipleSelectAs() {
final ResultBuilder<Tuple2<String,Date>> select = squill
.from(customer)
.where(eq(customer.id, 1))
.selectAs(concat(customer.firstName, " ", customer.lastName), customer.birthdate);
// multiple usages
assertEquals("count",1,select.count());
assertEquals("tuple", EXPECTED,select.tuple());
assertEquals("list",asList(EXPECTED),select.list());
TestUtil.assertRegexp("sql","SELECT t0.FIRST_NAME \\|\\| ' ' \\|\\| t0.LAST_NAME AS e0, t0.BIRTHDATE AS t0_c0 FROM customer t0 WHERE \\(t0.ID = \\?\\)",select.toString());
List<Void> callbackResult =
select.map(
new ResultCallback<Tuple2<String, Date>, Void>() {
public Void handle(Tuple2<String, Date> tuple, Status status) {
assertEquals(EXPECTED, tuple);
assertEquals(0, status.getRow());
return null;
}
});
assertEquals("callback", 1, callbackResult.size());
}
@Test
public void abortFetch() {
final ResultBuilder<Tuple1<String>> select = squill
.from(customer)
.where()
.selectAs(customer.lastName);
final List<String> result = select.map(new ResultCallback<Tuple1<String>, String>() {
public String handle(final Tuple1<String> tuple, final Status status) {
if (status.getRow()==1) status.abort();
return tuple.v1;
}
});
assertEquals("count not 4",2,result.size());
assertEquals(asList("Fairy","Devil"),result);
assertEquals("count ",4,select.count());
}
@Before
public void setUp() throws Exception {
final Database database = TestUtil.getDefaultHsqlDatabase();
squill = new Squill(database);
}
@After
public void tearDown() {
TestUtil.shutDownHsql();
}
}