From 0c1a9786a3f16b7e64bf560ac78bef0418c26fd9 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Fri, 19 May 2017 23:48:41 +1200 Subject: [PATCH] #996 Add findOne() and findOneOrEmpty() - SqlQuery --- src/main/java/io/ebean/EbeanServer.java | 10 ++++++++++ src/main/java/io/ebean/SqlQuery.java | 11 +++++++++++ .../ebeaninternal/server/core/DefaultServer.java | 5 +++++ .../server/querydefn/DefaultRelationalQuery.java | 13 ++++++++++++- src/test/java/io/ebean/SqlRowBooleanTest.java | 2 +- .../io/ebeaninternal/api/TDSpiEbeanServer.java | 5 +++++ .../java/org/tests/basic/encrypt/TestEncrypt.java | 2 +- .../tests/basic/encrypt/TestEncryptBinary.java | 2 +- .../tests/basic/type/TestEnumValueAnnotation.java | 15 +++++++++------ 9 files changed, 55 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/ebean/EbeanServer.java b/src/main/java/io/ebean/EbeanServer.java index 68a956cd9..769518ca8 100644 --- a/src/main/java/io/ebean/EbeanServer.java +++ b/src/main/java/io/ebean/EbeanServer.java @@ -1177,6 +1177,16 @@ public interface EbeanServer { * @see SqlQuery#findUnique() */ @Nullable + SqlRow findOne(SqlQuery query, Transaction transaction); + + /** + * Synonym for findOne(). + *

+ * This proceeded findOne which was introduced to better match spring data. + * This will be deprecated at some future point. + *

+ */ + @Nullable SqlRow findUnique(SqlQuery query, Transaction transaction); /** diff --git a/src/main/java/io/ebean/SqlQuery.java b/src/main/java/io/ebean/SqlQuery.java index 514dde3d9..e264268c2 100644 --- a/src/main/java/io/ebean/SqlQuery.java +++ b/src/main/java/io/ebean/SqlQuery.java @@ -2,6 +2,7 @@ package io.ebean; import java.io.Serializable; import java.util.List; +import java.util.Optional; import java.util.function.Consumer; import java.util.function.Predicate; @@ -70,6 +71,16 @@ public interface SqlQuery extends Serializable { * PersistenceException. *

*/ + SqlRow findOne(); + + /** + * Execute the query returning an optional row. + */ + Optional findOneOrEmpty(); + + /** + * Synonym for findOne(). + */ SqlRow findUnique(); /** diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index d70e76ac7..88e5659b9 100644 --- a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -1503,6 +1503,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public SqlRow findUnique(SqlQuery query, Transaction t) { + return findOne(query, t); + } + + @Override + public SqlRow findOne(SqlQuery query, Transaction t) { // no findId() method for SqlQuery... // a query that is expected to return either 0 or 1 rows diff --git a/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java b/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java index d6efbeec8..e13ea2d36 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java @@ -6,6 +6,7 @@ import io.ebeaninternal.api.BindParams; import io.ebeaninternal.api.SpiSqlQuery; import java.util.List; +import java.util.Optional; import java.util.function.Consumer; import java.util.function.Predicate; @@ -61,9 +62,19 @@ public class DefaultRelationalQuery implements SpiSqlQuery { return server.findList(this, null); } + @Override + public SqlRow findOne() { + return server.findOne(this, null); + } + + @Override + public Optional findOneOrEmpty() { + return Optional.ofNullable(findOne()); + } + @Override public SqlRow findUnique() { - return server.findUnique(this, null); + return findOne(); } @Override diff --git a/src/test/java/io/ebean/SqlRowBooleanTest.java b/src/test/java/io/ebean/SqlRowBooleanTest.java index c2c7a6f15..aa17fb287 100644 --- a/src/test/java/io/ebean/SqlRowBooleanTest.java +++ b/src/test/java/io/ebean/SqlRowBooleanTest.java @@ -15,7 +15,7 @@ public class SqlRowBooleanTest extends BaseTestCase { } else { sqlQuery = Ebean.createSqlQuery("SELECT 1 IS NOT NULL AS ISNT_NULL"); } - SqlRow row = sqlQuery.findUnique(); + SqlRow row = sqlQuery.findOne(); Boolean value = row.getBoolean("ISNT_NULL"); assertThat(value).isTrue(); } diff --git a/src/test/java/io/ebeaninternal/api/TDSpiEbeanServer.java b/src/test/java/io/ebeaninternal/api/TDSpiEbeanServer.java index c3c51c4fe..6f9f8f228 100644 --- a/src/test/java/io/ebeaninternal/api/TDSpiEbeanServer.java +++ b/src/test/java/io/ebeaninternal/api/TDSpiEbeanServer.java @@ -568,6 +568,11 @@ public class TDSpiEbeanServer implements SpiEbeanServer { public void findEachWhile(SqlQuery query, Predicate consumer, Transaction transaction) { } + @Override + public SqlRow findOne(SqlQuery query, Transaction transaction) { + return null; + } + @Override public SqlRow findUnique(SqlQuery query, Transaction transaction) { return null; diff --git a/src/test/java/org/tests/basic/encrypt/TestEncrypt.java b/src/test/java/org/tests/basic/encrypt/TestEncrypt.java index 48d78a6a1..e155bc821 100644 --- a/src/test/java/org/tests/basic/encrypt/TestEncrypt.java +++ b/src/test/java/org/tests/basic/encrypt/TestEncrypt.java @@ -58,7 +58,7 @@ public class TestEncrypt extends BaseTestCase { SqlQuery q = Ebean.createSqlQuery("select * from e_basicenc where id = :id"); q.setParameter("id", e.getId()); - SqlRow row = q.findUnique(); + SqlRow row = q.findOne(); row.getString("name"); row.get("description"); diff --git a/src/test/java/org/tests/basic/encrypt/TestEncryptBinary.java b/src/test/java/org/tests/basic/encrypt/TestEncryptBinary.java index 6034cdcd3..7378388e0 100644 --- a/src/test/java/org/tests/basic/encrypt/TestEncryptBinary.java +++ b/src/test/java/org/tests/basic/encrypt/TestEncryptBinary.java @@ -27,7 +27,7 @@ public class TestEncryptBinary extends BaseTestCase { SqlQuery q = Ebean.createSqlQuery("select * from e_basicenc_bin where id = :id"); q.setParameter("id", e.getId()); - SqlRow row = q.findUnique(); + SqlRow row = q.findOne(); row.getString("name"); row.get("data"); row.get("some_time"); diff --git a/src/test/java/org/tests/basic/type/TestEnumValueAnnotation.java b/src/test/java/org/tests/basic/type/TestEnumValueAnnotation.java index 0645aeb8d..bfbd785b7 100644 --- a/src/test/java/org/tests/basic/type/TestEnumValueAnnotation.java +++ b/src/test/java/org/tests/basic/type/TestEnumValueAnnotation.java @@ -11,6 +11,8 @@ import org.tests.model.basic.EBasicEnumInt; import org.junit.Assert; import org.junit.Test; +import java.util.Optional; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -28,7 +30,7 @@ public class TestEnumValueAnnotation extends BaseTestCase { SqlQuery q = Ebean.createSqlQuery("select * from e_basic where id = :id"); q.setParameter("id", b.getId()); - SqlRow sqlRow = q.findUnique(); + SqlRow sqlRow = q.findOne(); String strStatus = sqlRow.getString("status"); assertEquals("N", strStatus); @@ -56,7 +58,7 @@ public class TestEnumValueAnnotation extends BaseTestCase { SqlQuery q = Ebean.createSqlQuery("select * from e_basic_enum_id where status = :status"); q.setParameter("status", b.getStatus()); - SqlRow sqlRow = q.findUnique(); + SqlRow sqlRow = q.findOne(); String strStatus = sqlRow.getString("status"); assertEquals("N", strStatus); @@ -82,10 +84,11 @@ public class TestEnumValueAnnotation extends BaseTestCase { SqlQuery q = Ebean.createSqlQuery("select * from e_basic_eni where id = :id"); q.setParameter("id", b.getId()); - SqlRow sqlRow = q.findUnique(); - Integer intStatus = sqlRow.getInteger("status"); - - assertEquals(Integer.valueOf(1), intStatus); + Optional sqlRow = q.findOneOrEmpty(); + sqlRow.ifPresent(sqlRow1 -> { + Integer intStatus = sqlRow1.getInteger("status"); + assertEquals(Integer.valueOf(1), intStatus); + }); EBasicEnumInt b2 = Ebean.find(EBasicEnumInt.class)