Re: Patch: Range Merge Join

From: Tomas Vondra <tomas(dot)vondra(at)enterprisedb(dot)com>
To: Thomas <thomasmannhart97(at)gmail(dot)com>, daniel(at)yesql(dot)se
Cc: Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec>, pgsql <pgsql(at)j-davis(dot)com>, pgsql-hackers(at)lists(dot)postgresql(dot)org, dignoes(at)inf(dot)unibz(dot)it, boehlen(at)ifi(dot)uzh(dot)ch, p(dot)moser(at)noi(dot)bz(dot)it, gamper(at)inf(dot)unibz(dot)it, Thomas Mannhart <thomas_m(at)hotmail(dot)ch>
Subject: Re: Patch: Range Merge Join
Date: 2021-11-17 22:28:43
Message-ID: 1dbe10e3-2264-d6ad-bd1f-6f98cf474818@enterprisedb.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 11/17/21 15:45, Thomas wrote:
> Thank you for the feedback and sorry for the oversight. I fixed the bug
> and attached a new version of the patch.
>
> Kind Regards, Thomas
>
> Am Mi., 17. Nov. 2021 um 15:03 Uhr schrieb Daniel Gustafsson
> <daniel(at)yesql(dot)se <mailto:daniel(at)yesql(dot)se>>:
>
> This patch fails to compile due to an incorrect function name in an
> assertion:
>
>   nodeMergejoin.c:297:9: warning: implicit declaration of function
> 'list_legth' is invalid in C99 [-Wimplicit-function-declaration]
>   Assert(list_legth(node->rangeclause) < 3);
>

That still doesn't compile with asserts, because MJCreateRangeData has

Assert(list_length(node->rangeclause) < 3);

but there's no 'node' variable :-/

I took a brief look at the patch, and I think there are two main issues
preventing it from moving forward.

1) no tests

There's not a *single* regression test exercising the new code, so even
after adding Assert(false) to MJCreateRangeData() tests pass just fine.
Clearly, that needs to change.

2) lack of comments

The patch adds a bunch of functions, but it does not really explain what
the functions do (unlike the various surrounding functions). Even if I
can work out what the functions do, it's much harder to determine what
the "contract" is (i.e. what assumptions the function do and what is
guaranteed).

Similarly, the patch modifies/reworks large blocks of executor code,
without updating the comments describing what the block does.

See 0002 for various places that I think are missing comments.

Aside from that, I have a couple minor comments:

3) I'm not quite sure I like "Range Merge Join" to be honest. It's still
a "Merge Join" pretty much. What about ditching the "Range"? There'll
still be "Range Cond" key, which should be good enough I think.

4) Some minor whitespace issues (tabs vs. spaces). See 0002.

regards

--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

Attachment Content-Type Size
0002-review.patch text/x-patch 9.2 KB
0001-2021-11-17.patch text/x-patch 48.5 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2021-11-17 22:47:10 Re: XLogReadRecord() error in XlogReadTwoPhaseData()
Previous Message Thomas Munro 2021-11-17 22:26:57 Re: Windows: Wrong error message at connection termination