Hi, I know that i am not Firebird core developer and I have less influence. But, why do you still say about WHILE, SUSSPEND, YIELD, FETCH if there is simple alternative to not have it at all? Can someone tell me what is wrong with my proposition? ------------------------------------------------------------------
Instead of simple create aggregate function custom_sum (i integer) returns (o integer) as begin if (i is not null) then begin if (o is null) then o = 0; o = o + i; end end you propose something like this create aggregate function custom_sum (i integer) returns (o integer) as begin while (not agg_finished) do begin if (i is not null) then begin if (o is null) then o = 0; o = o + i; end suspend; end end ------------------------------------------------------------------ instead of simple: create aggregate function custom_avg (i double precision) returns (o double precision) as declare accumulated double precision = 0; begin if (i is not null) then accumulated = accumulated + i; if (agg_result_needed and (accumulated is not null) then o = accumulated / agg_i; end you propose: create aggregate function custom_avg (i double precision) returns (o double precision) as declare count integer = 0; declare accumulated double precision = 0; begin while (not agg_finished) do begin if (i is not null) then begin count = count + 1; accumulated = accumulated + i; o = accumulated / count; end suspend; end end ------------------------------------------------------------------ Can you tell me also how you prevent: - Infinite while do (i know user should use it with care but why increase risk?) - that user do not write SUSPEND/YIELD/FETCH or user call it to many times? - minimize code execution like in avg? Instead of make one division you propose design where you must divide it always row by row. And e.g. if you have 1000 rows with only one grouping key, you have 1000 of additions and 1000 of divisions. ------------------------------------------------------------------ How work internal SUM, AVG already? They call yead/fetch/suspend or something like this? Or engine send them required state of parameters/variables? regards, Karol Bieniaszewski
Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel