From cf8f09944728577a6d5a33b857617e8e2b60ed74 Mon Sep 17 00:00:00 2001 From: Alexander Wagner Date: Wed, 20 Jul 2022 08:54:00 +0200 Subject: [PATCH 1/2] test for findSingleAttributeList o2m distinct --- .../query/other/TestQuerySingleAttribute.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/ebean-test/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java b/ebean-test/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java index df9d0f3b0..895f24dd3 100644 --- a/ebean-test/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java +++ b/ebean-test/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java @@ -756,6 +756,27 @@ public class TestQuerySingleAttribute extends BaseTestCase { } } + @Test + public void oneToMany_distinct() { + + ResetBasicData.reset(); + + Query query = DB.find(Customer.class) + .fetch("orders", "status") + .setDistinct(true); + + List statusList = query.findSingleAttributeList(); + assertSql(query).contains("select distinct t1.status from o_customer t0 " + + "left join o_order t1 on t1.kcustomer_id = t0.id and t1.order_date is not null"); + // query was: select distinct t1.status from o_customer t0 + // left join o_order t1 on t1.kcustomer_id = t0.id and t1.order_date is not null order by t0.id + // -> why order by t0.id? + // Results in JdbcSQLSyntaxErrorException: + // Order by expression "T0.ID" must be in the result list in this case + assertThat(statusList).hasSize(4); + assertThat(statusList).contains(null, Order.Status.NEW, Order.Status.COMPLETE, Order.Status.SHIPPED); + } + @BeforeEach public void setup() { MainEntity e1 = new MainEntity(); From eac03a0721e6fba5e587985ea6dfff4afbb469bd Mon Sep 17 00:00:00 2001 From: Alexander Wagner Date: Wed, 20 Jul 2022 08:57:28 +0200 Subject: [PATCH 2/2] assert --- .../org/tests/query/other/TestQuerySingleAttribute.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ebean-test/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java b/ebean-test/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java index 895f24dd3..d34af2ad5 100644 --- a/ebean-test/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java +++ b/ebean-test/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java @@ -766,8 +766,10 @@ public class TestQuerySingleAttribute extends BaseTestCase { .setDistinct(true); List statusList = query.findSingleAttributeList(); - assertSql(query).contains("select distinct t1.status from o_customer t0 " - + "left join o_order t1 on t1.kcustomer_id = t0.id and t1.order_date is not null"); + assertSql(query) + .contains("select distinct t1.status from o_customer t0 " + + "left join o_order t1 on t1.kcustomer_id = t0.id and t1.order_date is not null") + .doesNotContain("order by"); // query was: select distinct t1.status from o_customer t0 // left join o_order t1 on t1.kcustomer_id = t0.id and t1.order_date is not null order by t0.id // -> why order by t0.id?