Skip to content

Commit

Permalink
Throw UnsupportedOperationException where cursored pageable is not ye…
Browse files Browse the repository at this point in the history
…t supported
  • Loading branch information
andriy-dmytruk committed Apr 18, 2024
1 parent fbc8570 commit 019dacd
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import io.micronaut.data.model.Association;
import io.micronaut.data.model.Embedded;
import io.micronaut.data.model.Pageable;
import io.micronaut.data.model.Pageable.Mode;
import io.micronaut.data.model.PersistentEntity;
import io.micronaut.data.model.PersistentProperty;
import io.micronaut.data.model.PersistentPropertyPath;
Expand Down Expand Up @@ -329,6 +330,9 @@ public Map<String, String> getAdditionalRequiredParameters() {
@NonNull
@Override
public QueryResult buildPagination(@NonNull Pageable pageable) {
if (pageable.getMode() != Mode.OFFSET) {
throw new UnsupportedOperationException("Pageable mode " + pageable.getMode() + " is not supported by cosmos operations");
}
int size = pageable.getSize();
if (size > 0) {
StringBuilder builder = new StringBuilder(" ");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import io.micronaut.data.annotation.QueryHint;
import io.micronaut.data.jpa.annotation.EntityGraph;
import io.micronaut.data.model.Pageable;
import io.micronaut.data.model.Pageable.Mode;
import io.micronaut.data.model.Sort;
import io.micronaut.data.model.query.builder.jpa.JpaQueryBuilder;
import io.micronaut.data.model.runtime.PagedQuery;
Expand Down Expand Up @@ -335,6 +336,9 @@ protected <R> void collectFindAll(S session, PreparedQuery<?, R> preparedQuery,
String queryStr = preparedQuery.getQuery();
Pageable pageable = preparedQuery.getPageable();
if (pageable != Pageable.UNPAGED) {
if (pageable.getMode() != Mode.OFFSET) {
throw new UnsupportedOperationException("Pageable mode " + pageable.getMode() + " is not supported by hibernate operations");
}
Sort sort = pageable.getSort();
if (sort.isSorted()) {
queryStr += QUERY_BUILDER.buildOrderBy(queryStr, getEntity(preparedQuery.getRootEntity()), AnnotationMetadata.EMPTY_METADATA, sort,
Expand Down Expand Up @@ -599,6 +603,9 @@ private void bindPageable(P q, @NonNull Pageable pageable) {
// no pagination
return;
}
if (pageable.getMode() != Mode.OFFSET) {
throw new UnsupportedOperationException("Pageable mode " + pageable.getMode() + " is not supported by hibernate operations");
}

int max = pageable.getSize();
if (max > 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.mongodb.client.model.Sorts;
import io.micronaut.core.annotation.Internal;
import io.micronaut.data.model.Pageable;
import io.micronaut.data.model.Pageable.Mode;
import io.micronaut.data.model.Sort;
import io.micronaut.data.model.runtime.PreparedQuery;
import io.micronaut.data.model.runtime.RuntimePersistentEntity;
Expand Down Expand Up @@ -81,6 +82,9 @@ public MongoFind getFind() {
MongoFind find = mongoStoredQuery.getFind(defaultPreparedQuery.getContext());
Pageable pageable = defaultPreparedQuery.getPageable();
if (pageable != Pageable.UNPAGED) {
if (pageable.getMode() != Mode.OFFSET) {
throw new UnsupportedOperationException("Mode " + pageable.getMode() + " is not supported by the MongoDB implementation");
}
MongoFindOptions findOptions = find.getOptions();
MongoFindOptions options = findOptions == null ? new MongoFindOptions() : new MongoFindOptions(findOptions);
options.limit(pageable.getSize()).skip((int) pageable.getOffset());
Expand Down Expand Up @@ -113,6 +117,9 @@ public PreparedQuery<E, R> getPreparedQueryDelegate() {
private int applyPageable(Pageable pageable, List<Bson> pipeline) {
int limit = 0;
if (pageable != Pageable.UNPAGED) {
if (pageable.getMode() != Mode.OFFSET) {
throw new UnsupportedOperationException("Mode " + pageable.getMode() + " is not supported by the MongoDB implementation");
}
int skip = (int) pageable.getOffset();
limit = pageable.getSize();
Sort pageableSort = pageable.getSort();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import io.micronaut.data.exceptions.DataAccessException;
import io.micronaut.data.model.Page;
import io.micronaut.data.model.Pageable;
import io.micronaut.data.model.Pageable.Mode;
import io.micronaut.data.model.PersistentEntity;
import io.micronaut.data.model.PersistentProperty;
import io.micronaut.data.model.runtime.AttributeConverterRegistry;
Expand Down Expand Up @@ -316,6 +317,9 @@ private <T, R> Iterable<R> findAllAggregated(ClientSession clientSession,
MongoPreparedQuery<T, R> preparedQuery,
boolean stream) {
Pageable pageable = preparedQuery.getPageable();
if (pageable.getMode() != Mode.OFFSET) {
throw new UnsupportedOperationException("Mode " + pageable.getMode() + " is not supported by the MongoDB implementation");
}
int limit = pageable == Pageable.UNPAGED ? -1 : pageable.getSize();
Class<T> type = preparedQuery.getRootEntity();
Class<R> resultType = preparedQuery.getResultType();
Expand All @@ -334,6 +338,9 @@ private <T, R> Iterable<R> findAllFiltered(ClientSession clientSession,
MongoPreparedQuery<T, R> preparedQuery,
boolean stream) {
Pageable pageable = preparedQuery.getPageable();
if (pageable.getMode() != Mode.OFFSET) {
throw new UnsupportedOperationException("Mode " + pageable.getMode() + " is not supported by the MongoDB implementation");
}
int limit = pageable == Pageable.UNPAGED ? -1 : pageable.getSize();
Class<T> type = preparedQuery.getRootEntity();
Class<R> resultType = preparedQuery.getResultType();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import io.micronaut.data.intercept.RepositoryMethodKey;
import io.micronaut.data.model.AssociationUtils;
import io.micronaut.data.model.Pageable;
import io.micronaut.data.model.Pageable.Mode;
import io.micronaut.data.model.Sort;
import io.micronaut.data.model.jpa.criteria.PersistentEntityFrom;
import io.micronaut.data.model.jpa.criteria.impl.QueryResultPersistentEntityCriteriaQuery;
Expand Down Expand Up @@ -141,6 +142,9 @@ protected final Iterable<?> findAll(RepositoryMethodKey methodKey, MethodInvocat
CriteriaQuery<Object> query = buildQuery(context, type, methodJoinPaths);
Pageable pageable = getPageable(context);
if (pageable != null) {
if (pageable.getMode() != Mode.OFFSET) {
throw new UnsupportedOperationException("Pageable mode " + pageable.getMode() + " is not supported with specifications");
}
return criteriaRepositoryOperations.findAll(query, (int) pageable.getOffset(), pageable.getSize());
}
return criteriaRepositoryOperations.findAll(query);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import io.micronaut.data.exceptions.DataAccessException;
import io.micronaut.data.intercept.RepositoryMethodKey;
import io.micronaut.data.model.Pageable;
import io.micronaut.data.model.Pageable.Mode;
import io.micronaut.data.model.query.JoinPath;
import io.micronaut.data.operations.RepositoryOperations;
import io.micronaut.data.operations.reactive.ReactiveCapableRepository;
Expand Down Expand Up @@ -76,6 +77,9 @@ protected final Publisher<Object> findAllReactive(RepositoryMethodKey methodKey,
CriteriaQuery<Object> criteriaQuery = buildQuery(context, type, methodJoinPaths);
Pageable pageable = getPageable(context);
if (pageable != null) {
if (pageable.getMode() != Mode.OFFSET) {
throw new UnsupportedOperationException("Pageable mode " + pageable.getMode() + " is not supported by hibernate operations");
}
return reactiveCriteriaOperations.findAll(criteriaQuery, (int) pageable.getOffset(), pageable.getSize());
}
return reactiveCriteriaOperations.findAll(criteriaQuery);
Expand Down

0 comments on commit 019dacd

Please sign in to comment.