killbill-memoizeit
Changes
osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java 11(+3 -8)
Details
diff --git a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
index cd2c53e..d1ffe58 100644
--- a/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
+++ b/account/src/main/java/com/ning/billing/account/api/user/DefaultAccountUserApi.java
@@ -94,6 +94,7 @@ public class DefaultAccountUserApi implements AccountUserApi {
public Pagination<Account> searchAccounts(final String searchKey, final Long offset, final Long limit, final TenantContext context) {
final Pagination<AccountModelDao> accountModelDaos = accountDao.searchAccounts(searchKey, offset, limit, internalCallContextFactory.createInternalTenantContext(context));
return new DefaultPagination<Account>(accountModelDaos,
+ limit,
Iterators.<AccountModelDao, Account>transform(accountModelDaos.iterator(),
new Function<AccountModelDao, Account>() {
@Override
@@ -107,6 +108,7 @@ public class DefaultAccountUserApi implements AccountUserApi {
public Pagination<Account> getAccounts(final Long offset, final Long limit, final TenantContext context) {
final Pagination<AccountModelDao> accountModelDaos = accountDao.get(offset, limit, internalCallContextFactory.createInternalTenantContext(context));
return new DefaultPagination<Account>(accountModelDaos,
+ limit,
Iterators.<AccountModelDao, Account>transform(accountModelDaos.iterator(),
new Function<AccountModelDao, Account>() {
@Override
diff --git a/account/src/main/java/com/ning/billing/account/dao/AccountDao.java b/account/src/main/java/com/ning/billing/account/dao/AccountDao.java
index b6ed783..fbe6bfc 100644
--- a/account/src/main/java/com/ning/billing/account/dao/AccountDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/AccountDao.java
@@ -30,7 +30,7 @@ public interface AccountDao extends EntityDao<AccountModelDao, Account, AccountA
public AccountModelDao getAccountByKey(String key, InternalTenantContext context);
- public Pagination<AccountModelDao> searchAccounts(String searchKey, Long offset, Long rowCount, InternalTenantContext context);
+ public Pagination<AccountModelDao> searchAccounts(String searchKey, Long offset, Long limit, InternalTenantContext context);
/**
* @throws AccountApiException when externalKey is null
diff --git a/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java b/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java
index 5620062..fca3684 100644
--- a/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java
+++ b/account/src/main/java/com/ning/billing/account/dao/DefaultAccountDao.java
@@ -107,7 +107,7 @@ public class DefaultAccountDao extends EntityDaoBase<AccountModelDao, Account, A
}
@Override
- public Pagination<AccountModelDao> searchAccounts(final String searchKey, final Long offset, final Long rowCount, final InternalTenantContext context) {
+ public Pagination<AccountModelDao> searchAccounts(final String searchKey, final Long offset, final Long limit, final InternalTenantContext context) {
// Note: the connection will be busy as we stream the results out: hence we cannot use
// SQL_CALC_FOUND_ROWS / FOUND_ROWS on the actual query.
// We still need to know the actual number of results, mainly for the UI so that it knows if it needs to fetch
@@ -117,6 +117,7 @@ public class DefaultAccountDao extends EntityDaoBase<AccountModelDao, Account, A
public Long inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
final AccountSqlDao accountSqlDao = entitySqlDaoWrapperFactory.become(AccountSqlDao.class);
final Iterator<AccountModelDao> dumbIterator = accountSqlDao.searchAccounts(searchKey, offset, 1L, context);
+ // Make sure to go through the results to close the connection
while (dumbIterator.hasNext()) {
dumbIterator.next();
}
@@ -128,9 +129,9 @@ public class DefaultAccountDao extends EntityDaoBase<AccountModelDao, Account, A
// Since we want to stream the results out, we don't want to auto-commit when this method returns.
final AccountSqlDao accountSqlDao = transactionalSqlDao.onDemand(AccountSqlDao.class);
final Long totalCount = accountSqlDao.getCount(context);
- final Iterator<AccountModelDao> results = accountSqlDao.searchAccounts(searchKey, offset, rowCount, context);
+ final Iterator<AccountModelDao> results = accountSqlDao.searchAccounts(searchKey, offset, limit, context);
- return new DefaultPagination<AccountModelDao>(offset, count, totalCount, results);
+ return new DefaultPagination<AccountModelDao>(offset, limit, count, totalCount, results);
}
@Override
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
index 0a53eb3..6d0feb4 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/user/DefaultInvoiceUserApi.java
@@ -118,6 +118,7 @@ public class DefaultInvoiceUserApi implements InvoiceUserApi {
// Invoices will be shallow, i.e. won't contain items nor payments
final Pagination<InvoiceModelDao> invoiceModelDaos = dao.get(offset, limit, internalCallContextFactory.createInternalTenantContext(context));
return new DefaultPagination<Invoice>(invoiceModelDaos,
+ limit,
Iterators.<InvoiceModelDao, Invoice>transform(invoiceModelDaos.iterator(),
new Function<InvoiceModelDao, Invoice>() {
@Override
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
index 8b107f0..e46c2e8 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/AccountResource.java
@@ -207,9 +207,8 @@ public class AccountResource extends JaxRsResourceBase {
.entity(json)
.header(HDR_PAGINATION_CURRENT_OFFSET, accounts.getCurrentOffset())
.header(HDR_PAGINATION_NEXT_OFFSET, accounts.getNextOffset())
- .header(HDR_PAGINATION_TOTAL_NB_RESULTS, accounts.getTotalNbResults())
- .header(HDR_PAGINATION_NB_RESULTS, accounts.getNbResults())
- .header(HDR_PAGINATION_NB_RESULTS_FROM_OFFSET, accounts.getNbResultsFromOffset())
+ .header(HDR_PAGINATION_TOTAL_NB_RECORDS, accounts.getTotalNbRecords())
+ .header(HDR_PAGINATION_MAX_NB_RECORDS, accounts.getMaxNbRecords())
.header(HDR_PAGINATION_NEXT_PAGE_URI, nextPageUri)
.build();
}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
index a7fd8d0..4d73b69 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/JaxrsResource.java
@@ -42,9 +42,8 @@ public interface JaxrsResource {
public static String HDR_COMMENT = "X-Killbill-Comment";
public static String HDR_PAGINATION_CURRENT_OFFSET = "X-Killbill-Pagination-CurrentOffset";
public static String HDR_PAGINATION_NEXT_OFFSET = "X-Killbill-Pagination-NextOffset";
- public static String HDR_PAGINATION_TOTAL_NB_RESULTS = "X-Killbill-Pagination-TotalNbResults";
- public static String HDR_PAGINATION_NB_RESULTS = "X-Killbill-Pagination-NbResults";
- public static String HDR_PAGINATION_NB_RESULTS_FROM_OFFSET = "X-Killbill-Pagination-NbResultsFromOffset";
+ public static String HDR_PAGINATION_TOTAL_NB_RECORDS = "X-Killbill-Pagination-TotalNbRecords";
+ public static String HDR_PAGINATION_MAX_NB_RECORDS = "X-Killbill-Pagination-MaxNbRecords";
public static String HDR_PAGINATION_NEXT_PAGE_URI = "X-Killbill-Pagination-NextPageUri";
/*
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentMethodResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentMethodResource.java
index 2af1d58..1177d01 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentMethodResource.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/PaymentMethodResource.java
@@ -18,6 +18,7 @@ package com.ning.billing.jaxrs.resources;
import java.io.IOException;
import java.io.OutputStream;
+import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@@ -56,6 +57,7 @@ import com.ning.billing.util.entity.Pagination;
import com.fasterxml.jackson.core.JsonGenerator;
import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMap;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -113,6 +115,8 @@ public class PaymentMethodResource extends JaxRsResourceBase {
paymentMethods = paymentApi.searchPaymentMethods(searchKey, offset, limit, pluginName, tenantContext);
}
+ final URI nextPageUri = uriBuilder.nextPage(AccountResource.class, "searchPaymentMethods", paymentMethods.getNextOffset(), limit, ImmutableMap.<String, String>of());
+
final Map<UUID, Account> accounts = new HashMap<UUID, Account>();
final StreamingOutput json = new StreamingOutput() {
@Override
@@ -144,9 +148,9 @@ public class PaymentMethodResource extends JaxRsResourceBase {
.entity(json)
.header(HDR_PAGINATION_CURRENT_OFFSET, paymentMethods.getCurrentOffset())
.header(HDR_PAGINATION_NEXT_OFFSET, paymentMethods.getNextOffset())
- .header(HDR_PAGINATION_TOTAL_NB_RESULTS, paymentMethods.getTotalNbResults())
- .header(HDR_PAGINATION_NB_RESULTS, paymentMethods.getNbResults())
- .header(HDR_PAGINATION_NB_RESULTS_FROM_OFFSET, paymentMethods.getNbResultsFromOffset())
+ .header(HDR_PAGINATION_TOTAL_NB_RECORDS, paymentMethods.getTotalNbRecords())
+ .header(HDR_PAGINATION_MAX_NB_RECORDS, paymentMethods.getMaxNbRecords())
+ .header(HDR_PAGINATION_NEXT_PAGE_URI, nextPageUri)
.build();
}
diff --git a/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java b/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
index dffd273..c4ef01b 100644
--- a/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
+++ b/osgi-bundles/tests/beatrix/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
@@ -144,18 +144,13 @@ public class TestPaymentPluginApi implements PaymentPluginApi {
}
@Override
- public Long getTotalNbResults() {
+ public Long getMaxNbRecords() {
return 0L;
}
@Override
- public Long getNbResults() {
- return null;
- }
-
- @Override
- public Long getNbResultsFromOffset() {
- return null;
+ public Long getTotalNbRecords() {
+ return 0L;
}
@Override
diff --git a/osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java b/osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
index 0d4f742..c9059b0 100644
--- a/osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
+++ b/osgi-bundles/tests/payment/src/test/java/com/ning/billing/osgi/bundles/test/TestPaymentPluginApi.java
@@ -224,18 +224,13 @@ public class TestPaymentPluginApi implements PaymentPluginApiWithTestControl {
}
@Override
- public Long getTotalNbResults() {
+ public Long getMaxNbRecords() {
return 0L;
}
@Override
- public Long getNbResults() {
- return null;
- }
-
- @Override
- public Long getNbResultsFromOffset() {
- return null;
+ public Long getTotalNbRecords() {
+ return 0L;
}
@Override
diff --git a/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
index 9f05903..503df8b 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
@@ -190,6 +190,7 @@ public class PaymentMethodProcessor extends ProcessorBase {
}
return new DefaultPagination<PaymentMethod>(paymentMethods,
+ limit,
Iterators.<PaymentMethod>filter(Iterators.<PaymentMethodPlugin, PaymentMethod>transform(paymentMethods.iterator(),
new Function<PaymentMethodPlugin, PaymentMethod>() {
@Override
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/ExternalPaymentProviderPlugin.java b/payment/src/main/java/com/ning/billing/payment/provider/ExternalPaymentProviderPlugin.java
index 396a17d..1605150 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/ExternalPaymentProviderPlugin.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/ExternalPaymentProviderPlugin.java
@@ -101,8 +101,8 @@ public class ExternalPaymentProviderPlugin implements PaymentPluginApi {
}
@Override
- public Pagination<PaymentMethodPlugin> searchPaymentMethods(final String searchKy, final Long offset, final Long limit, final TenantContext tenantContext) throws PaymentPluginApiException {
- return new DefaultPagination<PaymentMethodPlugin>(0L, Iterators.<PaymentMethodPlugin>emptyIterator());
+ public Pagination<PaymentMethodPlugin> searchPaymentMethods(final String searchKey, final Long offset, final Long limit, final TenantContext tenantContext) throws PaymentPluginApiException {
+ return new DefaultPagination<PaymentMethodPlugin>(offset, limit, 0L, 0L, Iterators.<PaymentMethodPlugin>emptyIterator());
}
@Override
diff --git a/util/src/main/java/com/ning/billing/util/entity/dao/EntityDao.java b/util/src/main/java/com/ning/billing/util/entity/dao/EntityDao.java
index 477a305..8989b1b 100644
--- a/util/src/main/java/com/ning/billing/util/entity/dao/EntityDao.java
+++ b/util/src/main/java/com/ning/billing/util/entity/dao/EntityDao.java
@@ -36,7 +36,7 @@ public interface EntityDao<M extends EntityModelDao<E>, E extends Entity, U exte
public Pagination<M> getAll(InternalTenantContext context);
- public Pagination<M> get(Long offset, Long rowCount, InternalTenantContext context);
+ public Pagination<M> get(Long offset, Long limit, InternalTenantContext context);
public Long getCount(InternalTenantContext context);
diff --git a/util/src/main/java/com/ning/billing/util/entity/dao/EntityDaoBase.java b/util/src/main/java/com/ning/billing/util/entity/dao/EntityDaoBase.java
index f2e2462..d494c4e 100644
--- a/util/src/main/java/com/ning/billing/util/entity/dao/EntityDaoBase.java
+++ b/util/src/main/java/com/ning/billing/util/entity/dao/EntityDaoBase.java
@@ -129,13 +129,31 @@ public abstract class EntityDaoBase<M extends EntityModelDao<E>, E extends Entit
}
@Override
- public Pagination<M> get(final Long offset, final Long rowCount, final InternalTenantContext context) {
- // See notes above
+ public Pagination<M> get(final Long offset, final Long limit, final InternalTenantContext context) {
+ // Note: the connection will be busy as we stream the results out: hence we cannot use
+ // SQL_CALC_FOUND_ROWS / FOUND_ROWS on the actual query.
+ // We still need to know the actual number of results, mainly for the UI so that it knows if it needs to fetch
+ // more pages. To do that, we perform a dummy search query with SQL_CALC_FOUND_ROWS (but limit 1).
+ final Long count = transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Long>() {
+ @Override
+ public Long inTransaction(final EntitySqlDaoWrapperFactory<EntitySqlDao> entitySqlDaoWrapperFactory) throws Exception {
+ final EntitySqlDao<M, E> sqlDao = entitySqlDaoWrapperFactory.become(realSqlDao);
+ final Iterator<M> dumbIterator = sqlDao.get(offset, 1L, getNaturalOrderingColumns(), context);
+ // Make sure to go through the results to close the connection
+ while (dumbIterator.hasNext()) {
+ dumbIterator.next();
+ }
+ return sqlDao.getFoundRows(context);
+ }
+ });
+
+ // We usually always want to wrap our queries in an EntitySqlDaoTransactionWrapper... except here.
+ // Since we want to stream the results out, we don't want to auto-commit when this method returns.
final EntitySqlDao<M, E> sqlDao = transactionalSqlDao.onDemand(realSqlDao);
- final Long count = sqlDao.getCount(context);
+ final Long totalCount = sqlDao.getCount(context);
+ final Iterator<M> results = sqlDao.get(offset, limit, getNaturalOrderingColumns(), context);
- final Iterator<M> results = sqlDao.get(offset, rowCount, getNaturalOrderingColumns(), context);
- return new DefaultPagination<M>(offset, rowCount, count, results);
+ return new DefaultPagination<M>(offset, limit, count, totalCount, results);
}
@Override
diff --git a/util/src/main/java/com/ning/billing/util/entity/DefaultPagination.java b/util/src/main/java/com/ning/billing/util/entity/DefaultPagination.java
index 0000879..e766255 100644
--- a/util/src/main/java/com/ning/billing/util/entity/DefaultPagination.java
+++ b/util/src/main/java/com/ning/billing/util/entity/DefaultPagination.java
@@ -20,16 +20,21 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import javax.annotation.Nullable;
+
import com.google.common.collect.ImmutableList;
+// Assumes the original offset starts at zero.
public class DefaultPagination<T> implements Pagination<T> {
private final Long currentOffset;
- private final Long approximateNbResults;
- private final Long approximateTotalNbResults;
+ private final Long limit;
+ private final Long totalNbRecords;
+ private final Long maxNbRecords;
private final Iterator<T> delegateIterator;
// Builder when the streaming API can't be used
+ // Notes: elements should be the entire records set (regardless of filtering) otherwise maxNbRecords won't be accurate
public static <T> Pagination<T> build(final Long offset, final Long limit, final Collection<T> elements) {
final List<T> allResults = ImmutableList.<T>copyOf(elements);
@@ -41,24 +46,26 @@ public class DefaultPagination<T> implements Pagination<T> {
} else {
results = allResults.subList(offset.intValue(), offset.intValue() + limit.intValue());
}
- return new DefaultPagination<T>(offset, (long) results.size(), (long) allResults.size(), results.iterator());
+ return new DefaultPagination<T>(offset, limit, (long) results.size(), (long) allResults.size(), results.iterator());
}
// Constructor for DAO -> API bridge
- public DefaultPagination(final Pagination original, final Iterator<T> delegate) {
- this(original.getCurrentOffset(), original.getNbResults(), original.getTotalNbResults(), delegate);
+ public DefaultPagination(final Pagination original, final Long limit, final Iterator<T> delegate) {
+ this(original.getCurrentOffset(), limit, original.getTotalNbRecords(), original.getMaxNbRecords(), delegate);
}
// Constructor for DAO getAll calls
- public DefaultPagination(final Long approximateTotalNbResults, final Iterator<T> results) {
- this(0L, approximateTotalNbResults, approximateTotalNbResults, results);
+ public DefaultPagination(final Long maxNbRecords, final Iterator<T> results) {
+ this(0L, Long.MAX_VALUE, maxNbRecords, maxNbRecords, results);
}
- public DefaultPagination(final Long currentOffset, final Long approximateNbResults,
- final Long approximateTotalNbResults, final Iterator<T> delegateIterator) {
+ public DefaultPagination(final Long currentOffset, final Long limit,
+ @Nullable final Long totalNbRecords, @Nullable final Long maxNbRecords,
+ final Iterator<T> delegateIterator) {
this.currentOffset = currentOffset;
- this.approximateNbResults = approximateNbResults;
- this.approximateTotalNbResults = approximateTotalNbResults;
+ this.limit = limit;
+ this.totalNbRecords = totalNbRecords;
+ this.maxNbRecords = maxNbRecords;
this.delegateIterator = delegateIterator;
}
@@ -74,22 +81,27 @@ public class DefaultPagination<T> implements Pagination<T> {
@Override
public Long getNextOffset() {
- return currentOffset + approximateNbResults;
- }
-
- @Override
- public Long getTotalNbResults() {
- return approximateTotalNbResults;
+ final long candidate = currentOffset + limit;
+ if (totalNbRecords != null && candidate >= totalNbRecords) {
+ // No more results
+ return null;
+ } else {
+ // When we don't know the total number of records, the next offset
+ // returned here won't make sense once the last result is returned.
+ // It is the responsibility of the client to handle the pagination stop condition
+ // in that case (i.e. check if there is no more results).
+ return candidate;
+ }
}
@Override
- public Long getNbResults() {
- return approximateNbResults;
+ public Long getMaxNbRecords() {
+ return maxNbRecords;
}
@Override
- public Long getNbResultsFromOffset() {
- return approximateNbResults - getNextOffset() + 1;
+ public Long getTotalNbRecords() {
+ return totalNbRecords;
}
@Override
@@ -97,9 +109,8 @@ public class DefaultPagination<T> implements Pagination<T> {
final StringBuilder sb = new StringBuilder("DefaultPagination{");
sb.append("currentOffset=").append(currentOffset);
sb.append(", nextOffset=").append(getNextOffset());
- sb.append(", approximateNbResults=").append(approximateNbResults);
- sb.append(", approximateTotalNbResults=").append(approximateTotalNbResults);
- sb.append(", approximateNbResultsFromOffset=").append(getNbResultsFromOffset());
+ sb.append(", totalNbRecords=").append(totalNbRecords);
+ sb.append(", maxNbRecords=").append(maxNbRecords);
sb.append('}');
return sb.toString();
}
@@ -116,10 +127,10 @@ public class DefaultPagination<T> implements Pagination<T> {
final DefaultPagination that = (DefaultPagination) o;
- if (approximateNbResults != null ? !approximateNbResults.equals(that.approximateNbResults) : that.approximateNbResults != null) {
+ if (totalNbRecords != null ? !totalNbRecords.equals(that.totalNbRecords) : that.totalNbRecords != null) {
return false;
}
- if (approximateTotalNbResults != null ? !approximateTotalNbResults.equals(that.approximateTotalNbResults) : that.approximateTotalNbResults != null) {
+ if (maxNbRecords != null ? !maxNbRecords.equals(that.maxNbRecords) : that.maxNbRecords != null) {
return false;
}
if (currentOffset != null ? !currentOffset.equals(that.currentOffset) : that.currentOffset != null) {
@@ -135,8 +146,8 @@ public class DefaultPagination<T> implements Pagination<T> {
@Override
public int hashCode() {
int result = currentOffset != null ? currentOffset.hashCode() : 0;
- result = 31 * result + (approximateNbResults != null ? approximateNbResults.hashCode() : 0);
- result = 31 * result + (approximateTotalNbResults != null ? approximateTotalNbResults.hashCode() : 0);
+ result = 31 * result + (totalNbRecords != null ? totalNbRecords.hashCode() : 0);
+ result = 31 * result + (maxNbRecords != null ? maxNbRecords.hashCode() : 0);
result = 31 * result + (delegateIterator != null ? delegateIterator.hashCode() : 0);
return result;
}
diff --git a/util/src/main/resources/com/ning/billing/util/entity/dao/EntitySqlDao.sql.stg b/util/src/main/resources/com/ning/billing/util/entity/dao/EntitySqlDao.sql.stg
index cb32b87..1bc6a90 100644
--- a/util/src/main/resources/com/ning/billing/util/entity/dao/EntitySqlDao.sql.stg
+++ b/util/src/main/resources/com/ning/billing/util/entity/dao/EntitySqlDao.sql.stg
@@ -147,7 +147,7 @@ where <CHECK_TENANT("t.")>
>>
get(offset, rowCount, orderBy) ::= <<
-select
+select SQL_CALC_FOUND_ROWS
<allTableFields("t.")>
from <tableName()> t
where <CHECK_TENANT("t.")>
diff --git a/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritance.java b/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritance.java
index bc1c714..1306cfe 100644
--- a/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritance.java
+++ b/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritance.java
@@ -113,7 +113,7 @@ public class TestStringTemplateInheritance extends UtilTestSuiteNoDB {
"from kombucha t\n" +
"where t.tenant_record_id = :tenantRecordId\n" +
";");
- Assert.assertEquals(kombucha.getInstanceOf("get", ImmutableMap.<String, String>of("orderBy", "recordId", "offset", "3", "rowCount", "12")).toString(), "select\n" +
+ Assert.assertEquals(kombucha.getInstanceOf("get", ImmutableMap.<String, String>of("orderBy", "recordId", "offset", "3", "rowCount", "12")).toString(), "select SQL_CALC_FOUND_ROWS\n" +
" t.record_id\n" +
", t.id\n" +
", t.tea\n" +
diff --git a/util/src/test/java/com/ning/billing/util/entity/dao/MockEntityDaoBase.java b/util/src/test/java/com/ning/billing/util/entity/dao/MockEntityDaoBase.java
index d51217e..0aabc34 100644
--- a/util/src/test/java/com/ning/billing/util/entity/dao/MockEntityDaoBase.java
+++ b/util/src/test/java/com/ning/billing/util/entity/dao/MockEntityDaoBase.java
@@ -74,8 +74,8 @@ public class MockEntityDaoBase<M extends EntityModelDao<E>, E extends Entity, U
}
@Override
- public Pagination<M> get(final Long offset, final Long rowCount, final InternalTenantContext context) {
- return DefaultPagination.<M>build(offset, rowCount, ImmutableList.<M>copyOf(getAll(context)));
+ public Pagination<M> get(final Long offset, final Long limit, final InternalTenantContext context) {
+ return DefaultPagination.<M>build(offset, limit, ImmutableList.<M>copyOf(getAll(context)));
}
@Override
diff --git a/util/src/test/java/com/ning/billing/util/entity/TestDefaultPagination.java b/util/src/test/java/com/ning/billing/util/entity/TestDefaultPagination.java
index cfb29f5..2600ff1 100644
--- a/util/src/test/java/com/ning/billing/util/entity/TestDefaultPagination.java
+++ b/util/src/test/java/com/ning/billing/util/entity/TestDefaultPagination.java
@@ -46,8 +46,8 @@ public class TestDefaultPagination extends UtilTestSuiteNoDB {
Assert.assertEquals(DefaultPagination.<Integer>build(5L, 3L, ImmutableList.<Integer>of(1, 2, 3, 4, 5)), expectedOf(5L, 0L, 5L, ImmutableList.<Integer>of()));
}
- private Pagination<Integer> expectedOf(final Long currentOffset, final Long approximateNbResults,
- final Long approximateTotalNbResults, final List<Integer> delegate) {
- return new DefaultPagination<Integer>(currentOffset, approximateNbResults, approximateTotalNbResults, delegate.iterator());
+ private Pagination<Integer> expectedOf(final Long currentOffset, final Long totalNbRecords,
+ final Long maxNbRecords, final List<Integer> delegate) {
+ return new DefaultPagination<Integer>(currentOffset, Long.MAX_VALUE, totalNbRecords, maxNbRecords, delegate.iterator());
}
}