diff --git a/src/main/java/io/ebean/OrderBy.java b/src/main/java/io/ebean/OrderBy.java index 6b59e12bf..c7bacf7aa 100644 --- a/src/main/java/io/ebean/OrderBy.java +++ b/src/main/java/io/ebean/OrderBy.java @@ -412,7 +412,7 @@ public final class OrderBy implements Serializable { * Support use in select clause if no collation or nulls ordering. */ boolean supportsSelect() { - return nulls == null && collation == null; + return nulls == null; } } diff --git a/src/test/java/org/tests/m2m/TestM2MDistinct_sqlServer.java b/src/test/java/org/tests/m2m/TestM2MDistinct_sqlServer.java new file mode 100644 index 000000000..29c216ce7 --- /dev/null +++ b/src/test/java/org/tests/m2m/TestM2MDistinct_sqlServer.java @@ -0,0 +1,36 @@ +package org.tests.m2m; + +import io.ebean.BaseTestCase; +import io.ebean.DB; +import io.ebean.annotation.ForPlatform; +import io.ebean.annotation.Platform; +import io.ebeantest.LoggedSql; +import org.junit.Test; +import org.tests.model.m2m.Permission; +import org.tests.model.m2m.Role; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class TestM2MDistinct_sqlServer extends BaseTestCase { + + @ForPlatform(Platform.SQLSERVER) + @Test + public void testName() { + + Permission perm = new Permission("TestPerm"); + DB.save(perm); + LoggedSql.start(); + + List roles = DB.find(Role.class).where().eq("permissions", perm) + .order().asc("name", "Latin1_General_CI_AS") + .findList(); + + List sqls = LoggedSql.stop(); + assertThat(sqls.get(0)).startsWith("select distinct t0.id, t0.name, t0.version, t0.tenant_id, t0.name collate Latin1_General_CI_AS " + + "from mt_role t0 join mt_role_permission u1z_ on u1z_.mt_role_id = t0.id " + + "join mt_permission u1 on u1.id = u1z_.mt_permission_id where u1.id = ? " + + "order by t0.name collate Latin1_General_CI_AS;"); + } +} diff --git a/src/test/java/org/tests/unitinternal/TestOrderByParse.java b/src/test/java/org/tests/unitinternal/TestOrderByParse.java index 362086508..11136a786 100644 --- a/src/test/java/org/tests/unitinternal/TestOrderByParse.java +++ b/src/test/java/org/tests/unitinternal/TestOrderByParse.java @@ -182,7 +182,7 @@ public class TestOrderByParse extends BaseTestCase { assertEquals("id", o1.getProperties().get(0).getProperty()); assertTrue(o1.getProperties().get(0).isAscending()); assertEquals("id collate latin_1", o1.toStringFormat()); - assertFalse(o1.supportsSelect()); + assertTrue(o1.supportsSelect()); o1 = new OrderBy<>(); o1.desc("id", "latin_1"); @@ -190,7 +190,7 @@ public class TestOrderByParse extends BaseTestCase { assertEquals("id", o1.getProperties().get(0).getProperty()); assertTrue(!o1.getProperties().get(0).isAscending()); assertEquals("id collate latin_1 desc", o1.toStringFormat()); - assertFalse(o1.supportsSelect()); + assertTrue(o1.supportsSelect()); o1 = new OrderBy<>(); o1.desc("id", "latin_1"); @@ -201,7 +201,7 @@ public class TestOrderByParse extends BaseTestCase { assertTrue(!o1.getProperties().get(0).isAscending()); assertTrue(o1.getProperties().get(1).isAscending()); assertEquals("id collate latin_1 desc, date", o1.toStringFormat()); - assertFalse(o1.supportsSelect()); + assertTrue(o1.supportsSelect()); o1 = new OrderBy<>(); o1.desc("id", "latin_1"); @@ -212,7 +212,7 @@ public class TestOrderByParse extends BaseTestCase { assertTrue(!o1.getProperties().get(0).isAscending()); assertTrue(o1.getProperties().get(1).isAscending()); assertEquals("id collate latin_1 desc, name collate latin_2", o1.toStringFormat()); - assertFalse(o1.supportsSelect()); + assertTrue(o1.supportsSelect()); // functional (DB2) syntax o1 = new OrderBy<>(); @@ -221,8 +221,7 @@ public class TestOrderByParse extends BaseTestCase { assertEquals("id", o1.getProperties().get(0).getProperty()); assertTrue(!o1.getProperties().get(0).isAscending()); assertEquals("COLLATION_KEY(id, 'latin_1') desc", o1.toStringFormat()); - assertFalse(o1.supportsSelect()); - + assertTrue(o1.supportsSelect()); } @Test