From 21a3f322e1c77240f3b3125c76a2989ea6019de6 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Mon, 19 Aug 2019 23:15:27 +1200 Subject: [PATCH] #1798 - Fix automatic query label set on nested secondary query when using profileLocation --- src/main/java/io/ebeaninternal/api/SpiQuery.java | 5 +++++ .../ebeaninternal/server/loadcontext/DLoadBaseContext.java | 4 +--- .../io/ebeaninternal/server/querydefn/DefaultOrmQuery.java | 6 ++++++ .../org/tests/query/autotune/TestAutoTuneProfiling.java | 5 +++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/ebeaninternal/api/SpiQuery.java b/src/main/java/io/ebeaninternal/api/SpiQuery.java index 7f3f5596f..fd8c7ce28 100644 --- a/src/main/java/io/ebeaninternal/api/SpiQuery.java +++ b/src/main/java/io/ebeaninternal/api/SpiQuery.java @@ -289,6 +289,11 @@ public interface SpiQuery extends Query, TxnProfileEventCodes { */ boolean selectAllForLazyLoadProperty(); + /** + * Set the on a secondary query given the label, relativePath and profile location of the parent query. + */ + void setProfilePath(String label, String relativePath, ProfileLocation profileLocation); + /** * Set the query mode. */ diff --git a/src/main/java/io/ebeaninternal/server/loadcontext/DLoadBaseContext.java b/src/main/java/io/ebeaninternal/server/loadcontext/DLoadBaseContext.java index 9c06c90d7..e9a7c8d61 100644 --- a/src/main/java/io/ebeaninternal/server/loadcontext/DLoadBaseContext.java +++ b/src/main/java/io/ebeaninternal/server/loadcontext/DLoadBaseContext.java @@ -85,9 +85,7 @@ abstract class DLoadBaseContext { String label = parent.getPlanLabel(); if (label != null) { - label += "_" + fullPath; - query.setLabel(label); - query.setProfileLocation(parent.getProfileLocation()); + query.setProfilePath(label, fullPath, parent.getProfileLocation()); } } diff --git a/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java index dfdb3708d..7e39dbb27 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java @@ -380,6 +380,12 @@ public class DefaultOrmQuery implements SpiQuery { return null; } + @Override + public void setProfilePath(String label, String relativePath, ProfileLocation profileLocation) { + this.profileLocation = profileLocation; + this.label = ((profileLocation == null) ? label : profileLocation.label()) + "_" + relativePath; + } + @Override public Query setLabel(String label) { this.label = label; diff --git a/src/test/java/org/tests/query/autotune/TestAutoTuneProfiling.java b/src/test/java/org/tests/query/autotune/TestAutoTuneProfiling.java index e12491f64..65ccbc893 100644 --- a/src/test/java/org/tests/query/autotune/TestAutoTuneProfiling.java +++ b/src/test/java/org/tests/query/autotune/TestAutoTuneProfiling.java @@ -2,6 +2,7 @@ package org.tests.query.autotune; import io.ebean.BaseTestCase; import io.ebean.DB; +import io.ebean.ProfileLocation; import org.junit.Ignore; import org.junit.Test; import org.tests.model.basic.Address; @@ -55,8 +56,12 @@ public class TestAutoTuneProfiling extends BaseTestCase { useLotUntuned(); } + private static final ProfileLocation loc0 = ProfileLocation.create(); + private Order findById(long id) { + return DB.find(Order.class) + .setProfileLocation(loc0) .select("status, orderDate, shipDate") .setId(id) .setUseCache(false)