OSDN Git Service

Don't mess with HEAP_XMAX_INVALID in heaptuple.c routines; there is
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 27 Sep 2002 15:04:08 +0000 (15:04 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 27 Sep 2002 15:04:08 +0000 (15:04 +0000)
no reason to worry about the tuple commit status bits until the tuple
is inserted in a relation by heapam.c.  Also, improve comments for
heap_addheader().

src/backend/access/common/heaptuple.c

index 9901965..470241e 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.82 2002/09/04 20:31:08 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.83 2002/09/27 15:04:08 tgl Exp $
  *
  * NOTES
  *       The old interface functions have been converted to macros
@@ -617,6 +617,9 @@ heap_formtuple(TupleDesc tupleDescriptor,
        td->t_natts = numberOfAttributes;
        td->t_hoff = hoff;
 
+       if (tupleDescriptor->tdhasoid) /* else leave infomask = 0 */
+               td->t_infomask = HEAP_HASOID;
+
        DataFill((char *) td + hoff,
                         tupleDescriptor,
                         value,
@@ -624,11 +627,6 @@ heap_formtuple(TupleDesc tupleDescriptor,
                         &td->t_infomask,
                         (hasnull ? td->t_bits : NULL));
 
-       if (tupleDescriptor->tdhasoid)
-               td->t_infomask |= HEAP_HASOID;
-
-       td->t_infomask |= HEAP_XMAX_INVALID;
-
        return tuple;
 }
 
@@ -736,8 +734,12 @@ heap_freetuple(HeapTuple htup)
  *
  * This routine forms a HeapTuple by copying the given structure (tuple
  * data) and adding a generic header.  Note that the tuple data is
- * presumed to contain no null fields. It is typically only useful
- * for null-free system tables.
+ * presumed to contain no null fields and no varlena fields.
+ *
+ * This routine is really only useful for certain system tables that are
+ * known to be fixed-width and null-free.  It is used in some places for
+ * pg_class, but that is a gross hack (it only works because relacl can
+ * be omitted from the tuple entirely in those places).
  * ----------------
  */
 HeapTuple
@@ -770,9 +772,11 @@ heap_addheader(int natts,          /* max domain index */
 
        MemSet((char *) td, 0, hoff);
 
-       td->t_hoff = hoff;
        td->t_natts = natts;
-       td->t_infomask = withoid ? (HEAP_XMAX_INVALID | HEAP_HASOID) : HEAP_XMAX_INVALID;
+       td->t_hoff = hoff;
+
+       if (withoid)                            /* else leave infomask = 0 */
+               td->t_infomask = HEAP_HASOID;
 
        memcpy((char *) td + hoff, structure, structlen);