OSDN Git Service

Inline some small functions called for every row.
authorBruce Momjian <bruce@momjian.us>
Fri, 24 Apr 1998 14:43:33 +0000 (14:43 +0000)
committerBruce Momjian <bruce@momjian.us>
Fri, 24 Apr 1998 14:43:33 +0000 (14:43 +0000)
src/backend/access/transam/xid.c
src/backend/executor/execTuples.c
src/backend/executor/nodeTee.c
src/backend/storage/buffer/bufmgr.c
src/backend/storage/page/bufpage.c
src/backend/utils/time/tqual.c
src/include/access/xact.h
src/include/executor/executor.h
src/include/storage/bufmgr.h
src/include/storage/bufpage.h
src/include/utils/tqual.h

index 0081052..021c666 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/xid.c,v 1.14 1998/04/07 18:10:01 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/xid.c,v 1.15 1998/04/24 14:41:39 momjian Exp $
  *
  * OLD COMMENTS
  * XXX WARNING
@@ -54,16 +54,6 @@ xidout(TransactionId transactionId)
 }
 
 /* ----------------------------------------------------------------
- *             TransactionIdEquals
- * ----------------------------------------------------------------
- */
-bool
-TransactionIdEquals(TransactionId id1, TransactionId id2)
-{
-       return ((bool) (id1 == id2));
-}
-
-/* ----------------------------------------------------------------
  *             TransactionIdIsLessThan
  * ----------------------------------------------------------------
  */
index 3d64ba0..cd6ac66 100644 (file)
@@ -14,7 +14,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/executor/execTuples.c,v 1.17 1998/02/26 04:31:14 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/executor/execTuples.c,v 1.18 1998/04/24 14:41:46 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
  *             ExecSetNewSlotDescriptor - set a desc and the is-new-flag all at once
  *             ExecSlotBuffer                  - return buffer of tuple in slot
  *             ExecSetSlotBuffer               - set the buffer for tuple in slot
- *             ExecIncrSlotBufferRefcnt - bump the refcnt of the slot buffer
+ *             ExecIncrSlotBufferRefcnt - bump the refcnt of the slot buffer(Macro)
  *
  *      SLOT STATUS PREDICATES
- *             TupIsNull                               - true when slot contains no tuple
+ *             TupIsNull                               - true when slot contains no tuple(Macro)
  *             ExecSlotDescriptorIsNew - true if we're now storing a different
  *                                                               type of tuple in a slot
  *
@@ -566,59 +566,11 @@ ExecSetSlotBuffer(TupleTableSlot *slot, /* slot to change */
 
 #endif
 
-/* --------------------------------
- *             ExecIncrSlotBufferRefcnt
- *
- *             When we pass around buffers in the tuple table, we have to
- *             be careful to increment reference counts appropriately.
- *             This is used mainly in the mergejoin code.
- * --------------------------------
- */
-void
-ExecIncrSlotBufferRefcnt(TupleTableSlot *slot) /* slot to bump refcnt */
-{
-/*       Buffer b = SlotBuffer((TupleTableSlot*) slot); */
-       Buffer          b = slot->ttc_buffer;
-
-       if (BufferIsValid(b))
-               IncrBufferRefCount(b);
-}
-
 /* ----------------------------------------------------------------
  *                               tuple table slot status predicates
  * ----------------------------------------------------------------
  */
 
-/* ----------------
- *             TupIsNull
- *
- *             This is used mainly to detect when there are no more
- *             tuples to process.
- * ----------------
- */
-bool                                                   /* return: true if tuple in slot is NULL */
-TupIsNull(TupleTableSlot *slot) /* slot to check */
-{
-       HeapTuple       tuple;                  /* contents of slot (returned) */
-
-       /* ----------------
-        *      if the slot itself is null then we return true
-        * ----------------
-        */
-       if (slot == NULL)
-               return true;
-
-       /* ----------------
-        *      get information from the slot and return true or
-        *      false depending on the contents of the slot.
-        * ----------------
-        */
-       tuple = slot->val;
-
-       return
-               (tuple == NULL ? true : false);
-}
-
 /* --------------------------------
  *             ExecSlotDescriptorIsNew
  *
index 23e0968..4a96dc2 100644 (file)
@@ -15,7 +15,7 @@
  *             ExecEndTee
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/executor/Attic/nodeTee.c,v 1.16 1998/02/26 04:31:33 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/executor/Attic/nodeTee.c,v 1.17 1998/04/24 14:41:55 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -27,7 +27,7 @@
 #include "utils/palloc.h"
 #include "utils/relcache.h"
 #include "utils/mcxt.h"
-#include "storage/bufmgr.h"            /* for IncrBufferRefCount */
+#include "storage/bufmgr.h"
 #include "storage/smgr.h"
 #include "optimizer/internal.h"
 #include "executor/executor.h"
index 6b75bf5..7ab6019 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.36 1998/04/05 21:04:22 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.37 1998/04/24 14:42:16 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1263,25 +1263,6 @@ FlushBufferPool(int StableMainMemoryFlag)
 }
 
 /*
- * BufferIsValid --
- *             True iff the refcnt of the local buffer is > 0
- * Note:
- *             BufferIsValid(InvalidBuffer) is False.
- *             BufferIsValid(UnknownBuffer) is False.
- */
-bool
-BufferIsValid(Buffer bufnum)
-{
-       if (BufferIsLocal(bufnum))
-               return (bufnum >= -NLocBuffer && LocalRefCount[-bufnum - 1] > 0);
-
-       if (BAD_BUFFER_ID(bufnum))
-               return (false);
-
-       return ((bool) (PrivateRefCount[bufnum - 1] > 0));
-}
-
-/*
  * BufferGetBlockNumber --
  *             Returns the block number associated with a buffer.
  *
@@ -1413,24 +1394,6 @@ RelationGetNumberOfBlocks(Relation relation)
         smgrnblocks(DEFAULT_SMGR, relation));
 }
 
-/*
- * BufferGetBlock --
- *             Returns a reference to a disk page image associated with a buffer.
- *
- * Note:
- *             Assumes buffer is valid.
- */
-Block
-BufferGetBlock(Buffer buffer)
-{
-       Assert(BufferIsValid(buffer));
-
-       if (BufferIsLocal(buffer))
-               return ((Block) MAKE_PTR(LocalBufferDescriptors[-buffer - 1].data));
-       else
-               return ((Block) MAKE_PTR(BufferDescriptors[buffer - 1].data));
-}
-
 /* ---------------------------------------------------------------------
  *             ReleaseRelationBuffers
  *
@@ -1679,25 +1642,8 @@ BlowawayRelationBuffers(Relation rdesc, BlockNumber block)
        return (0);
 }
 
-#undef IncrBufferRefCount
 #undef ReleaseBuffer
 
-void
-IncrBufferRefCount(Buffer buffer)
-{
-       if (BufferIsLocal(buffer))
-       {
-               Assert(LocalRefCount[-buffer - 1] >= 0);
-               LocalRefCount[-buffer - 1]++;
-       }
-       else
-       {
-               Assert(!BAD_BUFFER_ID(buffer));
-               Assert(PrivateRefCount[buffer - 1] >= 0);
-               PrivateRefCount[buffer - 1]++;
-       }
-}
-
 /*
  * ReleaseBuffer -- remove the pin on a buffer without
  *             marking it dirty.
index ae648c0..13fdbf1 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.16 1998/04/06 02:38:17 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.17 1998/04/24 14:42:27 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -225,27 +225,6 @@ PageRestoreTempPage(Page tempPage, Page oldPage)
        pfree(tempPage);
 }
 
-/*
- * PageGetMaxOffsetNumber --
- *             Returns the maximum offset number used by the given page.
- *
- *             NOTE: The offset is invalid if the page is non-empty.
- *             Test whether PageIsEmpty before calling this routine
- *             and/or using its return value.
- */
-OffsetNumber
-PageGetMaxOffsetNumber(Page page)
-{
-       LocationIndex low;
-       OffsetNumber i;
-
-       low = ((PageHeader) page)->pd_lower;
-       i = (low - (sizeof(PageHeaderData) - sizeof(ItemIdData)))
-               / sizeof(ItemIdData);
-
-       return (i);
-}
-
 /* ----------------
  *             itemid stuff for PageRepairFragmentation
  * ----------------
index bb0538e..3f9bc04 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.14 1998/02/26 04:38:32 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.15 1998/04/24 14:42:42 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -31,8 +31,8 @@ extern bool PostgresIsInitialized;
  */
 #ifndef GOODAMI
 
-static TransactionId HeapSpecialTransactionId = InvalidTransactionId;
-static CommandId HeapSpecialCommandId = FirstCommandId;
+TransactionId HeapSpecialTransactionId = InvalidTransactionId;
+CommandId HeapSpecialCommandId = FirstCommandId;
 
 void
 setheapoverride(bool on)
@@ -49,54 +49,11 @@ setheapoverride(bool on)
        }
 }
 
-/* static, but called in debug macro */
-bool
-heapisoverride()
-{
-       if (!TransactionIdIsValid(HeapSpecialTransactionId))
-       {
-               return (false);
-       }
-
-       if (!TransactionIdEquals(GetCurrentTransactionId(),
-                                                        HeapSpecialTransactionId) ||
-               GetCurrentCommandId() != HeapSpecialCommandId)
-       {
-               HeapSpecialTransactionId = InvalidTransactionId;
-
-               return (false);
-       }
-       return (true);
-}
-
 #endif                                                 /* !defined(GOODAMI) */
 /*
  * XXX Transaction system override hacks end here
  */
 
-static bool HeapTupleSatisfiesItself(HeapTuple tuple);
-static bool HeapTupleSatisfiesNow(HeapTuple tuple);
-
-/*
- * HeapTupleSatisfiesScope --
- *             True iff heap tuple satsifies a time qual.
- *
- * Note:
- *             Assumes heap tuple is valid.
- */
-bool
-HeapTupleSatisfiesVisibility(HeapTuple tuple, bool seeself)
-{
-
-       if (TransactionIdEquals(tuple->t_xmax, AmiTransactionId))
-               return (false);
-
-       if (seeself == true || heapisoverride())
-               return (HeapTupleSatisfiesItself(tuple));
-       else
-               return (HeapTupleSatisfiesNow(tuple));
-}
-
 /*
  * HeapTupleSatisfiesItself --
  *             True iff heap tuple is valid for "itself."
@@ -119,7 +76,7 @@ HeapTupleSatisfiesVisibility(HeapTuple tuple, bool seeself)
  *                     (Xmax != my-transaction &&                      the row was deleted by another transaction
  *                      Xmax is not committed)))                       that has not been committed
  */
-static bool
+bool
 HeapTupleSatisfiesItself(HeapTuple tuple)
 {
 
@@ -215,7 +172,7 @@ HeapTupleSatisfiesItself(HeapTuple tuple)
  *             the serializability guarantees we provide don't extend to xacts
  *             that do catalog accesses.  this is unfortunate, but not critical.
  */
-static bool
+bool
 HeapTupleSatisfiesNow(HeapTuple tuple)
 {
        if (AMI_OVERRIDE)
index 60bd8ca..7abcb63 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: xact.h,v 1.12 1998/02/26 04:40:32 momjian Exp $
+ * $Id: xact.h,v 1.13 1998/04/24 14:42:55 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -60,6 +60,17 @@ typedef TransactionStateData *TransactionState;
 #define StoreInvalidTransactionId(dest) \
        (*((TransactionId*)dest) = NullTransactionId)
 
+
+/* ----------------------------------------------------------------
+ *             TransactionIdEquals
+ * ----------------------------------------------------------------
+ */
+#define TransactionIdEquals(id1, id2) \
+( \
+       ((bool) ((id1) == (id2))) \
+)
+
+
 /* ----------------
  *             extern definitions
  * ----------------
@@ -95,7 +106,6 @@ extern TransactionId DisabledTransactionId;
 extern TransactionId xidin(char *representation);
 extern char *xidout(TransactionId transactionId);
 extern bool xideq(TransactionId xid1, TransactionId xid2);
-extern bool TransactionIdEquals(TransactionId id1, TransactionId id2);
 extern bool TransactionIdIsLessThan(TransactionId id1, TransactionId id2);
 extern void TransactionIdAdd(TransactionId *xid, int value);
 
index 0ce8dc3..17ff71c 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: executor.h,v 1.21 1998/02/26 04:41:19 momjian Exp $
+ * $Id: executor.h,v 1.22 1998/04/24 14:43:07 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 #define EXECUTOR_H
 
 #include <catalog/pg_index.h>
+#include <storage/bufmgr.h>
 #include <access/itup.h>
 #include <stdio.h>
 #include <executor/execdesc.h>
 
+/* ----------------
+ *             TupIsNull
+ *
+ *             This is used mainly to detect when there are no more
+ *             tuples to process.
+ * ----------------
+ */
+/* return: true if tuple in slot is NULL, slot is slot to test */
+#define TupIsNull(slot) \
+( \
+       ((slot) == NULL) ? \
+               true \
+       : \
+       ( \
+               ((slot)->val == NULL) ? \
+                       true \
+               : \
+                       false \
+       ) \
+)
+
+/* --------------------------------
+ *             ExecIncrSlotBufferRefcnt
+ *
+ *             When we pass around buffers in the tuple table, we have to
+ *             be careful to increment reference counts appropriately.
+ *             This is used mainly in the mergejoin code.
+ * --------------------------------
+ */
+#define ExecIncrSlotBufferRefcnt(slot) \
+( \
+       BufferIsValid((slot)->ttc_buffer) ? \
+               IncrBufferRefCount((slot)->ttc_buffer) \
+       : (void)NULL \
+)
+
+
 /*
  * prototypes from functions in execAmi.c
  */
@@ -107,8 +145,6 @@ extern TupleDesc
 ExecSetSlotDescriptor(TupleTableSlot *slot,
                                          TupleDesc tupdesc);
 extern void ExecSetSlotDescriptorIsNew(TupleTableSlot *slot, bool isNew);
-extern void ExecIncrSlotBufferRefcnt(TupleTableSlot *slot);
-extern bool TupIsNull(TupleTableSlot *slot);
 extern void ExecInitResultTupleSlot(EState *estate, CommonState *commonstate);
 extern void
 ExecInitScanTupleSlot(EState *estate,
index fdc3abc..f27e9d1 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: bufmgr.h,v 1.18 1998/02/26 04:43:22 momjian Exp $
+ * $Id: bufmgr.h,v 1.19 1998/04/24 14:43:18 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -18,6 +18,7 @@
 #include <storage/ipc.h>
 #include <storage/block.h>
 #include <storage/buf.h>
+#include <storage/buf_internals.h>
 #include <utils/rel.h>
 
 /*
@@ -73,6 +74,59 @@ extern int   ShowPinTrace;
 #define BUFFER_LATE_WRITE              1               /* delayed write: mark as DIRTY */
 
 /*
+ * BufferIsValid --
+ *             True iff the refcnt of the local buffer is > 0
+ * Note:
+ *             BufferIsValid(InvalidBuffer) is False.
+ *             BufferIsValid(UnknownBuffer) is False.
+ */
+#define BufferIsValid(bufnum) \
+( \
+       BufferIsLocal(bufnum) ? \
+               ((bufnum) >= -NLocBuffer && LocalRefCount[-(bufnum) - 1] > 0) \
+       : \
+       ( \
+               BAD_BUFFER_ID(bufnum) ? \
+                       false \
+               : \
+                       (PrivateRefCount[(bufnum) - 1] > 0) \
+       ) \
+)
+
+#define IncrBufferRefCount(buffer) \
+( \
+       BufferIsLocal(buffer) ? \
+       ( \
+               (void)AssertMacro(LocalRefCount[-(buffer) - 1] >= 0), \
+               (void)LocalRefCount[-(buffer) - 1]++ \
+       ) \
+       : \
+       ( \
+               (void)AssertMacro(!BAD_BUFFER_ID(buffer)), \
+               (void)AssertMacro(PrivateRefCount[(buffer) - 1] >= 0), \
+               (void)PrivateRefCount[(buffer) - 1]++ \
+       ) \
+)
+
+/*
+ * BufferGetBlock --
+ *             Returns a reference to a disk page image associated with a buffer.
+ *
+ * Note:
+ *             Assumes buffer is valid.
+ */
+#define BufferGetBlock(buffer) \
+( \
+       (void)AssertMacro(BufferIsValid(buffer)), \
+\
+       BufferIsLocal(buffer) ? \
+               ((Block) MAKE_PTR(LocalBufferDescriptors[-(buffer) - 1].data)) \
+       : \
+               ((Block) MAKE_PTR(BufferDescriptors[(buffer) - 1].data)) \
+)
+
+
+/*
  * prototypes for functions in bufmgr.c
  */
 extern Buffer
@@ -91,17 +145,14 @@ extern void ResetBufferUsage(void);
 extern void ResetBufferPool(void);
 extern int     BufferPoolCheckLeak(void);
 extern void FlushBufferPool(int StableMainMemoryFlag);
-extern bool BufferIsValid(Buffer bufnum);
 extern BlockNumber BufferGetBlockNumber(Buffer buffer);
 extern Relation BufferGetRelation(Buffer buffer);
 extern BlockNumber RelationGetNumberOfBlocks(Relation relation);
-extern Block BufferGetBlock(Buffer buffer);
 extern void ReleaseRelationBuffers(Relation rdesc);
 extern void DropBuffers(Oid dbid);
 extern void PrintBufferDescs(void);
 extern void PrintPinnedBufs(void);
 extern int     BufferShmemSize(void);
-extern void IncrBufferRefCount(Buffer buffer);
 extern int     ReleaseBuffer(Buffer buffer);
 
 extern void BufferRefCountReset(int *refcountsave);
index 2be7093..c0701fc 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: bufpage.h,v 1.17 1998/02/26 04:43:24 momjian Exp $
+ * $Id: bufpage.h,v 1.18 1998/04/24 14:43:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -280,6 +280,21 @@ typedef enum
  */
 #define BufferGetPage(buffer) ((Page)BufferGetBlock(buffer))
 
+/*
+ * PageGetMaxOffsetNumber --
+ *             Returns the maximum offset number used by the given page.
+ *
+ *             NOTE: The offset is invalid if the page is non-empty.
+ *             Test whether PageIsEmpty before calling this routine
+ *             and/or using its return value.
+ */
+#define PageGetMaxOffsetNumber(page) \
+( \
+       (((PageHeader) (page))->pd_lower - \
+               (sizeof(PageHeaderData) - sizeof(ItemIdData))) \
+       / sizeof(ItemIdData) \
+)
+
 
 /* ----------------------------------------------------------------
  *             extern declarations
@@ -292,7 +307,6 @@ PageAddItem(Page page, Item item, Size size,
                        OffsetNumber offsetNumber, ItemIdFlags flags);
 extern Page PageGetTempPage(Page page, Size specialSize);
 extern void PageRestoreTempPage(Page tempPage, Page oldPage);
-extern OffsetNumber PageGetMaxOffsetNumber(Page page);
 extern void PageRepairFragmentation(Page page);
 extern Size PageGetFreeSpace(Page page);
 extern void PageManagerModeSet(PageManagerMode mode);
index 6ee27af..ab14efb 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: tqual.h,v 1.11 1997/11/20 23:24:03 momjian Exp $
+ * $Id: tqual.h,v 1.12 1998/04/24 14:43:33 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 #include <access/htup.h>
 
-/* As above, plus updates in this command */
+extern TransactionId HeapSpecialTransactionId;
+extern CommandId HeapSpecialCommandId;
 
-extern void setheapoverride(bool on);
-extern bool heapisoverride(void);
+/*
+ * HeapTupleSatisfiesVisibility --
+ *             True iff heap tuple satsifies a time qual.
+ *
+ * Note:
+ *             Assumes heap tuple is valid.
+ */
+#define HeapTupleSatisfiesVisibility(tuple, seeself) \
+( \
+       TransactionIdEquals((tuple)->t_xmax, AmiTransactionId) ? \
+               false \
+       : \
+       ( \
+               ((seeself) == true || heapisoverride()) ? \
+                       HeapTupleSatisfiesItself(tuple) \
+               : \
+                       HeapTupleSatisfiesNow(tuple) \
+       ) \
+)
 
-extern bool HeapTupleSatisfiesVisibility(HeapTuple tuple, bool seeself);
+#define        heapisoverride() \
+( \
+       (!TransactionIdIsValid(HeapSpecialTransactionId)) ? \
+               false \
+       : \
+       ( \
+               (!TransactionIdEquals(GetCurrentTransactionId(), \
+                                                        HeapSpecialTransactionId) || \
+                GetCurrentCommandId() != HeapSpecialCommandId) ? \
+               ( \
+                       HeapSpecialTransactionId = InvalidTransactionId, \
+                       false \
+               ) \
+               : \
+                       true \
+       ) \
+)
+
+extern bool HeapTupleSatisfiesItself(HeapTuple tuple);
+extern bool HeapTupleSatisfiesNow(HeapTuple tuple);
+
+extern void setheapoverride(bool on);
 
 
 #endif                                                 /* TQUAL_H */