From 9cb530a6644bc6ee49d02421499397cd063faf88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 18 May 2009 07:27:52 +0000 Subject: [PATCH] --- .../java/com/mysema/query/DefaultQueryMetadata.java | 12 ++++++++++++ .../src/main/java/com/mysema/query/Projectable.java | 8 ++++++++ .../java/com/mysema/query/ProjectableAdapter.java | 5 +++++ .../com/mysema/query/QueryBaseWithProjection.java | 12 ++++++++++++ .../main/java/com/mysema/query/QueryMetadata.java | 3 +++ 5 files changed, 40 insertions(+) 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