On Fri, Apr 7, 2017 at 10:03 AM, Kevin Grittner <kgrittn@gmail.com> wrote:
> On Thu, Apr 6, 2017 at 4:19 PM, Andres Freund <andres@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
zerocharacter 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