Merge pull request #3006 from ebean-orm/fix/3005-rawSql-select

Fix for #3005 - Regression, Invalid SQL with RawSql in 13.15.0 due o #2996
This commit is contained in:
Rob Bygrave
2023-03-22 23:25:33 +13:00
committed by GitHub
2 changed files with 46 additions and 24 deletions
@@ -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();
@@ -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<Phone> query = DB.find(Phone.class);
query.setRawSql(rawSql);
query.setParameter("num", "45");
query.setMaxRows(1);
LoggedSql.start();
query.findOne();
List<String> 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")