diff --git a/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java b/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java index 66c3412d7..2bb99910d 100644 --- a/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java +++ b/querydsl-core/src/main/java/com/mysema/query/DefaultQueryMetadata.java @@ -36,6 +36,8 @@ public class DefaultQueryMetadata implements QueryMetadata{ private CascadingBoolean where = new CascadingBoolean(); private boolean distinct; + + private QueryModifiers modifiers = QueryModifiers.getDefault(); public List> getGroupBy() { return Collections.unmodifiableList(groupBy); @@ -117,5 +119,15 @@ public class DefaultQueryMetadata implements QueryMetadata{ public void setDistinct(boolean distinct) { this.distinct = distinct; } + + public QueryModifiers getModifiers() { + return modifiers; + } + + public void setModifiers(QueryModifiers restriction) { + this.modifiers = restriction; + } + + } diff --git a/querydsl-core/src/main/java/com/mysema/query/Projectable.java b/querydsl-core/src/main/java/com/mysema/query/Projectable.java index c316ff0ad..4ec87014a 100644 --- a/querydsl-core/src/main/java/com/mysema/query/Projectable.java +++ b/querydsl-core/src/main/java/com/mysema/query/Projectable.java @@ -120,6 +120,14 @@ public interface Projectable { * @return */ Object[] uniqueResult(Expr first, Expr second, Expr... rest); + + /** + * + * @param + * @param expr + * @return + */ + SearchResults listResults(Expr expr); } \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/mysema/query/ProjectableAdapter.java b/querydsl-core/src/main/java/com/mysema/query/ProjectableAdapter.java index bd3fddac3..e3e8f6247 100644 --- a/querydsl-core/src/main/java/com/mysema/query/ProjectableAdapter.java +++ b/querydsl-core/src/main/java/com/mysema/query/ProjectableAdapter.java @@ -64,6 +64,11 @@ public abstract class ProjectableAdapter implements Projectable{ return projectable.list(projection); } + public SearchResults listResults(Expr expr){ + return projectable.listResults(expr); + } + + public List listDistinct(Expr projection) { return projectable.listDistinct(projection); } diff --git a/querydsl-core/src/main/java/com/mysema/query/QueryBaseWithProjection.java b/querydsl-core/src/main/java/com/mysema/query/QueryBaseWithProjection.java index 84e465800..6617e9350 100644 --- a/querydsl-core/src/main/java/com/mysema/query/QueryBaseWithProjection.java +++ b/querydsl-core/src/main/java/com/mysema/query/QueryBaseWithProjection.java @@ -57,6 +57,18 @@ public abstract class QueryBaseWithProjection List list(Expr projection) { return IteratorUtils.toList(iterate(projection)); } + + public SearchResults listResults(Expr projection){ + QueryModifiers modifiers = getMetadata().getModifiers(); + List list = list(projection); + if (list.isEmpty()){ + return SearchResults.emptyResults(); + }else{ + int start = Math.min(modifiers.getOffset(), list.size()); + int end = Math.min(modifiers.getOffset() + modifiers.getLimit(), list.size()); + return new SearchResults(list.subList(start, end), modifiers, list.size()); + } + } public final List listDistinct(Expr first, Expr second, Expr... rest) { getMetadata().setDistinct(true); diff --git a/querydsl-core/src/main/java/com/mysema/query/QueryMetadata.java b/querydsl-core/src/main/java/com/mysema/query/QueryMetadata.java index 35e22ae5e..5c6fd3d60 100644 --- a/querydsl-core/src/main/java/com/mysema/query/QueryMetadata.java +++ b/querydsl-core/src/main/java/com/mysema/query/QueryMetadata.java @@ -54,4 +54,7 @@ public interface QueryMetadata { void setDistinct(boolean distinct); + QueryModifiers getModifiers(); + + void setModifiers(QueryModifiers restriction); } \ No newline at end of file