> On 26 Jun 2018, at 17:11, Alexander Kuzmenkov <a.kuzmen...@postgrespro.ru> 
> wrote:

> I took a look at the patch. It applies and compiles, the tests pass.

Thanks for reviewing, and apologies for the slow response.

> Some thoughts about the code:
> 
> * Postgres lists cache their lengths, so you don't need uniqueLen.

Good point, fixed.

> * Use an array of WindowClauseSortNode's instead of a list. It's more 
> suitable here because you are going to sort (qsort_list creates a temporary 
> array).

I was thinking about that, but opted for code simplicity with a List approach.
The required size of the array isn’t known ahead of time, so it must either
potentially overallocate to the upper bound of root->parse->windowClause or use
heuristics and risk reallocating when growing, neither of which is terribly
appealing.  Do you have any suggestions or preferences?

> * Reversing the sorted list looks more confusing to me than just sorting it 
> in the proper order right away. A qsort() comparator returning negative means 
> "left goes before right", but here it is effectively the other way around.

Changed.
        
> * There is a function named make_pathkeys_for_window that makes a list of 
> canonical pathkeys given a window clause. Using this function to give you the 
> pathkeys, and then comparing them, would be more future-proof in case we ever 
> start using hashing for windowing. Moreover, the canonical pathkeys can be 
> compared with pointer comparison which is much faster than equal(). Still, 
> I'm not sure whether it's going to be convenient to use in this case, or even 
> whether it is a right thing to do. What do you think?

That’s an interesting thought, one that didn’t occur to me while hacking.  I’m
not sure whether is would be wise/clean to overload with this functionality
though.

Attached updated version also adds a testcase that was clearly missing from the
previous version and an updated window.out.

cheers ./daniel

Attachment: window_prefix_sort-v3.patch
Description: Binary data

Reply via email to