#996 Add findOne() and findOneOrEmpty()

This commit is contained in:
rob bygrave
2017-05-19 23:38:40 +12:00
parent c1bed9f578
commit db298a349e
20 changed files with 78 additions and 51 deletions
@@ -33,7 +33,7 @@ public class BeanPostLoadTest extends BaseTestCase {
EBasicVer found = ebeanServer.find(EBasicVer.class)
.select("name, other")
.setId(bean.getId())
.findUnique();
.findOne();
assertThat(postLoad.methodsCalled).hasSize(1);
assertThat(postLoad.methodsCalled).containsExactly("postLoad");
@@ -1,31 +1,6 @@
package io.ebeaninternal.api;
import io.ebean.AutoTune;
import io.ebean.BackgroundExecutor;
import io.ebean.BeanState;
import io.ebean.CallableSql;
import io.ebean.DocumentStore;
import io.ebean.ExpressionFactory;
import io.ebean.Filter;
import io.ebean.FutureIds;
import io.ebean.FutureList;
import io.ebean.FutureRowCount;
import io.ebean.PagedList;
import io.ebean.PersistenceContextScope;
import io.ebean.Query;
import io.ebean.QueryIterator;
import io.ebean.SqlQuery;
import io.ebean.SqlRow;
import io.ebean.SqlUpdate;
import io.ebean.Transaction;
import io.ebean.TransactionCallback;
import io.ebean.TxCallable;
import io.ebean.TxRunnable;
import io.ebean.TxScope;
import io.ebean.Update;
import io.ebean.UpdateQuery;
import io.ebean.ValuePair;
import io.ebean.Version;
import io.ebean.*;
import io.ebean.bean.BeanCollection;
import io.ebean.bean.CallStack;
import io.ebean.bean.EntityBeanIntercept;
@@ -43,7 +18,6 @@ import io.ebeaninternal.server.core.timezone.DataTimeZone;
import io.ebeaninternal.server.deploy.BeanDescriptor;
import io.ebeaninternal.server.query.CQuery;
import io.ebeaninternal.server.transaction.RemoteTransactionEvent;
import io.ebean.TxIsolation;
import javax.persistence.OptimisticLockException;
import javax.persistence.PersistenceException;
@@ -51,6 +25,7 @@ import java.lang.reflect.Type;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -565,6 +540,16 @@ public class TDSpiEbeanServer implements SpiEbeanServer {
return null;
}
@Override
public <T> T findOne(Query<T> query, Transaction transaction) {
return null;
}
@Override
public <T> Optional<T> findOneOrEmpty(Query<T> query, Transaction transaction) {
return null;
}
@Override
public <T> T findUnique(Query<T> query, Transaction transaction) {
return null;
@@ -27,7 +27,7 @@ public class WriteJsonDirtyTest {
Customer customer = Ebean.find(Customer.class).setId(customers.get(0).getId())
.setUseCache(false)
.findUnique();
.findOne();
SpiEbeanServer server = (SpiEbeanServer) Ebean.getServer(null);
BeanDescriptor<Customer> descriptor = server.getBeanDescriptor(Customer.class);
@@ -54,7 +54,7 @@ public class JdbcTransactionTest {
contactNatKeyCache.getStatistics(true);
Customer.find.byId(19898989);
Ebean.find(Contact.class).where().eq("email", "junk@foo.com").findUnique();
Ebean.find(Contact.class).where().eq("email", "junk@foo.com").findOne();
assertThat(customerBeanCache.getStatistics(true).getMissCount()).isEqualTo(1);
assertThat(contactNatKeyCache.getStatistics(true).getMissCount()).isEqualTo(1);
@@ -64,7 +64,7 @@ public class JdbcTransactionTest {
// these don't hit L2 cache due to the save of b1
Customer.find.byId(29898989);
Ebean.find(Contact.class).where().eq("email", "junk2@foo.com").findUnique();
Ebean.find(Contact.class).where().eq("email", "junk2@foo.com").findOne();
assertThat(customerBeanCache.getStatistics(true).getMissCount()).isEqualTo(0);
assertThat(contactNatKeyCache.getStatistics(true).getMissCount()).isEqualTo(0);
@@ -21,7 +21,7 @@ public class AutofetchEmbeddedTest extends BaseTestCase {
testBean.getEmbeddable().setDescription("test description");
Ebean.save(testBean);
EMain partialBean = Ebean.find(EMain.class).select("version").setId(testBean.getId()).findUnique();
EMain partialBean = Ebean.find(EMain.class).select("version").setId(testBean.getId()).findOne();
logger.info(" -- invoke lazy loading of embedded bean");
Eembeddable embeddable = partialBean.getEmbeddable();
@@ -47,7 +47,7 @@ public class TunedQueryInfoTest extends BaseTestCase {
tunedInfo.tuneQuery((SpiQuery<?>) query);
Order order = query.findUnique();
Order order = query.findOne();
EntityBean eb = (EntityBean) order;
EntityBeanIntercept ebi = eb._ebean_getIntercept();
@@ -76,7 +76,7 @@ public class TunedQueryInfoTest extends BaseTestCase {
LoggedSqlCollector.start();
Order order = query.findUnique();
Order order = query.findOne();
EntityBean eb = (EntityBean) order;
EntityBeanIntercept ebi = eb._ebean_getIntercept();
@@ -119,7 +119,7 @@ public class TunedQueryInfoTest extends BaseTestCase {
LoggedSqlCollector.start();
Order order = query.findUnique();
Order order = query.findOne();
EntityBean eb = (EntityBean) order;
EntityBeanIntercept ebi = eb._ebean_getIntercept();
@@ -154,7 +154,7 @@ public class TunedQueryInfoTest extends BaseTestCase {
LoggedSqlCollector.start();
Order order = query.findUnique();
Order order = query.findOne();
EntityBean eb = (EntityBean) order;
EntityBeanIntercept ebi = eb._ebean_getIntercept();
@@ -35,7 +35,7 @@ public class TunedQueryWithNullFetchedBeanTest extends BaseTestCase {
LoggedSqlCollector.start();
Customer customer = query.findUnique();
Customer customer = query.findOne();
EntityBean eb = (EntityBean) customer;
EntityBeanIntercept ebi = eb._ebean_getIntercept();
@@ -19,7 +19,7 @@ public class TestDeleteImportedPartial extends BaseTestCase {
Integer contentId = persistentFile.getFileContent().getId();
PFile partialPfile = Ebean.find(PFile.class).select("id").where().idEq(persistentFile.getId())
.findUnique();
.findOne();
// should delete file and fileContent
Ebean.delete(partialPfile);
@@ -20,7 +20,7 @@ public class TestDeletePartialNoVersion extends BaseTestCase {
TMapSuperEntity e2 = Ebean.find(TMapSuperEntity.class)
.where().idEq(e.getId())
.select("id, name")
.findUnique();
.findOne();
Assert.assertNotNull(e2);
@@ -42,7 +42,7 @@ public class TestDeletePartialNoVersion extends BaseTestCase {
TMapSuperEntity e2 = Ebean.find(TMapSuperEntity.class)
.where().idEq(e.getId())
.select("id, name, version")
.findUnique();
.findOne();
Assert.assertNotNull(e2);
@@ -27,7 +27,7 @@ public class TestLazyLoadEmptyOneToMany extends BaseTestCase {
.select("id")
.fetch("contacts", "id")
.where().idEq(c.getId())
.findUnique();
.findOne();
List<Contact> contacts = c1.getContacts();
int sz = contacts.size();
@@ -37,7 +37,7 @@ public class TestLazyLoadInCache extends BaseTestCase {
Customer cust1B = Ebean.find(Customer.class)
.setReadOnly(true)
.setId(id)
.findUnique();
.findOne();
assertTrue(cust1 != cust1B);
@@ -20,7 +20,7 @@ public class TestMappedSuper extends BaseTestCase {
TMapSuperEntity e2 = Ebean.find(TMapSuperEntity.class)
.where().idEq(e.getId())
.select("id, name, myint, someObject, bananan")
.findUnique();
.findOne();
Assert.assertNotNull(e2);
@@ -63,7 +63,7 @@ public class TestPersistenceContext extends BaseTestCase {
Customer customer = Ebean.find(Customer.class)
.setUseCache(false)
.setId(id)
.findUnique();
.findOne();
System.gc();
Order order2 = Ebean.find(Order.class, orderId);
@@ -63,7 +63,7 @@ public class TestQueryForUpdate extends BaseTestCase {
.where().idEq(first.getId())
.forUpdateNoWait();
server.findUnique(query2, txn2);
server.findOne(query2, txn2);
assertTrue(false); // never get here
} catch (AcquireLockException e) {
logger.info("... got AcquireLockException " + e);
@@ -49,7 +49,7 @@ public class TestQueryWithCache extends BaseTestCase {
Country nz3 = Ebean.find(Country.class, "NZ");
Country nz4 = Ebean.find(Country.class).setId("NZ").setAutoTune(false).setUseCache(false)
.findUnique();
.findOne();
assertTrue(nz2 == nz2b);
assertTrue(nz2 == nz3);
@@ -65,7 +65,7 @@ public class TestQueryWithCache extends BaseTestCase {
Ebean.find(Country.class, "NZ");
Query<Country> query = Ebean.find(Country.class).setId("NZ").setUseCache(false);
query.findUnique();
query.findOne();
assertThat(query.getGeneratedSql()).isNotNull();
}
@@ -27,7 +27,7 @@ public class TestReadOnlyPropagation extends BaseTestCase {
.setUseCache(false)
.setReadOnly(true)
.setId(1)
.findUnique();
.findOne();
Assert.assertTrue(Ebean.getBeanState(order).isReadOnly());
@@ -30,7 +30,7 @@ public class TestSharedInstancePropagation extends BaseTestCase {
.setAutoTune(false)
.setReadOnly(true)
.setId(1)
.findUnique();
.findOne();
assertNotNull(order);
@@ -18,7 +18,7 @@ public class TestTransient extends BaseTestCase {
Ebean.save(cnew);
Integer custId = cnew.getId();
Customer c = Ebean.find(Customer.class).setAutoTune(false).setId(custId).findUnique();
Customer c = Ebean.find(Customer.class).setAutoTune(false).setId(custId).findOne();
Assert.assertNotNull(c);
@@ -27,7 +27,7 @@ public class TestWhereAnnotation extends BaseTestCase {
Query<Customer> q1 = Ebean.find(Customer.class).setUseCache(false).fetch("orders").where()
.idEq(1).query();
q1.findUnique();
q1.findOne();
String s1 = q1.getGeneratedSql();
Assert.assertTrue(s1.contains("t1.order_date is not null"));
}
@@ -0,0 +1,42 @@
package org.tests.query;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import org.junit.Test;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import java.util.Optional;
import static org.assertj.core.api.StrictAssertions.assertThat;
public class TestFindOneOrEmpty extends BaseTestCase {
@Test
public void empty() {
Optional<Customer> willBeEmpty = Ebean.find(Customer.class)
.setId(Integer.MAX_VALUE)
.findOneOrEmpty();
assertThat(willBeEmpty).isEmpty();
}
@Test
public void notEmpty() {
ResetBasicData.reset();
Optional<Customer> customer = Ebean.find(Customer.class)
.setId(1)
.findOneOrEmpty();
assertThat(customer.isPresent()).isTrue();
customer.ifPresent(customer1 -> {
String name = customer1.getName();
assertThat(name).isNotEmpty();
});
}
}