*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.20 1997/08/24 23:07:26 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.21 1997/08/26 23:31:20 momjian Exp $
*
* NOTES
* The old interface functions have been converted to macros
#define register
#endif /* !NO_ASSERT_CHECKING && sparc && sunos4 */
-static char *heap_getsysattr(HeapTuple tup, Buffer b, int attnum);
-
/* ----------------------------------------------------------------
* misc support routines
* ----------------------------------------------------------------
* heap_getsysattr
* ----------------
*/
-static char *
+char *
heap_getsysattr(HeapTuple tup, Buffer b, int attnum)
{
switch (attnum) {
* ----------------
*/
- Assert(PointerIsValid(isnull));
Assert(attnum > 0);
/* ----------------
* ----------------
*/
- *isnull = false;
+ if (isnull)
+ *isnull = false;
if (HeapTupleNoNulls(tup)) {
attnum--;
*/
if (att_isnull(attnum, bp)) {
- *isnull = true;
+ if (isnull)
+ *isnull = true;
return NULL;
}
}
/* ----------------
- * heap_getattr
- *
- * Find a particular field in a row represented as a heap tuple.
- * We return a pointer into that heap tuple, which points to the
- * first byte of the value of the field in question.
- *
- * If the field in question has a NULL value, we return a null
- * pointer and return <*isnull> == true. Otherwise, we return
- * <*isnull> == false.
- *
- * <tup> is the pointer to the heap tuple. <attnum> is the attribute
- * number of the column (field) caller wants. <tupleDesc> is a
- * pointer to the structure describing the row and all its fields.
- * ---------------- */
-char *
-heap_getattr(HeapTuple tup,
- Buffer b,
- int attnum,
- TupleDesc tupleDesc,
- bool *isnull)
-{
- bool localIsNull;
-
- /* ----------------
- * sanity checks
- * ----------------
- */
- Assert(tup != NULL);
-
- if (! PointerIsValid(isnull))
- isnull = &localIsNull;
-
- if (attnum > (int) tup->t_natts) {
- *isnull = true;
- return ((char *) NULL);
- } else if (attnum > 0) {
- /* ----------------
- * take care of user defined attributes
- * ----------------
- */
- return fastgetattr(tup, attnum, tupleDesc, isnull);
- } else {
- /* ----------------
- * take care of system attributes
- * ----------------
- */
- *isnull = false;
- return heap_getsysattr(tup, b, attnum);
- }
-}
-
-/* ----------------
* heap_copytuple
*
* returns a copy of an entire tuple
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/common/Attic/heapvalid.c,v 1.14 1997/08/24 23:07:26 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/common/Attic/heapvalid.c,v 1.15 1997/08/26 23:31:22 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include <postgres.h>
#include <fmgr.h>
-#include <access/heaptuple.h>
+#include <access/heapam.h>
#include <access/valid.h>
#include <access/xact.h>
#include <storage/bufpage.h>
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.14 1997/08/18 20:51:30 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.15 1997/08/26 23:31:23 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include <postgres.h>
#include <fmgr.h>
-#include <access/heaptuple.h>
+#include <access/heapam.h>
#include <access/printtup.h>
#include <catalog/pg_type.h>
#include <libpq/libpq.h>
j = 0;
k = 1 << 7;
for (i = 0; i < tuple->t_natts; ) {
- attr = heap_getattr(tuple, InvalidBuffer, ++i, typeinfo, &isnull);
+ i++; /* heap_getattr is a macro, so no increment */
+ attr = heap_getattr(tuple, InvalidBuffer, i, typeinfo, &isnull);
if (!isnull)
j |= k;
k >>= 1;
j = 0;
k = 1 << 7;
for (i = 0; i < tuple->t_natts; ) {
- attr = heap_getattr(tuple, InvalidBuffer, ++i, typeinfo, &isnull);
+ i++; /* heap_getattr is a macro, so no increment */
+ attr = heap_getattr(tuple, InvalidBuffer, i, typeinfo, &isnull);
if (!isnull)
j |= k;
k >>= 1;
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.12 1997/08/19 21:29:30 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.13 1997/08/26 23:31:28 momjian Exp $
*
* INTERFACE ROUTINES
* index_open - open an index relation by relationId
#include <utils/relcache.h>
#include <fmgr.h>
#include <storage/lmgr.h>
-#include <access/heaptuple.h>
+#include <access/heapam.h>
/* ----------------
* undefine macros we aren't going to use that would otherwise
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execJunk.c,v 1.4 1997/01/10 20:17:25 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execJunk.c,v 1.5 1997/08/26 23:31:37 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include "postgres.h"
#include "utils/palloc.h"
-#include "access/heaptuple.h"
#include "access/heapam.h"
#include "executor/executor.h"
#include "nodes/relation.h"
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/nodeUnique.c,v 1.6 1997/01/10 20:17:38 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/nodeUnique.c,v 1.7 1997/08/26 23:31:44 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include "executor/nodeUnique.h"
#include "optimizer/clauses.h"
#include "access/heapam.h"
-#include "access/heaptuple.h"
#include "access/printtup.h" /* for typtoout() */
#include "utils/builtins.h" /* for namecpy()*/
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: heapam.h,v 1.7 1997/08/19 21:37:30 momjian Exp $
+ * $Id: heapam.h,v 1.8 1997/08/26 23:31:53 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#define IncrHeapAccessStat(x) \
(heap_access_stats == NULL ? 0 : (heap_access_stats->x)++)
+/* ----------------
+ * heap_getattr
+ *
+ * Find a particular field in a row represented as a heap tuple.
+ * We return a pointer into that heap tuple, which points to the
+ * first byte of the value of the field in question.
+ *
+ * If the field in question has a NULL value, we return a null
+ * pointer and return <*isnull> == true. Otherwise, we return
+ * <*isnull> == false.
+ *
+ * <tup> is the pointer to the heap tuple. <attnum> is the attribute
+ * number of the column (field) caller wants. <tupleDesc> is a
+ * pointer to the structure describing the row and all its fields.
+ * ---------------- */
+#define heap_getattr(tup, b, attnum, tupleDesc, isnull) \
+ (AssertMacro((tup) != NULL) ? \
+ ((attnum) > (int) (tup)->t_natts) ? \
+ (((isnull) ? (*(isnull) = true) : NULL), (char *) NULL) : \
+ ((attnum) > 0) ? \
+ fastgetattr((tup), (attnum), (tupleDesc), (isnull)) : \
+ (((isnull) ? (*(isnull) = false) : NULL), heap_getsysattr((tup), (b), (attnum))) : \
+ (char *) NULL)
+
extern HeapAccessStatistics heap_access_stats; /* in stats.c */
/* ----------------
extern int heap_attisnull(HeapTuple tup, int attnum);
extern int heap_sysattrlen(AttrNumber attno);
extern bool heap_sysattrbyval(AttrNumber attno);
+extern char *heap_getsysattr(HeapTuple tup, Buffer b, int attnum);
extern char *fastgetattr(HeapTuple tup, int attnum,
TupleDesc att, bool *isnull);
-extern char *heap_getattr(HeapTuple tup, Buffer b, int attnum,
- TupleDesc att, bool *isnull);
extern HeapTuple heap_copytuple(HeapTuple tuple);
extern HeapTuple heap_formtuple(TupleDesc tupleDescriptor,
Datum value[], char nulls[]);
+++ /dev/null
-/*-------------------------------------------------------------------------
- *
- * heaptuple.h--
- *
- *
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- * $Id: heaptuple.h,v 1.3 1996/11/05 07:18:05 scrappy Exp $
- *
- *-------------------------------------------------------------------------
- */
-#ifndef HEAPTUPLE_H
-#define HEAPTUPLE_H
-
-#include <access/tupdesc.h>
-#include <storage/buf.h>
-#include <access/htup.h>
-
-extern char *heap_getattr(HeapTuple tup,
- Buffer b,
- int attnum,
- TupleDesc tupleDesc,
- bool *isnull);
-
-#endif /* HEAP_TUPLE_H */
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: bufpage.h,v 1.9 1997/08/24 23:08:01 momjian Exp $
+ * $Id: bufpage.h,v 1.10 1997/08/26 23:31:58 momjian Exp $
*
*-------------------------------------------------------------------------
*/
* Assumes page is locked.
*/
#define PageGetSpecialSize(page) \
- ((uint16) (PageGetPageSize(page) - ((PageHeader)page)->pd_special))
+ ((uint16) (PageGetPageSize(page) - ((PageHeader)(page))->pd_special))
/*
* PageGetSpecialPointer --
*/
#define PageGetItem(page, itemId) \
(AssertMacro(PageIsValid(page)) ? \
- AssertMacro(itemId->lp_flags & LP_USED) ? \
- (Item)(((char *)page) + itemId->lp_off) : false : false)
+ AssertMacro((itemId)->lp_flags & LP_USED) ? \
+ (Item)(((char *)(page)) + (itemId)->lp_off) : false : false)
/*
* BufferGetPageSize --