Skip to content

Commit

Permalink
Merge pull request #562 from nscuro/fix-getcount
Browse files Browse the repository at this point in the history
Fix `getCount` for queries with subqueries
  • Loading branch information
stevespringett authored May 9, 2024
2 parents 114476d + 15ad672 commit 69fc8cd
Showing 1 changed file with 20 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

import alpine.common.validation.RegexSequence;
import alpine.resources.AlpineRequest;
import io.jsonwebtoken.lang.Collections;
import org.apache.commons.collections4.CollectionUtils;
import org.datanucleus.api.jdo.JDOQuery;

Expand Down Expand Up @@ -257,11 +256,16 @@ public <T> Query<T> decorate(final Query<T> query) {
*/
public long getCount(final Query<?> query, final Object... parameters) {
final org.datanucleus.store.query.Query<?> internalQuery = ((JDOQuery<?>) query).getInternalQuery();
final Query<?> countQuery = pm.newQuery(internalQuery.getCandidateClass());
countQuery.setFilter(internalQuery.getFilter());
countQuery.setParameters(parameters);
countQuery.setResult("count(this)");
return executeAndCloseResultUnique(countQuery, Long.class);
final String originalOrdering = internalQuery.getOrdering();
query.setOrdering(null);
query.setResult("count(this)");
try {
// NB: Don't close the query as it is to be reused.
return (Long) query.executeWithArray(parameters);
} finally {
query.setOrdering(originalOrdering);
query.setResult(null);
}
}

/**
Expand All @@ -275,11 +279,16 @@ public long getCount(final Query<?> query, final Object... parameters) {
*/
public long getCount(final Query<?> query, final Map<String, Object> parameters) {
final org.datanucleus.store.query.Query<?> internalQuery = ((JDOQuery<?>) query).getInternalQuery();
final Query<?> countQuery = pm.newQuery(internalQuery.getCandidateClass());
countQuery.setFilter(internalQuery.getFilter());
countQuery.setNamedParameters(parameters);
countQuery.setResult("count(this)");
return executeAndCloseResultUnique(countQuery, Long.class);
final String originalOrdering = internalQuery.getOrdering();
query.setOrdering(null);
query.setResult("count(this)");
try {
// NB: Don't close the query as it is to be reused.
return (Long) query.executeWithMap(parameters);
} finally {
query.setOrdering(originalOrdering);
query.setResult(null);
}
}

/**
Expand Down

0 comments on commit 69fc8cd

Please sign in to comment.