Thread: indentation in _hash_pgaddtup()

indentation in _hash_pgaddtup()

From
Ted Yu
Date:
Hi,
I was looking at :

commit d09dbeb9bde6b9faabd30e887eff4493331d6424
Author: David Rowley <drowley@postgresql.org>
Date:   Thu Nov 24 17:21:44 2022 +1300

    Speedup hash index builds by skipping needless binary searches

In _hash_pgaddtup(), it seems the indentation is off for the assertion.

Please take a look at the patch.

Thanks
Attachment

Re: indentation in _hash_pgaddtup()

From
Daniel Gustafsson
Date:
> On 24 Nov 2022, at 13:42, Ted Yu <yuzhihong@gmail.com> wrote:

> In _hash_pgaddtup(), it seems the indentation is off for the assertion.
>
> Please take a look at the patch.

Indentation is handled by applying src/tools/pgindent to the code, and
re-running it on this file yields no re-indentation so this is in fact correct
according to the pgindent rules.

--
Daniel Gustafsson        https://vmware.com/




Re: indentation in _hash_pgaddtup()

From
Tom Lane
Date:
Daniel Gustafsson <daniel@yesql.se> writes:
>> On 24 Nov 2022, at 13:42, Ted Yu <yuzhihong@gmail.com> wrote:
>> In _hash_pgaddtup(), it seems the indentation is off for the assertion.

> Indentation is handled by applying src/tools/pgindent to the code, and
> re-running it on this file yields no re-indentation so this is in fact correct
> according to the pgindent rules.

It is one messy bit of code though --- perhaps a little more thought
about where to put line breaks would help?  Alternatively, it could
be split into multiple statements, along the lines of

#ifdef USE_ASSERT_CHECKING
    if (PageGetMaxOffsetNumber(page) > 0)
    {
        IndexTuple lasttup = PageGetItem(page,
                                         PageGetItemId(page,
                                                       PageGetMaxOffsetNumber(page)));

        Assert(_hash_get_indextuple_hashkey(lasttup) <=
               _hash_get_indextuple_hashkey(itup));
    }
#endif

(details obviously tweakable)

            regards, tom lane



Re: indentation in _hash_pgaddtup()

From
Ted Yu
Date:


On Thu, Nov 24, 2022 at 7:11 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Daniel Gustafsson <daniel@yesql.se> writes:
>> On 24 Nov 2022, at 13:42, Ted Yu <yuzhihong@gmail.com> wrote:
>> In _hash_pgaddtup(), it seems the indentation is off for the assertion.

> Indentation is handled by applying src/tools/pgindent to the code, and
> re-running it on this file yields no re-indentation so this is in fact correct
> according to the pgindent rules.

It is one messy bit of code though --- perhaps a little more thought
about where to put line breaks would help?  Alternatively, it could
be split into multiple statements, along the lines of

#ifdef USE_ASSERT_CHECKING
    if (PageGetMaxOffsetNumber(page) > 0)
    {
        IndexTuple lasttup = PageGetItem(page,
                                         PageGetItemId(page,
                                                       PageGetMaxOffsetNumber(page)));

        Assert(_hash_get_indextuple_hashkey(lasttup) <=
               _hash_get_indextuple_hashkey(itup));
    }
#endif

(details obviously tweakable)

                        regards, tom lane

Thanks Tom for the suggestion. 

Here is patch v2.
Attachment

Re: indentation in _hash_pgaddtup()

From
David Rowley
Date:
On Fri, 25 Nov 2022 at 04:29, Ted Yu <yuzhihong@gmail.com> wrote:
> Here is patch v2.

After running pgindent on v2, I see it still pushes the lines out
quite far. If I add a new line after PageGetItemId(page, and put the
variable assignment away from the variable declaration then it looks a
bit better. It's still 1 char over the limit.

David

Attachment

Re: indentation in _hash_pgaddtup()

From
Tom Lane
Date:
David Rowley <dgrowleyml@gmail.com> writes:
> After running pgindent on v2, I see it still pushes the lines out
> quite far. If I add a new line after PageGetItemId(page, and put the
> variable assignment away from the variable declaration then it looks a
> bit better. It's still 1 char over the limit.

If you wanted to be hard-nosed about 80 character width, you could
pull out the PageGetItemId call into a separate local variable.
I wasn't going to be quite that picky, but I won't object if that
seems better to you.

            regards, tom lane



Re: indentation in _hash_pgaddtup()

From
Ted Yu
Date:


On Thu, Nov 24, 2022 at 12:31 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
David Rowley <dgrowleyml@gmail.com> writes:
> After running pgindent on v2, I see it still pushes the lines out
> quite far. If I add a new line after PageGetItemId(page, and put the
> variable assignment away from the variable declaration then it looks a
> bit better. It's still 1 char over the limit.

If you wanted to be hard-nosed about 80 character width, you could
pull out the PageGetItemId call into a separate local variable.
I wasn't going to be quite that picky, but I won't object if that
seems better to you.

                        regards, tom lane

Patch v4 stores ItemId in a local variable. 
Attachment

Re: indentation in _hash_pgaddtup()

From
David Rowley
Date:
On Fri, 25 Nov 2022 at 09:40, Ted Yu <yuzhihong@gmail.com> wrote:
> Patch v4 stores ItemId in a local variable.

ok, I pushed that one.  Thank you for working on this.

David



Re: indentation in _hash_pgaddtup()

From
David Rowley
Date:
On Fri, 25 Nov 2022 at 09:31, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> If you wanted to be hard-nosed about 80 character width, you could
> pull out the PageGetItemId call into a separate local variable.
> I wasn't going to be quite that picky, but I won't object if that
> seems better to you.

I wasn't too worried about the 1 char, but Ted wrote a patch and it
looked a little nicer.

David