diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c index 30961f4f549e2a4ebb81c7caf120d651c1b00e6e..60ec3e4d3ab63bea81149f85ecce6b68d082d41f 100644 --- a/src/backend/access/common/heaptuple.c +++ b/src/backend/access/common/heaptuple.c @@ -8,7 +8,7 @@ * * * 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 @@ -39,8 +39,6 @@ #define register #endif /* !NO_ASSERT_CHECKING && sparc && sunos4 */ -static char *heap_getsysattr(HeapTuple tup, Buffer b, int attnum); - /* ---------------------------------------------------------------- * misc support routines * ---------------------------------------------------------------- @@ -337,7 +335,7 @@ heap_sysattrbyval(AttrNumber attno) * heap_getsysattr * ---------------- */ -static char * +char * heap_getsysattr(HeapTuple tup, Buffer b, int attnum) { switch (attnum) { @@ -423,7 +421,6 @@ fastgetattr(HeapTuple tup, * ---------------- */ - Assert(PointerIsValid(isnull)); Assert(attnum > 0); /* ---------------- @@ -435,7 +432,8 @@ fastgetattr(HeapTuple tup, * ---------------- */ - *isnull = false; + if (isnull) + *isnull = false; if (HeapTupleNoNulls(tup)) { attnum--; @@ -469,7 +467,8 @@ fastgetattr(HeapTuple tup, */ if (att_isnull(attnum, bp)) { - *isnull = true; + if (isnull) + *isnull = true; return NULL; } @@ -659,58 +658,6 @@ fastgetattr(HeapTuple tup, } } -/* ---------------- - * 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 * diff --git a/src/backend/access/common/heapvalid.c b/src/backend/access/common/heapvalid.c index edb1e07187ec920d33946fa37bf916d0f8afd78e..87668fbb438106f074313c249a3eb5b888a43300 100644 --- a/src/backend/access/common/heapvalid.c +++ b/src/backend/access/common/heapvalid.c @@ -7,7 +7,7 @@ * * * 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 $ * *------------------------------------------------------------------------- */ @@ -15,7 +15,7 @@ #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> diff --git a/src/backend/access/common/printtup.c b/src/backend/access/common/printtup.c index cb4b2d0be3885850cd9157c58f6a1e40f2d41577..98fbddc639d6fb899caa6b8b4f2846ce1afcbc52 100644 --- a/src/backend/access/common/printtup.c +++ b/src/backend/access/common/printtup.c @@ -8,7 +8,7 @@ * * * 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 $ * *------------------------------------------------------------------------- */ @@ -17,7 +17,7 @@ #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> @@ -91,7 +91,8 @@ printtup(HeapTuple tuple, TupleDesc typeinfo) 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; @@ -214,7 +215,8 @@ printtup_internal(HeapTuple tuple, TupleDesc typeinfo) 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; diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c index 5681e7be4f39a0457ebb1e408c0b0e642f2ace9d..3068f7cceeddb936c36e5a629ad7af9e88896ac8 100644 --- a/src/backend/access/index/indexam.c +++ b/src/backend/access/index/indexam.c @@ -7,7 +7,7 @@ * * * 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 @@ -69,7 +69,7 @@ #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 diff --git a/src/backend/executor/execJunk.c b/src/backend/executor/execJunk.c index 8495702dc296df67d9c5997765a66828580c5f0b..8779647a113f0ea76c525683840577e3216b634d 100644 --- a/src/backend/executor/execJunk.c +++ b/src/backend/executor/execJunk.c @@ -7,7 +7,7 @@ * * * 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 $ * *------------------------------------------------------------------------- */ @@ -17,7 +17,6 @@ #include "postgres.h" #include "utils/palloc.h" -#include "access/heaptuple.h" #include "access/heapam.h" #include "executor/executor.h" #include "nodes/relation.h" diff --git a/src/backend/executor/nodeUnique.c b/src/backend/executor/nodeUnique.c index f0bbc13c3ca19e124c0d0c4939b5f2368831b690..65c3bea76e0b7f8d1b4d2331b87f9c88ef47bff0 100644 --- a/src/backend/executor/nodeUnique.c +++ b/src/backend/executor/nodeUnique.c @@ -7,7 +7,7 @@ * * * 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 $ * *------------------------------------------------------------------------- */ @@ -31,7 +31,6 @@ #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()*/ diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h index f16a3bec536ac228e95858f4e51925135aeef704..9fdb9af8e75bf532d82d51d28c601c9ba143a596 100644 --- a/src/include/access/heapam.h +++ b/src/include/access/heapam.h @@ -6,7 +6,7 @@ * * 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 $ * *------------------------------------------------------------------------- */ @@ -78,6 +78,30 @@ typedef HeapAccessStatisticsData *HeapAccessStatistics; #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 */ /* ---------------- @@ -114,10 +138,9 @@ extern void DataFill(char *data, TupleDesc tupleDesc, 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[]); diff --git a/src/include/access/heaptuple.h b/src/include/access/heaptuple.h deleted file mode 100644 index f01217b97c1d7d429fbd9ead0b3fd9cde0b4126a..0000000000000000000000000000000000000000 --- a/src/include/access/heaptuple.h +++ /dev/null @@ -1,26 +0,0 @@ -/*------------------------------------------------------------------------- - * - * 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 */ diff --git a/src/include/storage/bufpage.h b/src/include/storage/bufpage.h index b0408106ef7a18853eda854a57413dd8fdb80c14..3607e4e25e22e86ea4073d8874a986e53431f0f1 100644 --- a/src/include/storage/bufpage.h +++ b/src/include/storage/bufpage.h @@ -6,7 +6,7 @@ * * 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 $ * *------------------------------------------------------------------------- */ @@ -221,7 +221,7 @@ typedef enum { * Assumes page is locked. */ #define PageGetSpecialSize(page) \ - ((uint16) (PageGetPageSize(page) - ((PageHeader)page)->pd_special)) + ((uint16) (PageGetPageSize(page) - ((PageHeader)(page))->pd_special)) /* * PageGetSpecialPointer -- @@ -245,8 +245,8 @@ typedef enum { */ #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 --