OLAP-Style Optimized Moving Window Aggregate

If the _drop_value_extfn function is supplied, this moving window sum is evaluated using this calling pattern, which is more efficient than using _drop_value_extfn.

Query

select b, my_sum(a) over (partition by b rows between 1 preceding and current row) 
from t

Calling pattern

_start_extfn(cntxt)
_reset_extfn(cntxt)
_evaluate_aggregate_extfn(cntxt, args) 		 	-- returns  1
_evaluate_aggregate_extfn(cntxt, args) 				-- returns  3
_drop_value_extfn(cntxt)	 			 	 	-- input a=1
_next_value_extfn(cntxt, args)	  -- input a=3
_evaluate_aggregate_extfn(cntxt, args)				 -- returns  5
_reset_extfn(cntxt)
_next_value_extfn(cntxt, args)	  -- input a=4
_evaluate_aggregate_extfn(cntxt, args)				 -- returns  4
_next_value_extfn(cntxt, args)	  -- input a=5
_evaluate_aggregate_extfn(cntxt, args)		 		-- returns 9
_drop_value_extfn(cntxt) 		 		 	 -- input a=4
_next_value_extfn(cntxt, args)	  -- input a=6
_evaluate_aggregate_extfn(cntxt, args) 			 -- returns  11
_finish_extfn(cntxt)

Result

b,  my_sum(a)
1,  1
1,  3
1,  5
2,  4
2,  9
2,  11