#1405 - ENH: Add SqlQuery.findSingleAttribute() ... for returning single scalar values via SqlQuery

This commit is contained in:
rob bygrave
2018-06-07 22:17:01 +12:00
parent eba1003c19
commit ffa8268125
12 changed files with 162 additions and 13 deletions
@@ -457,6 +457,11 @@ public class TDSpiEbeanServer implements SpiEbeanServer {
return null;
}
@Override
public <T> T findSingleAttribute(SpiSqlQuery query, Class<T> cls) {
return null;
}
@Override
public SqlQuery createSqlQuery(String sql) {
return null;
@@ -5,11 +5,14 @@ import io.ebean.Ebean;
import io.ebean.SqlQuery;
import io.ebean.SqlRow;
import org.tests.model.basic.TUuidEntity;
import org.junit.Assert;
import org.junit.Test;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
public class TestSqlRowUUID extends BaseTestCase {
@Test
@@ -26,9 +29,17 @@ public class TestSqlRowUUID extends BaseTestCase {
UUID id = sqlRow.getUUID("id");
Assert.assertNotNull(id);
assertNotNull(id);
Boolean b = sqlRow.getBoolean("name");
Assert.assertFalse(b);
assertFalse(b);
SqlQuery q2 = Ebean.createSqlQuery("select id from tuuid_entity where id = :id");
q2.setParameter("id", e.getId());
UUID value = q2.findSingleAttribute(UUID.class);
assertThat(value).isEqualTo(e.getId());
}
}
@@ -10,6 +10,8 @@ import org.junit.Test;
import org.tests.model.basic.Order;
import org.tests.model.basic.ResetBasicData;
import java.math.BigDecimal;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@@ -18,6 +20,49 @@ import static org.junit.Assert.assertEquals;
public class SqlQueryTests extends BaseTestCase {
@Test
public void findSingleAttribute_decimal() {
ResetBasicData.reset();
String sql = "select max(unit_price) from o_order_detail where order_qty > ?";
BigDecimal maxPrice = Ebean.createSqlQuery(sql)
.setParameter(1, 2)
.findSingleAttribute(BigDecimal.class);
assertThat(maxPrice).isNotNull();
}
@Test
public void findSingleAttribute_long() {
ResetBasicData.reset();
String sql = "select count(order_qty) from o_order_detail where unit_price > ?";
long count = Ebean.createSqlQuery(sql)
.setParameter(1, 2)
.findSingleAttribute(Long.class);
assertThat(count).isGreaterThan(0);
}
@Test
public void findSingleAttribute_OffsetDateTime() {
ResetBasicData.reset();
String sql = "select min(updtime) from o_order_detail where unit_price > ? and updtime is not null";
OffsetDateTime minCreated = Ebean.createSqlQuery(sql)
.setParameter(1, 2)
.findSingleAttribute(OffsetDateTime.class);
assertThat(minCreated).isBefore(OffsetDateTime.now());
}
@Test
public void newline_replacedInLogsOnly() {