This commit is contained in:
Timo Westkämper 2009-05-18 07:27:52 +00:00
parent f6d3d6f4a4
commit 9cb530a664
5 changed files with 40 additions and 0 deletions

View File

@ -36,6 +36,8 @@ public class DefaultQueryMetadata<JoinMeta> implements QueryMetadata<JoinMeta>{
private CascadingBoolean where = new CascadingBoolean();
private boolean distinct;
private QueryModifiers modifiers = QueryModifiers.getDefault();
public List<? extends Expr<?>> getGroupBy() {
return Collections.unmodifiableList(groupBy);
@ -117,5 +119,15 @@ public class DefaultQueryMetadata<JoinMeta> implements QueryMetadata<JoinMeta>{
public void setDistinct(boolean distinct) {
this.distinct = distinct;
}
public QueryModifiers getModifiers() {
return modifiers;
}
public void setModifiers(QueryModifiers restriction) {
this.modifiers = restriction;
}
}

View File

@ -120,6 +120,14 @@ public interface Projectable {
* @return
*/
Object[] uniqueResult(Expr<?> first, Expr<?> second, Expr<?>... rest);
/**
*
* @param <RT>
* @param expr
* @return
*/
<RT> SearchResults<RT> listResults(Expr<RT> expr);
}

View File

@ -64,6 +64,11 @@ public abstract class ProjectableAdapter implements Projectable{
return projectable.list(projection);
}
public <RT> SearchResults<RT> listResults(Expr<RT> expr){
return projectable.listResults(expr);
}
public <RT> List<RT> listDistinct(Expr<RT> projection) {
return projectable.listDistinct(projection);
}

View File

@ -57,6 +57,18 @@ public abstract class QueryBaseWithProjection<JoinMeta,SubType
public <RT> List<RT> list(Expr<RT> projection) {
return IteratorUtils.toList(iterate(projection));
}
public <RT> SearchResults<RT> listResults(Expr<RT> projection){
QueryModifiers modifiers = getMetadata().getModifiers();
List<RT> 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<RT>(list.subList(start, end), modifiers, list.size());
}
}
public final List<Object[]> listDistinct(Expr<?> first, Expr<?> second, Expr<?>... rest) {
getMetadata().setDistinct(true);

View File

@ -54,4 +54,7 @@ public interface QueryMetadata<JoinMeta> {
void setDistinct(boolean distinct);
QueryModifiers getModifiers();
void setModifiers(QueryModifiers restriction);
}