Inline some small functions called for every row.
authorBruce Momjian
Fri, 24 Apr 1998 14:43:33 +0000 (14:43 +0000)
committerBruce Momjian
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 00810528c44531f578f34feb166703c4cf0c63c1..021c666ebf23a32ef9cd827a769005c1fa1573ea 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
@@ -53,16 +53,6 @@ xidout(TransactionId transactionId)
 
 }
 
-/* ----------------------------------------------------------------
- *     TransactionIdEquals
- * ----------------------------------------------------------------
- */
-bool
-TransactionIdEquals(TransactionId id1, TransactionId id2)
-{
-   return ((bool) (id1 == id2));
-}
-
 /* ----------------------------------------------------------------
  *     TransactionIdIsLessThan
  * ----------------------------------------------------------------
index 3d64ba0095b52e6dad6759c4983e6b88b5b3831e..cd6ac66c9f0109fe4ab4ad7356a082ccb8ba6868 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 23e09682ea9c7b0660eb4ab3c62a05a846334cc2..4a96dc2621e68062d08a8ad32af731109587b447 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 6b75bf5b7555c5bae15ac173cd74a1855f3025cd..7ab6019f999266c8f083daf5245f75b60a2231a7 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 $
  *
  *-------------------------------------------------------------------------
  */
@@ -1262,25 +1262,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 ae648c0fc452e15422bf15007244034f202a4f79..13fdbf11c7f68d2fd0f2a933bb2e8758b6e7ae8f 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 bb0538eb79a18c4e9ae43ad79980ecd79e1d038c..3f9bc0410d348432ba260ecc15c054e3d666c5e3 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 60bd8cab611583f61af5f66a3d20e98fc9f26fa8..7abcb63e69754d2ffb1960fa851a7751936347de 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 0ce8dc3fc9f32f4c2da58df034317f9d182e4122..17ff71c2f98918ca5887f88afa155ad1c5d904e0 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 
+#include 
 #include 
 #include 
 #include 
 
+/* ----------------
+ *     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 fdc3abcee431a0da0d9ddd5c020807e313dd569e..f27e9d1ed3a98ffbf9e86e3cce9add768bdb1e72 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 
 #include 
 #include 
+#include 
 #include 
 
 /*
@@ -72,6 +73,59 @@ extern int   ShowPinTrace;
 #define BUFFER_FLUSH_WRITE     0       /* immediate write */
 #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
  */
@@ -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 2be7093e4c744a1da44ad69d5de8ce80860e0c22..c0701fc963dc77a7a48c04f6bde46a1b7efb7a14 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 6ee27af2c279c778f6d12675d7228e75a025dd72..ab14efb52e2ceace4ab16f25cc7d69f67ff030b0 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 
 
-/* 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 */