diff --git a/src/main/java/io/ebean/SqlQuery.java b/src/main/java/io/ebean/SqlQuery.java index 2adbd67b2..d5a71f232 100644 --- a/src/main/java/io/ebean/SqlQuery.java +++ b/src/main/java/io/ebean/SqlQuery.java @@ -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 findSingleAttribute(Class attributeType); + /** + * Execute the query returning a single BigDecimal value. + *

+ * This is an alias for findSingleAttribute(BigDecimal.class) + *

+ */ + BigDecimal findSingleDecimal(); + + /** + * Execute the query returning a single Long value. + *

+ * This is an alias for findSingleAttribute(Long.class) + *

+ */ + Long findSingleLong(); + /** * Execute the query returning a list of scalar attribute values. * diff --git a/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java b/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java index 5ca2e1075..db4948bcb 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java @@ -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 findSingleAttribute(Class cls) { return server.findSingleAttribute(this, cls); diff --git a/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java b/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java index 3cf065b4b..305cf5a33 100644 --- a/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java +++ b/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java @@ -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() {