diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index 8d3a6ba70..c8bd2d3d1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -962,13 +962,15 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { if (transaction == null) { transaction = currentServerTransaction(); } - query.setDefaultRawSqlIfRequired(); - if (query.isAutoTunable() && !autoTuneService.tuneQuery(query)) { - // use deployment FetchType.LAZY/EAGER annotations - // to define the 'default' select clause - query.setDefaultSelectClause(); + if (!query.isRawSql()) { + query.setDefaultRawSqlIfRequired(); + if (query.isAutoTunable() && !autoTuneService.tuneQuery(query)) { + // use deployment FetchType.LAZY/EAGER annotations + // to define the 'default' select clause + query.setDefaultSelectClause(); + } + query.selectAllForLazyLoadProperty(); } - query.selectAllForLazyLoadProperty(); ProfileLocation profileLocation = query.getProfileLocation(); if (profileLocation != null) { profileLocation.obtain(); diff --git a/ebean-test/src/test/java/org/tests/rawsql/TestRawSqlOrmQuery.java b/ebean-test/src/test/java/org/tests/rawsql/TestRawSqlOrmQuery.java index 280969cdf..48a573343 100644 --- a/ebean-test/src/test/java/org/tests/rawsql/TestRawSqlOrmQuery.java +++ b/ebean-test/src/test/java/org/tests/rawsql/TestRawSqlOrmQuery.java @@ -8,6 +8,7 @@ import io.ebean.xtest.IgnorePlatform; import org.junit.jupiter.api.Test; import org.tests.model.basic.Customer; import org.tests.model.basic.Order; +import org.tests.model.basic.Phone; import org.tests.model.basic.ResetBasicData; import java.util.List; @@ -17,10 +18,10 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -public class TestRawSqlOrmQuery extends BaseTestCase { +class TestRawSqlOrmQuery extends BaseTestCase { @Test - public void test() { + void test() { ResetBasicData.reset(); RawSql rawSql = RawSqlBuilder.parse("select r.id, r.name from o_customer r ") @@ -46,7 +47,33 @@ public class TestRawSqlOrmQuery extends BaseTestCase { } @Test - public void testFindCount_when_idPropertyNotMapped() { + void testWithLimit() { + ResetBasicData.reset(); + + RawSql rawSql = RawSqlBuilder.parse("select r.id, r.phone_number from PHONES r where r.phone_number = :num") + .columnMapping("r.id", "id") + .columnMapping("r.phone_number", "phoneNumber").create(); + + Query query = DB.find(Phone.class); + query.setRawSql(rawSql); + query.setParameter("num", "45"); + query.setMaxRows(1); + + LoggedSql.start(); + query.findOne(); + List sql = LoggedSql.stop(); + assertThat(sql).hasSize(1); + if (isLimitOffset()) { + assertThat(sql.get(0)).contains("select r.id, r.phone_number from PHONES r where r.phone_number = ? limit 1"); + } else if (isAnsiSqlLimit()) { + assertThat(sql.get(0)).contains("select r.id, r.phone_number from PHONES r where r.phone_number = ? fetch next 1 rows only"); + } else if (isSqlServer()) { + assertThat(sql.get(0)).contains("select top 1 r.id, r.phone_number from PHONES r where r.phone_number = ?"); + } + } + + @Test + void testFindCount_when_idPropertyNotMapped() { ResetBasicData.reset(); // mapping does not include the id column & property @@ -74,7 +101,7 @@ public class TestRawSqlOrmQuery extends BaseTestCase { @Test @IgnorePlatform({Platform.MYSQL, Platform.MARIADB, Platform.SQLSERVER}) - public void test_upperCaseSql() { + void test_upperCaseSql() { ResetBasicData.reset(); @@ -89,8 +116,7 @@ public class TestRawSqlOrmQuery extends BaseTestCase { } @Test - public void testFirstRowsMaxRows() throws InterruptedException, ExecutionException { - + void testFirstRowsMaxRows() throws InterruptedException, ExecutionException { ResetBasicData.reset(); RawSql rawSql = @@ -125,8 +151,7 @@ public class TestRawSqlOrmQuery extends BaseTestCase { } @Test - public void testPaging() { - + void testPaging() { ResetBasicData.reset(); RawSql rawSql = RawSqlBuilder.parse("select r.id, r.name from o_customer r ") @@ -155,8 +180,7 @@ public class TestRawSqlOrmQuery extends BaseTestCase { } @Test - public void testPaging_with_existingRawSqlOrderBy_expect_id_appendToOrderBy() { - + void testPaging_with_existingRawSqlOrderBy_expect_id_appendToOrderBy() { ResetBasicData.reset(); RawSql rawSql = RawSqlBuilder.parse("select o.id, o.order_date, o.ship_date from o_order o order by o.ship_date desc") @@ -189,8 +213,7 @@ public class TestRawSqlOrmQuery extends BaseTestCase { } @Test - public void testPaging_with_existingRawSqlOrderBy_expect_id_appendToOrderBy_with_id() { - + void testPaging_with_existingRawSqlOrderBy_expect_id_appendToOrderBy_with_id() { ResetBasicData.reset(); RawSql rawSql = RawSqlBuilder.parse("select o.id, o.order_date, o.ship_date from o_order o order by o.ship_date desc") @@ -225,8 +248,7 @@ public class TestRawSqlOrmQuery extends BaseTestCase { @IgnorePlatform(Platform.ORACLE) @Test - public void testPaging_when_setOrderBy_expect_id_appendToOrderBy() { - + void testPaging_when_setOrderBy_expect_id_appendToOrderBy() { ResetBasicData.reset(); RawSql rawSql = RawSqlBuilder.parse("select o.id, o.order_date, o.ship_date from o_order o order by o.ship_date desc nulls last") @@ -261,8 +283,7 @@ public class TestRawSqlOrmQuery extends BaseTestCase { @IgnorePlatform(Platform.ORACLE) @Test - public void testPaging_when_setOrderBy_expect_id_appendToOrderBy_with_id() { - + void testPaging_when_setOrderBy_expect_id_appendToOrderBy_with_id() { ResetBasicData.reset(); RawSql rawSql = RawSqlBuilder.parse("select o.id, o.order_date, o.ship_date from o_order o order by o.ship_date desc nulls last") @@ -297,8 +318,7 @@ public class TestRawSqlOrmQuery extends BaseTestCase { } @Test - public void testPaging_when_setOrderBy_containsId_expect_leaveAsIs() { - + void testPaging_when_setOrderBy_containsId_expect_leaveAsIs() { ResetBasicData.reset(); RawSql rawSql = RawSqlBuilder.parse("select o.id, o.order_date, o.ship_date from o_order o order by o.ship_date desc")