Re: Window Functions patch v06 - Mailing list pgsql-hackers

From Hitoshi Harada
Subject Re: Window Functions patch v06
Date
Msg-id e08cc0400810111146p6fffd3c1hb0d051cfe78a380f@mail.gmail.com
Whole thread Raw
Responses Re: Window Functions patch v06
Re: Window Functions patch v06
List pgsql-hackers
I'm afraid the patch was too huge, trying to send it again without attachment...

I made up my mind to scratch former window functions and redesigned
completely new execution model, based on the discussion with Heikki.
Attached is the v06 against HEAD today.

http://umitanuki.net/pgsql/wfv06/design.html

The concrete design concept is noted in nodeWindow.c, quoted here:
* Note that the solid concept of the window functions is "they can access* arbitrary rows within the frame as they
want".As far as we keep the rule* of thumb, any kind of optimization is allowed.
 

And I threw away an idea that window functions are derived from
aggregates, then window functions are only simple single function,
which have capability to arbitrary random row access. By this mean,
aggregates are special subset of window functions so that aggregates
are treated special case in nodeWindow.c, processed in
eval_windowaggregate(), while normal window functions are in
eval_windowfunction().

By giving random row access, not only able to integrate aggregate to
window mechanism but we now have lead()/lag() support. Furthermore, I
can see FRAME clause (i.e. moving frame aggregate/cumulative
computation) can be added for 8.4 with this design though not
implemented yet.

Tom,
I added a function to tuplestore.c,
tuplestore_write_to_read_pointer(), that allows to copy write pointer
position to the one of readptrs. This is required for my case because
when the functions access randomly rows that the executor haven't read
out will be fetched (i.e. last row of the frame). And I hope you see
the nth_value() function require really arbitrary row access.

P.S.
As a volunteer, my spare time to work on this project is getting
limited, as my daily work is getting busy for the end of the year
(this is a Japanese traditional business sense -:). I don't know how
much I can work for the next commit fest but I can't believe it if
this feature would be missed in 8.4 *only* for my own tiny business
clients!

Regards,



-- 
Hitoshi Harada


pgsql-hackers by date:

Previous
From: "Pavel Stehule"
Date:
Subject: Re: patch: array_ndims
Next
From: Josh Berkus
Date:
Subject: Re: The Axe list