OLAP-style optimized moving window without current

If _drop_value_extfn function is supplied, this moving window count is evaluated through the following calling pattern. This case is similar to the previous moving window examples, but the current row is not part of the window frame.

Query

select b, my_sum(a) over (rows between 3 preceding and 1 preceding) 
from t

Calling pattern

_start_extfn(cntxt) 
_reset_extfn(cntxt) 
_evaluate_extfn(cntxt, args)          returns NULL 
_next_value_extfn(cntxt, args)      input a=1    
_evaluate_extfn(cntxt, args)          returns 1 
_next_value_extfn(cntxt, args)      input a=2    
_evaluate_extfn(cntxt, args)          returns 3 
_next_value_extfn(cntxt, args)      input a=3    
_evaluate_extfn(cntxt, args)          returns 6 
_dropvalue_extfn(cntxt)                 input a=1 
_next_value_extfn(cntxt, args)      input a=4    
_evaluate_extfn(cntxt, args)          returns 9 
_dropvalue_extfn(cntxt)                 input a=2 
_next_value_extfn(cntxt, args)      input a=5    
_evaluate_extfn(cntxt, args)          returns 12 
_finish_extfn(cntxt) 

Result

 b           my_sum(a)
 ---------- ------------- 
        1          NULL 
        1             1 
        1             3 
        2             6 
        2             9 
        2            12