Skip to content
Snippets Groups Projects
Commit 4cbfeef9 authored by Bruce Momjian's avatar Bruce Momjian
Browse files

Inline some small functions called for every row.

parent 7500a961
No related branches found
No related tags found
No related merge requests found
......@@ -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
* ----------------------------------------------------------------
......
......@@ -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 $
*
*-------------------------------------------------------------------------
*/
......@@ -40,10 +40,10 @@
* 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
*
......
......@@ -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"
......
......@@ -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.
......
......@@ -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
* ----------------
......
......@@ -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)
......
......@@ -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);
......
......@@ -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 $
*
*-------------------------------------------------------------------------
*/
......@@ -14,10 +14,48 @@
#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,
......
......@@ -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>
/*
......@@ -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);
......
......@@ -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);
......
......@@ -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 $
*
*-------------------------------------------------------------------------
*/
......@@ -15,12 +15,51 @@
#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 */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment