Sorry I was looking at FeatureSource, thinking ... - FeatureSource is the priority, as it is used to do paged queries (each one of which returns a feature collection). - The general approach (return Integer.MAX_VALUE if needful, and provide an alternate method that returns long is a good one) - The estimate size discussion is useful, since it only really becomes an issue when we have very large numbers of features, although estimating based on index would be possible
Okay putting that together how about: /** * Returns the number of elements in this collection. If this collection contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE. * Please note this operation may be expensive when working with remote content. * @see java.util.Collection#size() * @return the number of elements in this collection */ int size(); /** * Estimates the number of elements in this collection, to be used when {@link #size()} is limited by Integer.MAX_VALUE or is too expensive when working with remote content. * @parm lenient Use true to allow a size estimate in cases where exact count is expensive due to size or distributed content * @return the number of elements in this collection */ long size( boolean lenient ) The use of lenient above gives a different method signature and is in agreement with CRS.decode method usage. -- Jody Garnett On Wed, 2 Sep 2020 at 10:55, Andrea Aime <andrea.a...@geo-solutions.it> wrote: > Hi Jody, > I like this road, works fine for FeatureSource. > What about FeatureCollection though? It's already using "int size()", from > the interface: > > /** > * Please note this operation may be expensive when working with remote > content. > * > * @see java.util.Collection#size() > */ > int size(); > > > Cheers > Andrea > > > On Wed, Sep 2, 2020 at 7:45 PM Jody Garnett <jody.garn...@gmail.com> > wrote: > >> Here is another softer approach: >> /** >> * @return Returns the number of features in this collection, if this >> collection contains more than Integer.MAX_VALUE elements, returns >> Integer.MAX_VALUE. >> * @deprecated Please use count() >> */ >> public int getCount(); >> >> public long size(); >> >> This gives us a clear api migration and does not immediately break >> projects when they upgrade. The size() name matches how Collections.size() >> handles a size greater than the range of Integer.MAX_VALUE. >> >> -- >> Jody Garnett >> >> >> On Wed, 2 Sep 2020 at 06:43, Andrea Aime <andrea.a...@geo-solutions.it> >> wrote: >> >>> Hi, any other opinion on this? >>> >>> Personally I would not like breaking all existing store implementations >>> and clients, for a "clean break" it seems quite bloody :-D >>> But Jody suggests to go that way. >>> >>> Some tie breaker, or even multiple votes leading to another tie, would >>> be appreciated, ha! >>> >>> Cheers >>> Andrea >>> >>> On Thu, Aug 27, 2020 at 11:16 PM Andrea Aime < >>> andrea.a...@geo-solutions.it> wrote: >>> >>>> Hi Jody, >>>> comment inline. >>>> >>>> On Thu, Aug 27, 2020 at 11:06 PM Jody Garnett <jody.garn...@gmail.com> >>>> wrote: >>>> >>>>> We are just about to start a new release cycle, API changes are a >>>>> short-term pain, but the most maintainable approach long term. >>>>> >>>>> As for the change, how about returning a returning long? Existing >>>>> client code that used integrer would be easy to update. >>>>> >>>>> long count = featureSource.getCount(query); >>>>> >>>>> Or: >>>>> >>>>> int count = (int) featureSource.getCount(query); >>>>> >>>>> >>>> We can gauge how easy it is by doing the switch in GT/GS... >>>> Maybe it could be done as a refactor... but I cannot imagine exactly >>>> how yet. Closest thing to something working may be: >>>> >>>> 1) Rename existing getCount to getCountOld via refactor >>>> 2) Add a new method called getCount, returning long, make it abstract, >>>> have a default implementation of getCountOld delegating to getCount >>>> 3) Fix all implementations, switching them from getCountOld to getCount >>>> 4) Inline getCountOld, that should fix all calling points >>>> >>>> Hopefully that should not be too much work, I hope there are few >>>> implementations of FeatureSource/Collection but many >>>> client code calls using them. >>>> >>>> >>>>> If you really want Java 8 has Math.toIntExact method, that produces an >>>>> exception if the long is out of range: >>>>> >>>>> int count = Math. toIntExact( featureSource.getCount(query) ); >>>>> >>>>> >>>> That would also work yes >>>> >>>> Cheers >>>> Andrea >>>> >>>> == GeoServer Professional Services from the experts! Visit >>>> http://goo.gl/it488V for more information. == Ing. Andrea Aime >>>> @geowolf Technical Lead GeoSolutions S.A.S. Via di Montramito 3/A 55054 >>>> Massarosa (LU) phone: +39 0584 962313 fax: +39 0584 1660272 mob: +39 339 >>>> 8844549 http://www.geo-solutions.it http://twitter.com/geosolutions_it >>>> ------------------------------------------------------- *Con >>>> riferimento alla normativa sul trattamento dei dati personali (Reg. UE >>>> 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si >>>> precisa che ogni circostanza inerente alla presente email (il suo >>>> contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è >>>> riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il >>>> messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra >>>> operazione è illecita. Le sarei comunque grato se potesse darmene notizia. >>>> This email is intended only for the person or entity to which it is >>>> addressed and may contain information that is privileged, confidential or >>>> otherwise protected from disclosure. We remind that - as provided by >>>> European Regulation 2016/679 “GDPR” - copying, dissemination or use of this >>>> e-mail or the information herein by anyone other than the intended >>>> recipient is prohibited. If you have received this email by mistake, please >>>> notify us immediately by telephone or e-mail.* >>>> >>> >>> >>> -- >>> >>> Regards, Andrea Aime >>> >>> == GeoServer Professional Services from the experts! Visit >>> http://goo.gl/it488V for more information. == Ing. Andrea Aime @geowolf >>> Technical Lead GeoSolutions S.A.S. Via di Montramito 3/A 55054 Massarosa >>> (LU) phone: +39 0584 962313 fax: +39 0584 1660272 mob: +39 339 8844549 >>> http://www.geo-solutions.it http://twitter.com/geosolutions_it >>> ------------------------------------------------------- *Con >>> riferimento alla normativa sul trattamento dei dati personali (Reg. UE >>> 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si >>> precisa che ogni circostanza inerente alla presente email (il suo >>> contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è >>> riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il >>> messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra >>> operazione è illecita. Le sarei comunque grato se potesse darmene notizia. >>> This email is intended only for the person or entity to which it is >>> addressed and may contain information that is privileged, confidential or >>> otherwise protected from disclosure. We remind that - as provided by >>> European Regulation 2016/679 “GDPR” - copying, dissemination or use of this >>> e-mail or the information herein by anyone other than the intended >>> recipient is prohibited. If you have received this email by mistake, please >>> notify us immediately by telephone or e-mail.* >>> >> > > -- > > Regards, Andrea Aime > > == GeoServer Professional Services from the experts! Visit > http://goo.gl/it488V for more information. == Ing. Andrea Aime @geowolf > Technical Lead GeoSolutions S.A.S. Via di Montramito 3/A 55054 Massarosa > (LU) phone: +39 0584 962313 fax: +39 0584 1660272 mob: +39 339 8844549 > http://www.geo-solutions.it http://twitter.com/geosolutions_it > ------------------------------------------------------- *Con riferimento > alla normativa sul trattamento dei dati personali (Reg. UE 2016/679 - > Regolamento generale sulla protezione dei dati “GDPR”), si precisa che ogni > circostanza inerente alla presente email (il suo contenuto, gli eventuali > allegati, etc.) è un dato la cui conoscenza è riservata al/i solo/i > destinatario/i indicati dallo scrivente. Se il messaggio Le è giunto per > errore, è tenuta/o a cancellarlo, ogni altra operazione è illecita. Le > sarei comunque grato se potesse darmene notizia. This email is intended > only for the person or entity to which it is addressed and may contain > information that is privileged, confidential or otherwise protected from > disclosure. We remind that - as provided by European Regulation 2016/679 > “GDPR” - copying, dissemination or use of this e-mail or the information > herein by anyone other than the intended recipient is prohibited. If you > have received this email by mistake, please notify us immediately by > telephone or e-mail.* >
_______________________________________________ GeoTools-Devel mailing list GeoTools-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel