You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Dan Klco (Jira)" <ji...@apache.org> on 2022/03/29 14:12:00 UTC

[jira] [Updated] (SLING-11230) Support Limit and Offset via JcrResourceProvider / findResources

     [ https://issues.apache.org/jira/browse/SLING-11230?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Dan Klco updated SLING-11230:
-----------------------------
    Fix Version/s:     (was: JCR Resource 3.2.2)

> Support Limit and Offset via JcrResourceProvider / findResources
> ----------------------------------------------------------------
>
>                 Key: SLING-11230
>                 URL: https://issues.apache.org/jira/browse/SLING-11230
>             Project: Sling
>          Issue Type: Improvement
>          Components: JCR
>            Reporter: Dan Klco
>            Assignee: Dan Klco
>            Priority: Minor
>
> *Problem Statement*
> In addition to not supporting global limits, there are good reasons that a developer may want to return only a sub-set of the query results when executing a query. For example returning the 10 latest uploaded files. 
> Currently this can be accomplished by executing a query and then only iterating to the 10th item, however a much larger query set may be fetched from the node store than required to service the intended use case. 
> In addition, to support paging, the current implementation would require retrieving and iterating over the Resources until the desired start point is found then reading the subsequent Resources.
> _However_ changing the API contract for the ResourceResolver to either add a new method with the start and limit values would have a non-insignificant ripple effect into the implementations, mocks and providers which would be required to support this new method.
> *Recommended Solution*
> Instead, support parsing the start and limit values from the query via a comment at the end of the query in the form:
> /* slingQueryStart=9, slingQueryLimit=10 */
> This has the advantage of already being ignored by the Oak implementation of JCR-SQL2 and would be relatively easy to parse.
> The JCR Resource Provider's Query Language Provider could then remove the comment from the original query and set the limit and start values appropriately. 
> *Alternative*
> Understandably, manipulating queries may not be desirable and there's a not insignificant possibility of backwards compatibility impact. As an alternative, I would recommend adding a new package to the API specifically for query support and in that provide a service interface and SPI for providers to implement which supports:
>  - Queries with limits and offsets
>  - Queries returning Streams as well as Iterators
>  - Queries which automatically Adapt the result to the desired type
>  - A SPI class for lazy adaptation of Stream and Iterators



--
This message was sent by Atlassian Jira
(v8.20.1#820001)