mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#919 - io.ebean package initial
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package org.tests.autofetch;
|
||||
|
||||
import io.ebean.BaseTestCase;
|
||||
import io.ebean.Ebean;
|
||||
import org.tests.model.embedded.EMain;
|
||||
import org.tests.model.embedded.Eembeddable;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
||||
public class AutofetchEmbeddedTest extends BaseTestCase {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(AutofetchEmbeddedTest.class);
|
||||
|
||||
@Test
|
||||
public void testEmbeddedBeanLazyLoadAndUpdate() {
|
||||
|
||||
EMain testBean = new EMain();
|
||||
testBean.setName("test");
|
||||
testBean.getEmbeddable().setDescription("test description");
|
||||
Ebean.save(testBean);
|
||||
|
||||
EMain partialBean = Ebean.find(EMain.class).select("version").setId(testBean.getId()).findUnique();
|
||||
|
||||
logger.info(" -- invoke lazy loading of embedded bean");
|
||||
Eembeddable embeddable = partialBean.getEmbeddable();
|
||||
embeddable.setDescription("modified description");
|
||||
|
||||
logger.info(" -- update bean");
|
||||
Ebean.save(partialBean);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEmbeddedBeanQueryTuning() {
|
||||
// Ebean.getServer(null).getAutoTune().setProfiling(true);
|
||||
// Ebean.getServer(null).getAutoTune().setQueryTuning(true);
|
||||
// Ebean.getServer(null).getAutoTune().setProfilingBase(1);
|
||||
//
|
||||
// EMain testBean = new EMain();
|
||||
// testBean.setName("test");
|
||||
// testBean.getEmbeddable().setDescription("test description");
|
||||
// Ebean.save(testBean);
|
||||
//
|
||||
// //This should not throw an exception
|
||||
// for (int i = 0; i < 5; i++) {
|
||||
// Ebean.beginTransaction();
|
||||
// try {
|
||||
// List<EMain> result = Ebean.find(EMain.class).setAutoTune(true).findList();
|
||||
// for (EMain e : result) {
|
||||
// e.getEmbeddable().setDescription("Test" + i);
|
||||
// Ebean.save(e);
|
||||
// }
|
||||
// Ebean.commitTransaction();
|
||||
// } finally {
|
||||
// Ebean.endTransaction();
|
||||
// logger.debug(Ebean.getServer(null).getAutoTune().collectProfiling());
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEmbeddedFetch() {
|
||||
Ebean.find(EMain.class).fetch("embeddable").findList();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package org.tests.autofetch;
|
||||
|
||||
import io.ebean.Ebean;
|
||||
import org.tests.model.basic.EBasicClob;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class MainAutoFetchExcludeLazyLobs {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
EBasicClob a = new EBasicClob();
|
||||
a.setName("name 1");
|
||||
a.setTitle("a title");
|
||||
a.setDescription("not that meaningful");
|
||||
|
||||
Ebean.save(a);
|
||||
|
||||
List<EBasicClob> list = Ebean.find(EBasicClob.class)
|
||||
.setAutoTune(true)
|
||||
.findList();
|
||||
|
||||
for (EBasicClob bean : list) {
|
||||
bean.getName();
|
||||
// although we read the description
|
||||
// autofetch will not include it later
|
||||
bean.getDescription();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package org.tests.autofetch;
|
||||
|
||||
import io.ebean.Ebean;
|
||||
import org.tests.model.basic.Order;
|
||||
import org.tests.model.basic.ResetBasicData;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class MainAutoQueryTune1 {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
MainAutoQueryTune1 me = new MainAutoQueryTune1();
|
||||
me.tuneJoin();
|
||||
}
|
||||
|
||||
private void tuneJoin() {
|
||||
List<Order> list = Ebean.find(Order.class)
|
||||
.setAutoTune(true)
|
||||
.fetch("customer")
|
||||
.where()
|
||||
.eq("status", Order.Status.NEW)
|
||||
.eq("customer.name", "Rob")
|
||||
.order().asc("id")
|
||||
.findList();
|
||||
|
||||
for (Order order : list) {
|
||||
order.getId();
|
||||
order.getOrderDate();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,176 @@
|
||||
package org.tests.autofetch;
|
||||
|
||||
import io.ebean.BaseTestCase;
|
||||
import io.ebean.Ebean;
|
||||
import io.ebean.EbeanServer;
|
||||
import io.ebean.Query;
|
||||
import io.ebean.bean.EntityBean;
|
||||
import io.ebean.bean.EntityBeanIntercept;
|
||||
import io.ebean.cache.ServerCacheManager;
|
||||
import io.ebeaninternal.api.SpiQuery;
|
||||
import io.ebeaninternal.server.autotune.model.Origin;
|
||||
import io.ebeaninternal.server.autotune.service.TunedQueryInfo;
|
||||
import io.ebeaninternal.server.querydefn.OrmQueryDetail;
|
||||
import org.tests.model.basic.Order;
|
||||
import org.tests.model.basic.ResetBasicData;
|
||||
import org.avaje.ebeantest.LoggedSqlCollector;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class TunedQueryInfoTest extends BaseTestCase {
|
||||
|
||||
EbeanServer server = Ebean.getServer(null);
|
||||
|
||||
private void init() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
ServerCacheManager serverCacheManager = Ebean.getServer(null).getServerCacheManager();
|
||||
serverCacheManager.clearAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withSelectEmpty() {
|
||||
|
||||
init();
|
||||
|
||||
OrmQueryDetail tunedDetail = new OrmQueryDetail();
|
||||
tunedDetail.select("");
|
||||
|
||||
TunedQueryInfo tunedInfo = createTunedQueryInfo(tunedDetail);
|
||||
|
||||
Query<Order> query = server.find(Order.class).setId(1);
|
||||
|
||||
tunedInfo.tuneQuery((SpiQuery<?>) query);
|
||||
|
||||
Order order = query.findUnique();
|
||||
EntityBean eb = (EntityBean) order;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
Assert.assertTrue(ebi.isFullyLoadedBean());
|
||||
|
||||
Set<String> loadedPropertyNames = ebi.getLoadedPropertyNames();
|
||||
Assert.assertNull(loadedPropertyNames);
|
||||
|
||||
// invoke lazy loading
|
||||
order.getCustomer();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withSelectSomethingThatDoesNotExist() {
|
||||
|
||||
init();
|
||||
|
||||
OrmQueryDetail tunedDetail = new OrmQueryDetail();
|
||||
tunedDetail.select("somethingThatDoesNotExist");
|
||||
|
||||
TunedQueryInfo tunedInfo = createTunedQueryInfo(tunedDetail);
|
||||
|
||||
Query<Order> query = server.find(Order.class).setId(1);
|
||||
|
||||
tunedInfo.tuneQuery((SpiQuery<?>) query);
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
Order order = query.findUnique();
|
||||
EntityBean eb = (EntityBean) order;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
Assert.assertFalse(ebi.isFullyLoadedBean());
|
||||
|
||||
// id and any ToMany relationships
|
||||
Set<String> loadedPropertyNames = ebi.getLoadedPropertyNames();
|
||||
Assert.assertNotNull(loadedPropertyNames);
|
||||
|
||||
// invoke lazy loading
|
||||
order.getCustomer();
|
||||
|
||||
List<String> loggedSql = LoggedSqlCollector.stop();
|
||||
Assert.assertEquals(2, loggedSql.size());
|
||||
|
||||
Assert.assertTrue(trimSql(loggedSql.get(0), 1).contains("select t0.id, t0.id from o_order t0 where t0.id = ?"));
|
||||
Assert.assertTrue(trimSql(loggedSql.get(1), 1).contains("select t0.id, t0.status,"));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private TunedQueryInfo createTunedQueryInfo(OrmQueryDetail tunedDetail) {
|
||||
Origin origin = new Origin();
|
||||
origin.setDetail(tunedDetail.asString());
|
||||
return new TunedQueryInfo(origin);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withSelectSomeIncludeLazyLoaded() {
|
||||
|
||||
init();
|
||||
|
||||
OrmQueryDetail tunedDetail = new OrmQueryDetail();
|
||||
tunedDetail.select("status, customer");
|
||||
|
||||
TunedQueryInfo tunedInfo = createTunedQueryInfo(tunedDetail);
|
||||
|
||||
Query<Order> query = server.find(Order.class).setId(1);
|
||||
|
||||
tunedInfo.tuneQuery((SpiQuery<?>) query);
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
Order order = query.findUnique();
|
||||
EntityBean eb = (EntityBean) order;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
Assert.assertFalse(ebi.isFullyLoadedBean());
|
||||
|
||||
Set<String> loadedPropertyNames = ebi.getLoadedPropertyNames();
|
||||
Assert.assertNotNull(loadedPropertyNames);
|
||||
|
||||
Assert.assertTrue(loadedPropertyNames.contains("status"));
|
||||
Assert.assertTrue(loadedPropertyNames.contains("customer"));
|
||||
|
||||
// no lazy loading expected here
|
||||
order.getCustomer();
|
||||
|
||||
List<String> loggedSql = LoggedSqlCollector.stop();
|
||||
Assert.assertEquals(1, loggedSql.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withSelectSome() {
|
||||
|
||||
init();
|
||||
|
||||
OrmQueryDetail tunedDetail = new OrmQueryDetail();
|
||||
tunedDetail.select("status");
|
||||
|
||||
TunedQueryInfo tunedInfo = createTunedQueryInfo(tunedDetail);
|
||||
|
||||
Query<Order> query = server.find(Order.class).setId(1);
|
||||
|
||||
tunedInfo.tuneQuery((SpiQuery<?>) query);
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
Order order = query.findUnique();
|
||||
EntityBean eb = (EntityBean) order;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
Assert.assertFalse(ebi.isFullyLoadedBean());
|
||||
|
||||
Set<String> loadedPropertyNames = ebi.getLoadedPropertyNames();
|
||||
Assert.assertNotNull(loadedPropertyNames);
|
||||
|
||||
Assert.assertTrue(loadedPropertyNames.contains("status"));
|
||||
Assert.assertFalse(loadedPropertyNames.contains("customer"));
|
||||
|
||||
// no lazy loading expected here
|
||||
order.getCustomer();
|
||||
|
||||
List<String> loggedSql = LoggedSqlCollector.stop();
|
||||
Assert.assertEquals(2, loggedSql.size());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package org.tests.autofetch;
|
||||
|
||||
import io.ebean.BaseTestCase;
|
||||
import io.ebean.Ebean;
|
||||
import io.ebean.EbeanServer;
|
||||
import io.ebean.Query;
|
||||
import io.ebean.bean.EntityBean;
|
||||
import io.ebean.bean.EntityBeanIntercept;
|
||||
import org.tests.model.basic.Address;
|
||||
import org.tests.model.basic.Customer;
|
||||
import org.tests.model.basic.ResetBasicData;
|
||||
import org.avaje.ebeantest.LoggedSqlCollector;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class TunedQueryWithNullFetchedBeanTest extends BaseTestCase {
|
||||
|
||||
EbeanServer server = Ebean.getServer(null);
|
||||
|
||||
@Test
|
||||
public void withFetchOfNullBeanJoin() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
Customer newCustomer = new Customer();
|
||||
newCustomer.setName("TestFetchBillingAddress");
|
||||
server.save(newCustomer);
|
||||
|
||||
Query<Customer> query = server.find(Customer.class)
|
||||
.setId(newCustomer.getId())
|
||||
.fetch("billingAddress", "id");
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
Customer customer = query.findUnique();
|
||||
EntityBean eb = (EntityBean) customer;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
Assert.assertTrue(ebi.isFullyLoadedBean());
|
||||
|
||||
// find the internal property index for "billingAddress"
|
||||
String[] propNames = eb._ebean_getPropertyNames();
|
||||
int pos = 0;
|
||||
for (int i = 0; i < propNames.length; i++) {
|
||||
if (propNames[i].equals("billingAddress")) {
|
||||
pos = i;
|
||||
}
|
||||
}
|
||||
|
||||
// The billing address is loaded (but value null)
|
||||
Assert.assertTrue(ebi.isLoadedProperty(pos));
|
||||
|
||||
Set<String> loadedPropertyNames = ebi.getLoadedPropertyNames();
|
||||
Assert.assertNull(loadedPropertyNames);
|
||||
|
||||
// no lazy loading expected here, value is null
|
||||
Address billingAddress = customer.getBillingAddress();
|
||||
Assert.assertNull(billingAddress);
|
||||
|
||||
// assert only one query executed
|
||||
List<String> loggedSql = LoggedSqlCollector.stop();
|
||||
Assert.assertEquals(1, loggedSql.size());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user