diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2000-06-17 04:56:39 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2000-06-17 04:56:39 +0000 |
commit | 9cf80f2f55589946c22ee18185c2d87a9266012a (patch) | |
tree | c8cae31d829cf4a1c19bc4a76a9219985841e2b4 /src/backend/utils/cache/relcache.c | |
parent | 1652d433582dc819746ba166a6dbdb9e9643e69a (diff) |
Clean out another pocket of functions called via nonspecific function
pointers, namely the catcache tuple fetch routines. Also get rid of
the unused and possibly confusing 'size' field in struct cachedesc.
Since it doesn't allow for variable-length fields, anyone who
actually trusted it would likely be making a mistake...
Diffstat (limited to 'src/backend/utils/cache/relcache.c')
-rw-r--r-- | src/backend/utils/cache/relcache.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index fe397ca8508..f86f4eef778 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.99 2000/06/02 15:57:30 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.100 2000/06/17 04:56:32 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -344,12 +344,13 @@ scan_pg_rel_ind(RelationBuildDescInfo buildinfo) switch (buildinfo.infotype) { case INFO_RELID: - return_tuple = ClassOidIndexScan(pg_class_desc, buildinfo.i.info_id); + return_tuple = ClassOidIndexScan(pg_class_desc, + ObjectIdGetDatum(buildinfo.i.info_id)); break; case INFO_RELNAME: return_tuple = ClassNameIndexScan(pg_class_desc, - buildinfo.i.info_name); + PointerGetDatum(buildinfo.i.info_name)); break; default: @@ -382,10 +383,17 @@ AllocateRelationDesc(Relation relation, u_int natts, Form_pg_class relationForm; /* ---------------- - * allocate space for the relation tuple form + * Copy the relation tuple form + * + * We only allocate space for the fixed fields, ie, CLASS_TUPLE_SIZE. + * relacl is NOT stored in the relcache --- there'd be little point + * in it, since we don't copy the tuple's nullvalues bitmap and hence + * wouldn't know if the value is valid ... bottom line is that relacl + * *cannot* be retrieved from the relcache. Get it from the syscache + * if you need it. * ---------------- */ - relationForm = (Form_pg_class) palloc(sizeof(FormData_pg_class)); + relationForm = (Form_pg_class) palloc(CLASS_TUPLE_SIZE); memcpy((char *) relationForm, (char *) relp, CLASS_TUPLE_SIZE); @@ -586,14 +594,16 @@ build_tupdesc_ind(RelationBuildDescInfo buildinfo, bool columnDropped = false; #endif /* _DROP_COLUMN_HACK__ */ - atttup = (HeapTuple) AttributeRelidNumIndexScan(attrel, - RelationGetRelid(relation), i); + atttup = AttributeRelidNumIndexScan(attrel, + ObjectIdGetDatum(RelationGetRelid(relation)), + Int32GetDatum(i)); if (!HeapTupleIsValid(atttup)) { #ifdef _DROP_COLUMN_HACK__ - atttup = (HeapTuple) AttributeRelidNumIndexScan(attrel, - RelationGetRelid(relation), DROPPED_COLUMN_INDEX(i)); + atttup = AttributeRelidNumIndexScan(attrel, + ObjectIdGetDatum(RelationGetRelid(relation)), + Int32GetDatum(DROPPED_COLUMN_INDEX(i))); if (!HeapTupleIsValid(atttup)) #endif /* _DROP_COLUMN_HACK__ */ elog(ERROR, "cannot find attribute %d of relation %s", i, |