Thanks, yeah I thought so too. Merged

On Wed, Oct 26, 2022 at 10:31 AM Robert Muir <rcm...@gmail.com> wrote:
>
> I think deferring the advance call like this is fine and harmless,
> only because this DoubleValues "caches" the result for the current
> doc, so its idempotent anyway.
>
> Yes, about "advancing all the operands" as I mentioned, expressions
> has no clue about this. If you wanted to change it, you'd have to push
> both advancing AND caching down lower into the actual compiled
> expression code.
>
> I think this would add way too much complexity, especially when it
> would only improve the ternary "if" feature in such cases.
>
> On Wed, Oct 26, 2022 at 10:23 AM Michael Sokolov <msoko...@gmail.com> wrote:
> >
> > see https://github.com/apache/lucene/pull/11878 ... it doesn't do what
> > I initially asked for (still advances all of the operands), but it
> > delays until doubleValue() is called, which is safe and could have
> > some impact
> >
> > On Wed, Oct 26, 2022 at 9:58 AM Michael Sokolov <msoko...@gmail.com> wrote:
> > >
> > > Hi, yes, makes sense Mikhail, that will address most of the problem.
> > > But I also think, given the way Expressions work (they always return
> > > true from advanceExact) there is no reason for them to advance their
> > > operands. This shifts the burden/concern from the developer who no
> > > longer has to think as hard about this :)  - let me post a PR that
> > > shows
> > >
> > > On Wed, Oct 26, 2022 at 3:52 AM Mikhail Khludnev <m...@apache.org> wrote:
> > > >
> > > > Hello, Michael.
> > > > I suppose you can bind f2 to custom lazy implementation of 
> > > > DoubleValuesSource, which defer advanceExact() by storing doc num and 
> > > > returning true always, and actually advancing on doubleValue() only.
> > > >
> > > > On Tue, Oct 25, 2022 at 8:13 PM Michael Sokolov <msoko...@gmail.com> 
> > > > wrote:
> > > >>
> > > >> ExpressionFunctionValueSource lazily evaluates in doubleValues: an
> > > >> expression like
> > > >>
> > > >>    condition ? f1 : f2
> > > >>
> > > >> will only evaluate one of f1 or f2.
> > > >>
> > > >> At the same time, the advanceExact() call is greedy -- when you
> > > >> advance that expression it will also advance both f1 and f2. But
> > > >> here's the thing: it always returns true, regardless of whether f1 and
> > > >> f2 advance. Which makes sense from the point of view of the lazy
> > > >> evaluation -- if condition is true we don't care whether f2 advances
> > > >> or not.
> > > >>
> > > >> My question is whether we could defer these child advanceExact calls
> > > >> until ExpressionFunctionValues.doubleValue()?
> > > >>
> > > >> ---------------------------------------------------------------------
> > > >> To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
> > > >> For additional commands, e-mail: dev-h...@lucene.apache.org
> > > >>
> > > >
> > > >
> > > > --
> > > > Sincerely yours
> > > > Mikhail Khludnev
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
> > For additional commands, e-mail: dev-h...@lucene.apache.org
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
> For additional commands, e-mail: dev-h...@lucene.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to