diff --git a/src/test/java/com/avaje/tests/query/orderby/TestOrderByWithDistinct.java b/src/test/java/com/avaje/tests/query/orderby/TestOrderByWithDistinct.java index 5086931ca..d441e3494 100644 --- a/src/test/java/com/avaje/tests/query/orderby/TestOrderByWithDistinct.java +++ b/src/test/java/com/avaje/tests/query/orderby/TestOrderByWithDistinct.java @@ -2,12 +2,15 @@ package com.avaje.tests.query.orderby; import java.util.List; -import junit.framework.Assert; - +import org.junit.Assert; import org.junit.Test; -import com.avaje.ebean.*; -import com.avaje.tests.model.basic.*; +import com.avaje.ebean.BaseTestCase; +import com.avaje.ebean.Ebean; +import com.avaje.ebean.Query; +import com.avaje.tests.model.basic.MRole; +import com.avaje.tests.model.basic.MUser; +import com.avaje.tests.model.basic.MUserType; public class TestOrderByWithDistinct extends BaseTestCase { @@ -48,20 +51,22 @@ public class TestOrderByWithDistinct extends BaseTestCase { .orderBy("userType.name, userName"); List list = query.findList(); - /* - * Produces this query: - select distinct t0.userid c0, t0.user_name c1, t0.user_type_id c2 - from muser t0 - join mrole_muser u1z_ on u1z_.muser_userid = t0.userid - join mrole u1 on u1.roleid = u1z_.mrole_roleid - left outer join muser_type t1 on t1.id = t0.user_type_id - where t1.name = ? and u1.role_name = ? - order by t1.name, t0.user_name - t1.name is not in select - */ + // select distinct t0.userid c0, t0.user_name c1, t1.id c2, t1.name c3 + // from muser t0 + // left outer join muser_type t1 on t1.id = t0.user_type_id + // join mrole_muser u1z_ on u1z_.muser_userid = t0.userid + // join mrole u1 on u1.roleid = u1z_.mrole_roleid + // where u1.role_name = ? + // order by t1.name, t0.user_name; --bind(A) Assert.assertEquals(1, list.size()); Assert.assertEquals(user1, list.get(0)); + String generatedSql = query.getGeneratedSql(); + Assert.assertTrue(generatedSql.contains("select distinct t0.userid")); // using distinct + Assert.assertTrue(generatedSql.contains("order by t1.name,")); // name in order by + Assert.assertTrue(generatedSql.contains("t1.name c"));// name in select + + // repeat with slight variation, not sure this really produces a different execution path // this problem also manifests when autofetch eliminates properties from the select that aren't used in the objects @@ -79,6 +84,19 @@ public class TestOrderByWithDistinct extends BaseTestCase { Assert.assertEquals(1, list.size()); Assert.assertEquals(user1, list.get(0)); + // select distinct t0.userid c0, t0.user_name c1, t1.id c2, t1.name c3 + // from muser t0 + // left outer join muser_type t1 on t1.id = t0.user_type_id + // join mrole_muser u1z_ on u1z_.muser_userid = t0.userid + // join mrole u1 on u1.roleid = u1z_.mrole_roleid + // where u1.role_name = ? + // order by t1.name; --bind(A) + + generatedSql = query.getGeneratedSql(); + Assert.assertTrue(generatedSql.contains("select distinct t0.userid")); // using distinct + Assert.assertTrue(generatedSql.contains("order by t1.name")); // name in order by + Assert.assertTrue(generatedSql.contains("t1.name c"));// name in select + } }