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

Reply via email to