Don't call IDataProvider.size method when IDataProvider.iterator(first, count) 
returned the number of elements less than "count"
--------------------------------------------------------------------------------------------------------------------------------

                 Key: WICKET-2618
                 URL: https://issues.apache.org/jira/browse/WICKET-2618
             Project: Wicket
          Issue Type: Improvement
          Components: wicket
    Affects Versions: 1.4.4
            Reporter: Michael Mikhulya


IDataProvider has two mehtods:
        Iterator<? extends T> iterator(int first, int count);
        int size()
which in many implementations do access to database.
Normally iterator do SQL query with LIMIT and OFFSET, and size do SQL COUNT 
query.
SQL COUNT is O(N) for most transactional databases (e.g. for postgresql) and so 
it is rather heavy.
In some cases it is possible to avoid call to IDataProvider.size method.
For example when "iterator" returned the number of elements less than acquired 
"count".

This case appears in 90% in my application (whenever search is used normally 
number of found elements is less than number of elements on page).
Also pgFouine shows me these queries as the most slow one. So I suggest to 
implement this optimization.

First I though that appropriate place to implement it is AbstractPageableView 
class, but unfortunatelly not all IPageable classes extends this abstract class 
(for example DataTable doesn't do so).
So I suggest to implement Decorator of IDataProvider and reuse it in 
DataViewBase, DataTable, ...

If nobody see any problems with this suggestion I would like to implement it on 
my own.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to