From 54b56846280136c3b4f703596acf2087e60bd158 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Fri, 5 Oct 2018 12:22:25 +1300 Subject: [PATCH] #1502 - findNative build query to findPagedList, the query count is incorrect. --- .../server/querydefn/DefaultOrmQuery.java | 2 +- .../org/tests/query/TestQueryFindNative.java | 80 +++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java index fb3be3605..e64ab5c79 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java @@ -1051,7 +1051,7 @@ public class DefaultOrmQuery implements SpiQuery { CQueryPlanKey createQueryPlanKey() { if (isNativeSql()) { - queryPlanKey = new NativeSqlQueryPlanKey(nativeSql + "-" + firstRow + "-" + maxRows); + queryPlanKey = new NativeSqlQueryPlanKey(type.ordinal() + nativeSql + "-" + firstRow + "-" + maxRows); } else { queryPlanKey = new OrmQueryPlanKey(planDescription(), maxRows, firstRow, rawSql); } diff --git a/src/test/java/org/tests/query/TestQueryFindNative.java b/src/test/java/org/tests/query/TestQueryFindNative.java index 12dc45a6f..4ad221231 100644 --- a/src/test/java/org/tests/query/TestQueryFindNative.java +++ b/src/test/java/org/tests/query/TestQueryFindNative.java @@ -2,6 +2,8 @@ package org.tests.query; import io.ebean.BaseTestCase; import io.ebean.Ebean; +import io.ebean.PagedList; +import org.ebeantest.LoggedSqlCollector; import org.junit.Test; import org.tests.model.basic.Contact; import org.tests.model.basic.Customer; @@ -14,6 +16,84 @@ import static org.assertj.core.api.Assertions.assertThat; public class TestQueryFindNative extends BaseTestCase { + @Test + public void findCount() { + + ResetBasicData.reset(); + String sql = "select n.id from contact n where n.first_name like ?"; + + LoggedSqlCollector.start(); + + int rowCount = server() + .findNative(Contact.class, sql) + .setParameter(1, "J%") + .findCount(); + + List nativeIds = + server() + .findNative(Contact.class, sql) + .setParameter(1, "J%") + .findIds(); + + List loggedSql = LoggedSqlCollector.stop(); + + assertThat(nativeIds).hasSize(rowCount); + + assertThat(loggedSql).hasSize(2); + assertThat(loggedSql.get(0)).contains("select count(*) from ( select n.id from contact n where n.first_name like ?)"); + assertThat(loggedSql.get(1)).startsWith("select n.id from contact n where n.first_name like ?"); + } + + @Test + public void findPagedList() { + + ResetBasicData.reset(); + String sql = "select n.id, n.first_name from contact n where n.first_name like ?"; + + PagedList pagedList = server() + .findNative(Contact.class, sql) + .setParameter(1, "J%") + .setMaxRows(100) + .findPagedList(); + + LoggedSqlCollector.start(); + + int listSize = pagedList.getList().size(); + int totalCount = pagedList.getTotalCount(); + + List loggedSql = LoggedSqlCollector.stop(); + + assertThat(listSize).isEqualTo(totalCount); + + assertThat(loggedSql).hasSize(2); + assertThat(loggedSql.get(0)).startsWith("select n.id, n.first_name from contact n where n.first_name like ?"); + assertThat(loggedSql.get(1)).contains("select count(*) from ( select n.id, n.first_name from contact n where n.first_name like ?)"); + } + + + @Test + public void findPagedList_withColumnAlias() { + + ResetBasicData.reset(); + String sql = "select n.id, 'SillyName' first_name from contact n where n.id < ? "; + + PagedList pagedList = server() + .findNative(Contact.class, sql) + .setParameter(1, 100) + .setMaxRows(100) + .findPagedList(); + + int listSize = pagedList.getList().size(); + int totalCount = pagedList.getTotalCount(); + + assertThat(listSize).isEqualTo(totalCount); + + for (Contact contact : pagedList.getList()) { + assertThat(contact.getFirstName()).isEqualTo("SillyName"); + } + } + + @Test public void findIds() {