On 2018-11-19 17:53:22 -0800, Andres Freund wrote:
> Hi Peter, Alvaro, All,
>
> (Peter, this is your change, Alvaro, you're the objectaddress.c master)
>
> While looking through my oids removal patch I noticed that the
> objectaddress.c ObjectProperty entry for transforms looks wrong:
>
> typedef struct
> {
> Oid class_oid; /* oid of catalog */
> Oid oid_index_oid; /* oid of index on system oid column */
> int oid_catcache_id; /* id of catcache on system oid column */
> int name_catcache_id; /* id of catcache on (name,namespace), or
> * (name) if the object does not live in a
> * namespace */
> AttrNumber attnum_name; /* attnum of name field */
> AttrNumber attnum_namespace; /* attnum of namespace field */
> AttrNumber attnum_owner; /* attnum of owner field */
> AttrNumber attnum_acl; /* attnum of acl field */
> ObjectType objtype; /* OBJECT_* of this object type */
> bool is_nsp_name_unique; /* can the nsp/name combination (or name
> * alone, if there's no namespace) be
> * considered a unique identifier for an
> * object of this class? */
> } ObjectPropertyType;
>
> {
> TransformRelationId,
> TransformOidIndexId,
> TRFOID,
> InvalidAttrNumber,
> },
>
> this was added in https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=cac76582053e
>
> The InvalidAttrNumber entry initializes the member for name_catcache_id,
> instead of -1 as the other entries, and in contrast to the rest of the
> entries it doesn't initialize the other fields. In particular objtype is
> 0 instead of -1 as the rest.
Also, uh, shouldn't this actually fill out some of those fields? Most of
them actually apply to transforms.
Greetings,
Andres Freund