the count in the fragment has an obvious trivial bug: it counts objects while one of the objects is the actual count. it should read ``` if (count < (objects.size() - 1)) { count = objects.size() - 1; } ```
On Mon, Jul 1, 2019 at 10:57 AM Rohit Yadav <rohit.ya...@shapeblue.com> wrote: > In some cases where the response is being paginated, the count would > represent the total number of resources while the size of the returned > array/list of resources would be less. > > > Regards, > > Rohit Yadav > > Software Architect, ShapeBlue > > https://www.shapeblue.com > > ________________________________ > From: Anurag Awasthi <anurag.awas...@shapeblue.com> > Sent: Monday, July 1, 2019 9:43:35 AM > To: dev@cloudstack.apache.org > Subject: Question about GenericDaoBase#searchAndCount method > > Hi Devs, > > I was looking at a bug and observed that In > GenericDaoBase.java#searchAndCount we have the following function - > > public Pair<List<T>, Integer> searchAndCount(final SearchCriteria<T> sc, > final Filter filter) { > List<T> objects = search(sc, filter, null, false); > Integer count = getCount(sc); > // Count cannot be less than the result set but can be higher due > to pagination, see CLOUDSTACK-10320 > if (count < objects.size()) { > count = objects.size(); > } > return new Pair<List<T>, Integer>(objects, count); > } > > Internally the getCount above ignores the Group By parts of Search Query > to retrieve count. It could result in the List and Count being returned as > different. Perhaps some documentation is missing here. Does anyone know why > we have this logic? > > Regards, > Anurag > > anurag.awas...@shapeblue.com > www.shapeblue.com<http://www.shapeblue.com> > Amadeus House, Floral Street, London WC2E 9DPUK > @shapeblue > > > > > rohit.ya...@shapeblue.com > www.shapeblue.com > Amadeus House, Floral Street, London WC2E 9DPUK > @shapeblue > > > > -- Daan