On Fri, Apr 7, 2017 at 10:03 AM, Kevin Grittner <kgri...@gmail.com> wrote:
> On Thu, Apr 6, 2017 at 4:19 PM, Andres Freund <and...@anarazel.de> wrote:
>
>> My compiler, quite justifiedly, complains:
>>
>> /home/andres/src/postgresql/src/backend/parser/parse_relation.c: In function 
>> ‘get_rte_attribute_is_dropped’:
>> /home/andres/src/postgresql/src/backend/parser/parse_relation.c:2899:43: 
>> warning: comparison between pointer and zero character constant 
>> [-Wpointer-compare]
>>       (list_nth(rte->coltypes, attnum - 1) != InvalidOid);
>>                                            ^~
>> /home/andres/src/postgresql/src/backend/parser/parse_relation.c:2899:7: 
>> note: did you mean to dereference the pointer?
>>       (list_nth(rte->coltypes, attnum - 1) != InvalidOid);
>>        ^
>
> Good catch.  Will push a change from list_nth() to list_nth_oid()
> for the benefit of stricter compilers.  While I'm at it, I'll throw
> on another layer of parentheses to ensure people read that
> correctly.  Out of curiosity, what compiler or setting catches this?

Doesn't it also have the logic backwards?  According to the comment,
the attribute is dropped if the type *is* InvalidOid, so we want
result == true in that case.  But I don't actually know how to reach
this code to test it.

                /*
-                * We checked when we loaded ctecoltypes for the tuplestore
+                * We checked when we loaded coltypes for the tuplestore
                 * that InvalidOid was only used for dropped columns, so it is
                 * safe to count on that here.
                 */
                result =
-                       (list_nth(rte->coltypes, attnum - 1) != InvalidOid);
+                       (list_nth_oid(rte->coltypes, attnum - 1) == InvalidOid);
            }

-- 
Thomas Munro
http://www.enterprisedb.com


-- 
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

Reply via email to