/** * Creates a {@link TypedQuery} for the given {@link Specification} and {@link Sort}. * * @param spec can be {@literal null}. * @param domainClass must not be {@literal null}. * @param sort must not be {@literal null}. * @return */ protected <S extends T> TypedQuery<S> getQuery(@Nullable Specification<S> spec, Class<S> domainClass, Sort sort) { CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<S> query = builder.createQuery(domainClass); Root<S> root = applySpecificationToCriteria(spec, domainClass, query); query.select(root); if (sort.isSorted()) { query.orderBy(toOrders(sort, root, builder)); } return applyRepositoryMethodMetadata(em.createQuery(query)); }
@Override protected KeyValueQuery<RedisOperationChain> complete(final RedisOperationChain criteria, Sort sort) { KeyValueQuery<RedisOperationChain> query = new KeyValueQuery<>(criteria); if (query.getCriteria() != null && !CollectionUtils.isEmpty(query.getCriteria().getSismember()) && !CollectionUtils.isEmpty(query.getCriteria().getOrSismember())) if (query.getCriteria().getSismember().size() == 1 && query.getCriteria().getOrSismember().size() == 1) { query.getCriteria().getOrSismember().add(query.getCriteria().getSismember().iterator().next()); query.getCriteria().getSismember().clear(); } if (sort.isSorted()) { query.setSort(sort); } return query; }
public void onCreation(PartTreeMongoQuery query) { PartTree tree = query.getTree(); if (!tree.hasPredicate()) { return; } Index index = new Index(); index.named(query.getQueryMethod().getName()); Sort sort = tree.getSort(); for (Part part : tree.getParts()) { if (GEOSPATIAL_TYPES.contains(part.getType())) { return; } String property = part.getProperty().toDotPath(); Direction order = toDirection(sort, property); index.on(property, order); } // Add fixed sorting criteria to index if (sort.isSorted()) { for (Order order : sort) { index.on(order.getProperty(), order.getDirection()); } } MongoEntityMetadata<?> metadata = query.getQueryMethod().getEntityInformation(); indexOperationsProvider.indexOps(metadata.getCollectionName()).ensureIndex(index); LOG.debug(String.format("Created %s!", index)); }
public boolean isUnsorted() { return !isSorted(); }
public void onCreation(PartTreeMongoQuery query) { PartTree tree = query.getTree(); if (!tree.hasPredicate()) { return; } Index index = new Index(); index.named(query.getQueryMethod().getName()); Sort sort = tree.getSort(); for (Part part : tree.getParts()) { if (GEOSPATIAL_TYPES.contains(part.getType())) { return; } String property = part.getProperty().toDotPath(); Direction order = toDirection(sort, property); index.on(property, order); } // Add fixed sorting criteria to index if (sort.isSorted()) { for (Order order : sort) { index.on(order.getProperty(), order.getDirection()); } } MongoEntityMetadata<?> metadata = query.getQueryMethod().getEntityInformation(); indexOperationsProvider.indexOps(metadata.getCollectionName()).ensureIndex(index); LOG.debug(String.format("Created %s!", index)); }
/** * Add given {@link Sort}. * * @param sort must not be {@literal null}. * @return */ public KeyValueQuery<T> orderBy(Sort sort) { Assert.notNull(sort, "Sort must not be null!"); if (this.sort.isSorted()) { this.sort = this.sort.and(sort); } else { this.sort = sort; } return this; }
protected <T> TypedQuery<T> getQuery(Class<T> clazz, @Nullable Specification<T> spec, Sort sort) { CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<T> query = builder.createQuery(clazz); Root<T> root = applySpecificationToCriteria(clazz, spec, query); query.select(root); if (sort.isSorted()) { query.orderBy(toOrders(sort, root, builder)); } return entityManager.createQuery(query); }
/** * Returns the current {@link Sort} or the given one if the current one is unsorted. * * @param sort must not be {@literal null}. * @return */ default Sort getSortOr(Sort sort) { Assert.notNull(sort, "Fallback Sort must not be null!"); return getSort().isSorted() ? getSort() : sort; }
@Override protected KeyValueQuery<VaultQuery> complete(VaultQuery vaultQuery, Sort sort) { KeyValueQuery<VaultQuery> query = new KeyValueQuery<>(vaultQuery); if (sort.isSorted()) { query.orderBy(sort); } return query; }
@Override protected KeyValueQuery<SpelExpression> complete(String criteria, Sort sort) { KeyValueQuery<SpelExpression> query = new KeyValueQuery<>(this.expression); if (sort.isSorted()) { query.orderBy(sort); } return query; }
@Override protected KeyValueQuery<SpelExpression> complete(String criteria, Sort sort) { KeyValueQuery<SpelExpression> query = new KeyValueQuery<>(this.expression); if (sort.isSorted()) { query.orderBy(sort); } return query; }
@Override protected KeyValueQuery<SpelExpression> complete(String criteria, Sort sort) { KeyValueQuery<SpelExpression> query = new KeyValueQuery<>(this.expression); if (sort.isSorted()) { query.orderBy(sort); } return query; }
public DocumentQuery with(@NonNull Sort sort) { if (sort.isSorted()) { this.sort = sort.and(this.sort); } return this; }
private <R> FetchSpec<R> exchange(BiFunction<Row, RowMetadata, R> mappingFunction) { List<String> columns; if (this.projectedFields.isEmpty()) { columns = dataAccessStrategy.getAllColumns(typeToRead); } else { columns = this.projectedFields; } Sort sortToUse = sort.isSorted() ? dataAccessStrategy.getMappedSort(typeToRead, sort) : Sort.unsorted(); QueryOperation select = dataAccessStrategy.select(table, new LinkedHashSet<>(columns), sortToUse, page); return execute(select.get(), mappingFunction); }
private <R> FetchSpec<R> exchange(BiFunction<Row, RowMetadata, R> mappingFunction) { List<String> columns; if (this.projectedFields.isEmpty()) { columns = dataAccessStrategy.getAllColumns(typeToRead); } else { columns = this.projectedFields; } Sort sortToUse = sort.isSorted() ? dataAccessStrategy.getMappedSort(typeToRead, sort) : Sort.unsorted(); QueryOperation select = dataAccessStrategy.select(table, new LinkedHashSet<>(columns), sortToUse, page); return execute(select.get(), mappingFunction); }
@Override protected KeyValueQuery<RedisOperationChain> complete(final RedisOperationChain criteria, Sort sort) { KeyValueQuery<RedisOperationChain> query = new KeyValueQuery<>(criteria); if (query.getCriteria() != null && !CollectionUtils.isEmpty(query.getCriteria().getSismember()) && !CollectionUtils.isEmpty(query.getCriteria().getOrSismember())) if (query.getCriteria().getSismember().size() == 1 && query.getCriteria().getOrSismember().size() == 1) { query.getCriteria().getOrSismember().add(query.getCriteria().getSismember().iterator().next()); query.getCriteria().getSismember().clear(); } if (sort.isSorted()) { query.setSort(sort); } return query; }
@Override public <T> Page<T> findAll(Pageable pageable, Class<T> domainClass, String collectionName) { final DocumentQuery query = new DocumentQuery(Criteria.getInstance(CriteriaType.ALL)).with(pageable); if (pageable.getSort().isSorted()) { query.with(pageable.getSort()); } return paginationQuery(query, domainClass, collectionName); }
@Override public Page<T> findAll(Predicate predicate, Pageable pageable) { AbstractCollQuery<T, ?> query = prepareQuery(predicate); if (pageable.isPaged() || pageable.getSort().isSorted()) { query.offset(pageable.getOffset()); query.limit(pageable.getPageSize()); if (pageable.getSort().isSorted()) { query.orderBy(toOrderSpecifier(pageable.getSort(), builder)); } } return new PageImpl<>(query.fetchResults().getResults(), pageable, count(predicate)); }
@Override public Page<T> findAll(Predicate predicate, Pageable pageable) { AbstractCollQuery<T, ?> query = prepareQuery(predicate); if (pageable.isPaged() || pageable.getSort().isSorted()) { query.offset(pageable.getOffset()); query.limit(pageable.getPageSize()); if (pageable.getSort().isSorted()) { query.orderBy(toOrderSpecifier(pageable.getSort(), builder)); } } return new PageImpl<>(query.fetchResults().getResults(), pageable, count(predicate)); }
@Override public Page<T> findAll(Predicate predicate, Pageable pageable) { AbstractCollQuery<T, ?> query = prepareQuery(predicate); if (pageable.isPaged() || pageable.getSort().isSorted()) { query.offset(pageable.getOffset()); query.limit(pageable.getPageSize()); if (pageable.getSort().isSorted()) { query.orderBy(toOrderSpecifier(pageable.getSort(), builder)); } } return new PageImpl<>(query.fetchResults().getResults(), pageable, count(predicate)); }