From ad3e88c562932d6f394cc4f4ccaeac187157384d Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Wed, 29 Mar 2023 19:31:46 +1300 Subject: [PATCH] Update tests for Autotune --- ebean-autotune/pom.xml | 7 +++ .../tests/autofetch/MainAutoQueryTune1.java | 55 +++++++++++-------- .../java/org/tests/autofetch/TestData.java | 25 +++++++++ .../java/org/tests/model/basic/Address.java | 8 ++- .../java/org/tests/model/basic/Customer.java | 11 +++- .../java/org/tests/model/basic/Order.java | 24 +++----- .../resources/application-test.properties | 6 ++ .../test/resources/autotune/my-autotune.xml | 15 +++++ .../src/test/resources/logback-test.xml | 5 +- 9 files changed, 110 insertions(+), 46 deletions(-) create mode 100644 ebean-autotune/src/test/java/org/tests/autofetch/TestData.java create mode 100644 ebean-autotune/src/test/resources/autotune/my-autotune.xml diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml index cf26b5333..227264214 100644 --- a/ebean-autotune/pom.xml +++ b/ebean-autotune/pom.xml @@ -59,6 +59,13 @@ test + + io.ebean + ebean-ddl-generator + 13.15.3-SNAPSHOT + test + + io.avaje junit diff --git a/ebean-autotune/src/test/java/org/tests/autofetch/MainAutoQueryTune1.java b/ebean-autotune/src/test/java/org/tests/autofetch/MainAutoQueryTune1.java index 45b390c18..014302e2c 100644 --- a/ebean-autotune/src/test/java/org/tests/autofetch/MainAutoQueryTune1.java +++ b/ebean-autotune/src/test/java/org/tests/autofetch/MainAutoQueryTune1.java @@ -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 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 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(); + } + } + } diff --git a/ebean-autotune/src/test/java/org/tests/autofetch/TestData.java b/ebean-autotune/src/test/java/org/tests/autofetch/TestData.java new file mode 100644 index 000000000..33621262f --- /dev/null +++ b/ebean-autotune/src/test/java/org/tests/autofetch/TestData.java @@ -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); + } +} diff --git a/ebean-autotune/src/test/java/org/tests/model/basic/Address.java b/ebean-autotune/src/test/java/org/tests/model/basic/Address.java index dd75e4a00..5c289c3ad 100644 --- a/ebean-autotune/src/test/java/org/tests/model/basic/Address.java +++ b/ebean-autotune/src/test/java/org/tests/model/basic/Address.java @@ -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; } diff --git a/ebean-autotune/src/test/java/org/tests/model/basic/Customer.java b/ebean-autotune/src/test/java/org/tests/model/basic/Customer.java index ab0ee37be..cff0e3c01 100644 --- a/ebean-autotune/src/test/java/org/tests/model/basic/Customer.java +++ b/ebean-autotune/src/test/java/org/tests/model/basic/Customer.java @@ -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; } diff --git a/ebean-autotune/src/test/java/org/tests/model/basic/Order.java b/ebean-autotune/src/test/java/org/tests/model/basic/Order.java index dabc636fd..ddb5f0330 100644 --- a/ebean-autotune/src/test/java/org/tests/model/basic/Order.java +++ b/ebean-autotune/src/test/java/org/tests/model/basic/Order.java @@ -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; - } } diff --git a/ebean-autotune/src/test/resources/application-test.properties b/ebean-autotune/src/test/resources/application-test.properties index 5b8a89631..055b73429 100644 --- a/ebean-autotune/src/test/resources/application-test.properties +++ b/ebean-autotune/src/test/resources/application-test.properties @@ -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 diff --git a/ebean-autotune/src/test/resources/autotune/my-autotune.xml b/ebean-autotune/src/test/resources/autotune/my-autotune.xml new file mode 100644 index 000000000..d1085bb80 --- /dev/null +++ b/ebean-autotune/src/test/resources/autotune/my-autotune.xml @@ -0,0 +1,15 @@ + + + + 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) + + diff --git a/ebean-autotune/src/test/resources/logback-test.xml b/ebean-autotune/src/test/resources/logback-test.xml index 8d97efd24..ee68548ba 100644 --- a/ebean-autotune/src/test/resources/logback-test.xml +++ b/ebean-autotune/src/test/resources/logback-test.xml @@ -12,10 +12,11 @@ + - + - +