#1405 - ENH: add findSingleDecimal() and findSingleLong() alias methods for SqlQuery.findSingleAttribute() ...

This commit is contained in:
rob bygrave
2018-06-08 02:19:36 +12:00
parent 7cbae758fc
commit 42f0b419e8
3 changed files with 58 additions and 1 deletions
+17
View File
@@ -3,6 +3,7 @@ package io.ebean;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
@@ -147,6 +148,22 @@ public interface SqlQuery extends Serializable {
*/
<T> T findSingleAttribute(Class<T> attributeType);
/**
* Execute the query returning a single BigDecimal value.
* <p>
* This is an alias for <code>findSingleAttribute(BigDecimal.class)</code>
* </p>
*/
BigDecimal findSingleDecimal();
/**
* Execute the query returning a single Long value.
* <p>
* This is an alias for <code>findSingleAttribute(Long.class)</code>
* </p>
*/
Long findSingleLong();
/**
* Execute the query returning a list of scalar attribute values.
*
@@ -7,6 +7,7 @@ import io.ebeaninternal.api.BindParams;
import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.api.SpiSqlQuery;
import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
@@ -61,6 +62,16 @@ public class DefaultRelationalQuery implements SpiSqlQuery {
return server.findList(this, null);
}
@Override
public BigDecimal findSingleDecimal() {
return server.findSingleAttribute(this, BigDecimal.class);
}
@Override
public Long findSingleLong() {
return server.findSingleAttribute(this, Long.class);
}
@Override
public <T> T findSingleAttribute(Class<T> cls) {
return server.findSingleAttribute(this, cls);
@@ -39,7 +39,21 @@ public class SqlQueryTests extends BaseTestCase {
}
@Test
public void findSingleAttribute_decimal() {
public void findSingleDecimal() {
ResetBasicData.reset();
String sql = "select max(unit_price) from o_order_detail where order_qty > ?";
BigDecimal maxPrice = Ebean.createSqlQuery(sql)
.setParameter(1, 2)
.findSingleDecimal();
assertThat(maxPrice).isNotNull();
}
@Test
public void findSingleAttribute_BigDecimal() {
ResetBasicData.reset();
@@ -52,6 +66,21 @@ public class SqlQueryTests extends BaseTestCase {
assertThat(maxPrice).isNotNull();
}
@Test
public void findSingleLong() {
ResetBasicData.reset();
String sql = "select count(order_qty) from o_order_detail where unit_price > ?";
long count = Ebean.createSqlQuery(sql)
.setParameter(1, 2)
.findSingleLong();
assertThat(count).isGreaterThan(0);
}
@Test
public void findSingleAttribute_long() {