On sön, 2011-11-27 at 18:20 -0500, Tom Lane wrote:
> The low-tech way would be
> 
> CATALOG(pg_attribute,1249) BKI_BOOTSTRAP ...
> {
>     ...
>     int4        attinhcount;
>     Oid         attcollation;
>     aclitem     attacl[1];
> #ifdef CATALOG_VARLEN_FIELDS
>     text        attoptions[1];
>     text        attfdwoptions[1];
> #endif
> } FormData_pg_attribute;

Good enough.

To clarify, I believe the rule is that the first variable-length field
can be accessed as a struct field.  Are there any exceptions to this?
This kind of comment is pretty confusing:

CATALOG(pg_rewrite,2618)
{
    NameData    rulename;
    Oid         ev_class;
    int2        ev_attr;
    char        ev_type;
    char        ev_enabled;
    bool        is_instead;

    /* NB: remaining fields must be accessed via heap_getattr */
    pg_node_tree ev_qual;
    pg_node_tree ev_action;
} FormData_pg_rewrite;

Also, this code in relcache.c accesses indclass, which is after an
int2vector and an oidvector field:

    /* Check to see if it is a unique, non-partial btree index on OID */
    if (index->indnatts == 1 &&
        index->indisunique && index->indimmediate &&
        index->indkey.values[0] == ObjectIdAttributeNumber &&
        index->indclass.values[0] == OID_BTREE_OPS_OID &&
        heap_attisnull(htup, Anum_pg_index_indpred))
        oidIndex = index->indexrelid;


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

Reply via email to