From d12dc9bfed227405ac0f378bec96ed507105d00d Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 1 Aug 2022 09:37:34 +1200 Subject: [PATCH] Fix platform specific asserts with TestQuerySingleAttribute using limit/offset --- .../src/test/java/io/ebean/xtest/BaseTestCase.java | 8 ++++++++ .../tests/query/other/TestQuerySingleAttribute.java | 13 +++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/ebean-test/src/test/java/io/ebean/xtest/BaseTestCase.java b/ebean-test/src/test/java/io/ebean/xtest/BaseTestCase.java index 2c1aeb245..cc4d04326 100644 --- a/ebean-test/src/test/java/io/ebean/xtest/BaseTestCase.java +++ b/ebean-test/src/test/java/io/ebean/xtest/BaseTestCase.java @@ -171,6 +171,14 @@ public abstract class BaseTestCase { return spiEbeanServer().databasePlatform().isCaseSensitiveCollation(); } + public boolean isLimitOffset() { + return isH2() || isPostgresCompatible() || isMySql() || isMariaDB(); + } + + public boolean isAnsiSqlLimit() { + return isOracle() || isDb2(); + } + /** * MS SQL Server does not allow setting explicit values on identity columns * so tests that do this need to be skipped for SQL Server. 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 bbdb15b4f..4a941299f 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 @@ -798,12 +798,13 @@ class TestQuerySingleAttribute extends BaseTestCase { .setMaxRows(2); List statusList = query.findSingleAttributeList(); - assertSql(query) - .contains("select t1.status from o_customer t0 " - + "left join o_order t1 on t1.kcustomer_id = t0.id and t1.order_date is not null limit 2") - .doesNotContain("order by"); - // Results in java.lang.AssertionError: selectSql was null - // at io.ebeaninternal.server.query.SqlTree.getSelectSql(SqlTree.java:99) + if (isSqlServer()) { + assertThat(sqlOf(query)).isEqualTo("select top 2 t1.status from o_customer t0 left join o_order t1 on t1.kcustomer_id = t0.id and t1.order_date is not null"); + } else if (isLimitOffset()) { + assertThat(sqlOf(query)).isEqualTo("select t1.status from o_customer t0 left join o_order t1 on t1.kcustomer_id = t0.id and t1.order_date is not null limit 2"); + } else if (isAnsiSqlLimit()) { + assertThat(sqlOf(query)).isEqualTo("select t1.status from o_customer t0 left join o_order t1 on t1.kcustomer_id = t0.id and t1.order_date is not null fetch next 100 rows only"); + } assertThat(statusList).hasSize(2); }