jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marcel Reutegger <marcel.reuteg...@gmx.net>
Subject Re: Total size of a query result and setLimit()
Date Fri, 17 Aug 2007 13:13:11 GMT
Christoph Kiehl wrote:
> while fixing a little bug in rev 566778 I became aware that there is no 
> possibility to retrieve the total result size of a query anymore if 
> setLimit() is used. But I need that information and I think I'm not 
> alone. The question is how to implement this? Should this maybe even be 
> covered by jsr 283? The method could be either implemented on the 
> LazyScoreNodeIterator (RangeIterator) but may be it is more appropriate 
> for LazyQueryResultImpl/QueryResultImpl (QueryResult) because limits are 
> specific to querying. WDYT?

The public review version of JSR 283 only contains little information about the 
two methods setLimit(long) and setOffset(long). They even contain TODO remarks 
whether the methods should be removed again.

How they are specified currently they don't seem to be very useful to me. I 
think the spec (and of course also jackrabbit) should be changed the following way:

void setOffset(long offset)

Sets the start offset of the query result to _offset_. Setting an offset does 
not modify the size of the NodeIterator or RowIterator returned by the 
QueryResult. The following two code fragments behave equivalent from a client 
perspective (if there are 10 or more matching nodes):

Query q = ...
NodeIterator it = q.execute().getNodes();

is equivalent to:

Query q = ...
NodeIterator it = q.execute().getNodes();

The first code is considered more efficient because it allows an implementation 
to optimize access to the range of nodes in the query result a client is 
actually interested.

and as a replacement for setLimit():

void setFetchSize(long size)

Gives the QueryManager a hint as to the number of rows/nodes that should be 
fetched from the workspace when more rows/nodes are needed. The number of 
rows/nodes specified affects only QueryResults created using this Query. If the 
value specified is zero, then the hint is ignored. The default value is zero.



View raw message