Update tests for Autotune

This commit is contained in:
Rob Bygrave
2023-03-29 19:31:46 +13:00
parent c29a81248a
commit ad3e88c562
9 changed files with 110 additions and 46 deletions
+7
View File
@@ -59,6 +59,13 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-ddl-generator</artifactId>
<version>13.15.3-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.avaje</groupId>
<artifactId>junit</artifactId>
@@ -1,28 +1,37 @@
package org.tests.autofetch;
import io.ebean.DB;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Order;
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();
// }
// }
public static void main(String[] args) {
MainAutoQueryTune1 me = new MainAutoQueryTune1();
me.tuneJoin();
}
@Test
void tuneJoin() {
TestData.load();
List<Order> list = DB.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();
order.getCustomer().getName();
order.getCustomer().getNote();
}
}
}
@@ -0,0 +1,25 @@
package org.tests.autofetch;
import io.ebean.DB;
import org.tests.model.basic.Address;
import org.tests.model.basic.Customer;
import org.tests.model.basic.Order;
import java.time.LocalDate;
public class TestData {
static void load() {
if (DB.find(Order.class).findCount() > 0) {
return;
}
var customer = new Customer("Rob");
customer.setBillingAddress(new Address("l0", "city0"));
DB.save(customer);
var order = new Order(customer);
order.setOrderDate(LocalDate.now());
DB.save(order);
}
}
@@ -1,17 +1,21 @@
package org.tests.model.basic;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "address")
@Table(name = "o_address")
public class Address extends BaseModel {
String line1;
String line2;
String city;
public Address(String line1, String city) {
this.line1 = line1;
this.city = city;
}
public String getLine1() {
return line1;
}
@@ -1,5 +1,8 @@
package org.tests.model.basic;
import io.ebean.annotation.NotNull;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@@ -8,13 +11,17 @@ import javax.persistence.Table;
@Table(name = "o_customer")
public class Customer extends BaseModel {
String name;
@NotNull String name;
String note;
@ManyToOne
@ManyToOne(cascade = CascadeType.PERSIST)
Address billingAddress;
public Customer(String name) {
this.name = name;
}
public String getName() {
return name;
}
@@ -1,21 +1,10 @@
package org.tests.model.basic;
import io.ebean.Model;
import io.ebean.annotation.WhenModified;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Version;
import java.sql.Timestamp;
import javax.persistence.*;
import java.time.LocalDate;
@Entity
@Table(name = "orders")
@Table(name = "o_order")
public class Order extends BaseModel {
public enum Status {
@@ -32,7 +21,11 @@ public class Order extends BaseModel {
LocalDate orderDate;
@ManyToOne(cascade = CascadeType.PERSIST)
Customer customer;
final Customer customer;
public Order(Customer customer) {
this.customer = customer;
}
public Status getStatus() {
return status;
@@ -54,7 +47,4 @@ public class Order extends BaseModel {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
@@ -9,3 +9,9 @@ datasource.h2.url=jdbc:h2:mem:h2AutoTune
datasource.pg.username=sa
datasource.pg.password=
datasource.pg.url=jdbc:h2:mem:h2AutoTune
ebean.autoTune.profiling=true
ebean.maxCallStack=10
ebean.autoTune.queryTuning=true
ebean.autoTune.queryTuningFile=autotune/my-autotune.xml
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<autotune xmlns="http://ebean-orm.github.io/xml/ns/autotune">
<origin key="BmouL7.Bn_jgL.BNY1QD" beanType="org.tests.model.basic.Order" detail="select (orderDate) fetch customer (name,note)" original="">
<callStack>org.tests.autofetch.MainAutoQueryTune1.tuneJoin(MainAutoQueryTune1.java:27)
org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)</callStack>
</origin>
</autotune>
@@ -12,10 +12,11 @@
<appender-ref ref="STDOUT"/>
</root>
<logger name="io.ebeaninternal" level="DEBUG"/>
<logger name="io.ebean.docker" level="TRACE"/>
<!-- <logger name="io.ebean.DDL" level="DEBUG"/>-->
<!-- <logger name="io.ebean.SQL" level="TRACE"/>-->
<logger name="io.ebean.SQL" level="TRACE"/>
<!-- <logger name="io.ebean.TXN" level="TRACE"/>-->
<!-- <logger name="io.ebean.SUM" level="TRACE"/>-->
<logger name="io.ebean.SUM" level="TRACE"/>
</configuration>