I find checking null a bit cleaner. -1 is sooooo C :) but that's relatively minor and we can go either way.
> On 11 mars 2014, at 21:59, Randall Hauch <rha...@redhat.com> wrote: > > Maybe a Long rather than an Integer? Ints are so last year. :-) > > And, what about using a primitive that returns -1 when the method cannot > determine the size (if allowed by the parameter). Just as easy to check -1 > than it is to check null, IMO. > >> On Mar 11, 2014, at 2:21 PM, Emmanuel Bernard <emman...@hibernate.org> wrote: >> >> It does not work, I think, because if you implement your query via some map >> reduce and you do pagination, it will be costly to compute the size and you >> might want not to return it. >> Hence my Accuracy idea to clarify the intend to the API user. >> >>> On 11 Mar 2014, at 19:18, Sanne Grinovero <sa...@infinispan.org> wrote: >>> >>> what about we call it >>> >>> int getEstimatedResultSize() ? >>> >>> Having such a method occasionally return null looks very bad to me, >>> I'd rather remove the functionality. >>> >>> -- Sanne >>> >>>> On 11 March 2014 19:08, Emmanuel Bernard <emman...@hibernate.org> wrote: >>>> I agree with Randall. >>>> >>>> I tend to be very conservative about my public APIs. And offering an API >>>> that I think will block me in the future is something I tend to avoid. >>>> >>>> Something like .guessNbrOfMatchingElements() / .guessResultSize() would >>>> provide a better clue about the gamble the user takes. Note that the size >>>> is irrespective of the pagination applied which renders this result quite >>>> cool even if approximate. >>>> >>>> I’d be tempted not to put getResultSize() with an exact value in the >>>> public contract as iterating is probably going to as “fast”. >>>> >>>> An alternative is something like that (needs to be refined though) >>>> >>>> /** >>>> * Get the result size. >>>> * Approximate results are to be preferred as it is usually very cheap to >>>> compute. >>>> * If the computation is too expensive, the approximate accuracy returns >>>> null. >>>> * >>>> * Exact results are likely to be costly and require two queries. >>>> */ >>>> Integer getResultSize(Accuracy); >>>> enum Accuracy { EXACT, APPROXIMATE_OR_NULL } >>>> >>>> Emmanuel >>>> >>>>> On 11 Mar 2014, at 18:23, Randall Hauch <rha...@redhat.com> wrote: >>>>> >>>>> I disagree. Most developers have access to the JavaDoc, and if even >>>>> moderately well-written, they will find out what the method returns and >>>>> when. It’s no different than a method sometimes returning null rather >>>>> than an object reference. >>>>> >>>>>> On Mar 11, 2014, at 12:16 PM, Dennis Reed <der...@redhat.com> wrote: >>>>>> >>>>>> Providing methods that work sometimes and don't work other times is >>>>>> generally a bad idea. >>>>>> >>>>>> No matter how much you document it, users *will* try to use it and >>>>>> expect it to always work >>>>>> (either because they didn't read the docs that say otherwise, they think >>>>>> they'll stick to a configuration where it does work, etc.) >>>>>> >>>>>> And then when it doesn't work (because they pushed something to >>>>>> production which has a different configuration than dev, etc) >>>>>> it's a frustrating experience. >>>>>> >>>>>> -Dennis >>>>>> >>>>>>> On 03/11/2014 09:37 AM, Randall Hauch wrote: >>>>>>> I’m struggling with this same question in ModeShape. The JCR API >>>>>>> exposes a method that returns the number of results, but at least the >>>>>>> spec allows the implementation to return -1 if the size is not known >>>>>>> (or very expensive to compute). Yet this still does not satisfy all >>>>>>> cases. >>>>>>> >>>>>>> Depending upon the technology, computing the **exact size** ranges from >>>>>>> very cheap to extremely expensive to calculate. For example, consider a >>>>>>> system that has to take into account access control limitations of the >>>>>>> user. My current opinion is that few applications actually need an >>>>>>> exact size, and if they do there may be alternatives (like counting as >>>>>>> they iterate over the results). >>>>>>> >>>>>>> An alternative is to expose an **approximate size**, which is likely to >>>>>>> be sufficient for generating display or other pre-computed information >>>>>>> such as links or paging details. I think that this is sufficient for >>>>>>> most needs, and that even an order of magnitude is sufficient. When the >>>>>>> results are known to be small, the system might want to determine the >>>>>>> exact size (e.g., by iterating). >>>>>>> >>>>>>> So one option is to expose both methods, but allow the exact size >>>>>>> method to return -1 if the system can’t determine the size or if doing >>>>>>> so is very expensive. This allows the system a way out for >>>>>>> large/complex queries and flexibility in the implementation technology. >>>>>>> The approximate size method probably always needs to return at least >>>>>>> some usable value. >>>>>>> >>>>>>> BTW, computing an exact size by iterating can be expensive unless you >>>>>>> can keep all the results in memory. That’s not ideal - a query with >>>>>>> large results could fill up available memory. If you don’t keep all >>>>>>> results in memory, then if you’re going to allow clients to access the >>>>>>> results more than once you have to provide a way to buffer the results. >>>>>>> >>>>>>> >>>>>>>> On Mar 10, 2014, at 7:23 AM, Sanne Grinovero <sa...@infinispan.org> >>>>>>>> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> we are exposing a nice feature inherited from the Search engine via >>>>>>>> the "simple" DSL version, the one which is also available via Hot Rod: >>>>>>>> >>>>>>>> org.infinispan.query.dsl.Query.getResultSize() >>>>>>>> >>>>>>>> To be fair I hadn't noticed we do expose this, I just noticed after a >>>>>>>> recent PR review and I found it surprising. >>>>>>>> >>>>>>>> This method returns the size of the full resultset, disregarding >>>>>>>> pagination options; you can imagine it fit for situations like: >>>>>>>> >>>>>>>> "found 6 million matches, these are the top 20: " >>>>>>>> >>>>>>>> A peculiarity of Hibernate Search is that the total number of matches >>>>>>>> is extremely cheap to figure out as it's generally a side effect of >>>>>>>> finding the 20 results. Essentially we're just exposing an int value >>>>>>>> which was already computed: very cheap, and happens to be useful in >>>>>>>> practice. >>>>>>>> >>>>>>>> This is not the case with a SQL statement, in this case you'd have to >>>>>>>> craft 2 different SQL statements, often incurring the cost of 2 round >>>>>>>> trips to the database. So this getResultSize() is not available on the >>>>>>>> Hibernate ORM Query, only on our FullTextQuery extension. >>>>>>>> >>>>>>>> Now my doubt is if it is indeed a wise move to expose this method on >>>>>>>> the simplified DSL. Of course some people might find it useful, still >>>>>>>> I'm wondering how much we'll be swearing at needing to maintain this >>>>>>>> feature vs its usefulness when we'll implement alternative execution >>>>>>>> engines to run queries, not least on Map/Reduce based filtering, and >>>>>>>> ultimately hybrid strategies. >>>>>>>> >>>>>>>> In case of Map/Reduce I think we'll need to keep track of possible >>>>>>>> de-duplication of results, in case of a Teiid integration it might >>>>>>>> need a second expensive query; so in this case I'd expect this method >>>>>>>> to be lazily evaluated. >>>>>>>> >>>>>>>> Should we rather remove this functionality? >>>>>>>> >>>>>>>> Sanne >>>>>>>> _______________________________________________ >>>>>>>> infinispan-dev mailing list >>>>>>>> infinispan-dev@lists.jboss.org >>>>>>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>>>> >>>>>>> _______________________________________________ >>>>>>> infinispan-dev mailing list >>>>>>> infinispan-dev@lists.jboss.org >>>>>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>>> >>>>>> _______________________________________________ >>>>>> infinispan-dev mailing list >>>>>> infinispan-dev@lists.jboss.org >>>>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>>> >>>>> >>>>> _______________________________________________ >>>>> infinispan-dev mailing list >>>>> infinispan-dev@lists.jboss.org >>>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>>> >>>> >>>> _______________________________________________ >>>> infinispan-dev mailing list >>>> infinispan-dev@lists.jboss.org >>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>> >>> _______________________________________________ >>> infinispan-dev mailing list >>> infinispan-dev@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >> >> >> _______________________________________________ >> infinispan-dev mailing list >> infinispan-dev@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/infinispan-dev > > > _______________________________________________ > infinispan-dev mailing list > infinispan-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/infinispan-dev _______________________________________________ infinispan-dev mailing list infinispan-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/infinispan-dev