From: | Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> |
---|---|
To: | Robert Haas <robertmhaas(at)gmail(dot)com> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: att_isnull |
Date: | 2019-05-10 14:34:35 |
Message-ID: | 20190510143435.GA2463@alvherre.pgsql |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 2019-May-10, Robert Haas wrote:
> Obviously, this macro does not do what it claims to do:
>
> /*
> * check to see if the ATT'th bit of an array of 8-bit bytes is set.
> */
> #define att_isnull(ATT, BITS) (!((BITS)[(ATT) >> 3] & (1 << ((ATT) & 0x07))))
>
> OK, I lied. It's not at all obvious, or at least it wasn't to me.
> The macro actually tests whether the bit is *unset*, because there's
> an exclamation point in there. I think the comment should be updated
> to something like "Check a tuple's null bitmap to determine whether
> the attribute is null. Note that a 0 in the null bitmap indicates a
> null, while 1 indicates non-null."
Yeah, I've noticed this inconsistency too. I doubt we want to change
the macro definition or its name, but +1 for expanding the comment.
Your proposed wording seems sufficient.
> There is some kind of broader confusion here, I think, because we
> refer in many places to the "null bitmap" but it's actually not a
> bitmap of which attributes are null but rather of which attributes are
> not null. That is confusing in and of itself, and it's also not very
> intuitive that it uses exactly the opposite convention from what we do
> with datum/isnull arrays.
I remember being bit by this inconsistency while fixing data corruption
problems, but I'm not sure what, if anything, should we do about it.
Maybe there's a perfect spot where to add some further documentation
about it (a code comment somewhere?) but I don't know where would that
be.
--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2019-05-10 14:43:50 | Re: Bug in reindexdb's error reporting |
Previous Message | Robert Haas | 2019-05-10 14:20:05 | att_isnull |