mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-15 08:20:16 +08:00
Inline some small functions called for every row.
This commit is contained in:
parent
7500a961f1
commit
4cbfeef912
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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
|
* OLD COMMENTS
|
||||||
* XXX WARNING
|
* XXX WARNING
|
||||||
@ -53,16 +53,6 @@ xidout(TransactionId transactionId)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
|
||||||
* TransactionIdEquals
|
|
||||||
* ----------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
bool
|
|
||||||
TransactionIdEquals(TransactionId id1, TransactionId id2)
|
|
||||||
{
|
|
||||||
return ((bool) (id1 == id2));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
/* ----------------------------------------------------------------
|
||||||
* TransactionIdIsLessThan
|
* TransactionIdIsLessThan
|
||||||
* ----------------------------------------------------------------
|
* ----------------------------------------------------------------
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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
|
* ExecSetNewSlotDescriptor - set a desc and the is-new-flag all at once
|
||||||
* ExecSlotBuffer - return buffer of tuple in slot
|
* ExecSlotBuffer - return buffer of tuple in slot
|
||||||
* ExecSetSlotBuffer - set the buffer for 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
|
* 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
|
* ExecSlotDescriptorIsNew - true if we're now storing a different
|
||||||
* type of tuple in a slot
|
* type of tuple in a slot
|
||||||
*
|
*
|
||||||
@ -566,59 +566,11 @@ ExecSetSlotBuffer(TupleTableSlot *slot, /* slot to change */
|
|||||||
|
|
||||||
#endif
|
#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
|
* 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
|
* ExecSlotDescriptorIsNew
|
||||||
*
|
*
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* ExecEndTee
|
* ExecEndTee
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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/palloc.h"
|
||||||
#include "utils/relcache.h"
|
#include "utils/relcache.h"
|
||||||
#include "utils/mcxt.h"
|
#include "utils/mcxt.h"
|
||||||
#include "storage/bufmgr.h" /* for IncrBufferRefCount */
|
#include "storage/bufmgr.h"
|
||||||
#include "storage/smgr.h"
|
#include "storage/smgr.h"
|
||||||
#include "optimizer/internal.h"
|
#include "optimizer/internal.h"
|
||||||
#include "executor/executor.h"
|
#include "executor/executor.h"
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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 --
|
* BufferGetBlockNumber --
|
||||||
* Returns the block number associated with a buffer.
|
* Returns the block number associated with a buffer.
|
||||||
@ -1413,24 +1394,6 @@ RelationGetNumberOfBlocks(Relation relation)
|
|||||||
smgrnblocks(DEFAULT_SMGR, 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
|
* ReleaseRelationBuffers
|
||||||
*
|
*
|
||||||
@ -1679,25 +1642,8 @@ BlowawayRelationBuffers(Relation rdesc, BlockNumber block)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef IncrBufferRefCount
|
|
||||||
#undef ReleaseBuffer
|
#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
|
* ReleaseBuffer -- remove the pin on a buffer without
|
||||||
* marking it dirty.
|
* marking it dirty.
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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);
|
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
|
* itemid stuff for PageRepairFragmentation
|
||||||
* ----------------
|
* ----------------
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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
|
#ifndef GOODAMI
|
||||||
|
|
||||||
static TransactionId HeapSpecialTransactionId = InvalidTransactionId;
|
TransactionId HeapSpecialTransactionId = InvalidTransactionId;
|
||||||
static CommandId HeapSpecialCommandId = FirstCommandId;
|
CommandId HeapSpecialCommandId = FirstCommandId;
|
||||||
|
|
||||||
void
|
void
|
||||||
setheapoverride(bool on)
|
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) */
|
#endif /* !defined(GOODAMI) */
|
||||||
/*
|
/*
|
||||||
* XXX Transaction system override hacks end here
|
* 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 --
|
* HeapTupleSatisfiesItself --
|
||||||
* True iff heap tuple is valid for "itself."
|
* 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 != my-transaction && the row was deleted by another transaction
|
||||||
* Xmax is not committed))) that has not been committed
|
* Xmax is not committed))) that has not been committed
|
||||||
*/
|
*/
|
||||||
static bool
|
bool
|
||||||
HeapTupleSatisfiesItself(HeapTuple tuple)
|
HeapTupleSatisfiesItself(HeapTuple tuple)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -215,7 +172,7 @@ HeapTupleSatisfiesItself(HeapTuple tuple)
|
|||||||
* the serializability guarantees we provide don't extend to xacts
|
* the serializability guarantees we provide don't extend to xacts
|
||||||
* that do catalog accesses. this is unfortunate, but not critical.
|
* that do catalog accesses. this is unfortunate, but not critical.
|
||||||
*/
|
*/
|
||||||
static bool
|
bool
|
||||||
HeapTupleSatisfiesNow(HeapTuple tuple)
|
HeapTupleSatisfiesNow(HeapTuple tuple)
|
||||||
{
|
{
|
||||||
if (AMI_OVERRIDE)
|
if (AMI_OVERRIDE)
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* 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) \
|
#define StoreInvalidTransactionId(dest) \
|
||||||
(*((TransactionId*)dest) = NullTransactionId)
|
(*((TransactionId*)dest) = NullTransactionId)
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------
|
||||||
|
* TransactionIdEquals
|
||||||
|
* ----------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
#define TransactionIdEquals(id1, id2) \
|
||||||
|
( \
|
||||||
|
((bool) ((id1) == (id2))) \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* extern definitions
|
* extern definitions
|
||||||
* ----------------
|
* ----------------
|
||||||
@ -95,7 +106,6 @@ extern TransactionId DisabledTransactionId;
|
|||||||
extern TransactionId xidin(char *representation);
|
extern TransactionId xidin(char *representation);
|
||||||
extern char *xidout(TransactionId transactionId);
|
extern char *xidout(TransactionId transactionId);
|
||||||
extern bool xideq(TransactionId xid1, TransactionId xid2);
|
extern bool xideq(TransactionId xid1, TransactionId xid2);
|
||||||
extern bool TransactionIdEquals(TransactionId id1, TransactionId id2);
|
|
||||||
extern bool TransactionIdIsLessThan(TransactionId id1, TransactionId id2);
|
extern bool TransactionIdIsLessThan(TransactionId id1, TransactionId id2);
|
||||||
extern void TransactionIdAdd(TransactionId *xid, int value);
|
extern void TransactionIdAdd(TransactionId *xid, int value);
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* 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
|
#define EXECUTOR_H
|
||||||
|
|
||||||
#include <catalog/pg_index.h>
|
#include <catalog/pg_index.h>
|
||||||
|
#include <storage/bufmgr.h>
|
||||||
#include <access/itup.h>
|
#include <access/itup.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <executor/execdesc.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
|
* prototypes from functions in execAmi.c
|
||||||
*/
|
*/
|
||||||
@ -107,8 +145,6 @@ extern TupleDesc
|
|||||||
ExecSetSlotDescriptor(TupleTableSlot *slot,
|
ExecSetSlotDescriptor(TupleTableSlot *slot,
|
||||||
TupleDesc tupdesc);
|
TupleDesc tupdesc);
|
||||||
extern void ExecSetSlotDescriptorIsNew(TupleTableSlot *slot, bool isNew);
|
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 ExecInitResultTupleSlot(EState *estate, CommonState *commonstate);
|
||||||
extern void
|
extern void
|
||||||
ExecInitScanTupleSlot(EState *estate,
|
ExecInitScanTupleSlot(EState *estate,
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* 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/ipc.h>
|
||||||
#include <storage/block.h>
|
#include <storage/block.h>
|
||||||
#include <storage/buf.h>
|
#include <storage/buf.h>
|
||||||
|
#include <storage/buf_internals.h>
|
||||||
#include <utils/rel.h>
|
#include <utils/rel.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -72,6 +73,59 @@ extern int ShowPinTrace;
|
|||||||
#define BUFFER_FLUSH_WRITE 0 /* immediate write */
|
#define BUFFER_FLUSH_WRITE 0 /* immediate write */
|
||||||
#define BUFFER_LATE_WRITE 1 /* delayed write: mark as DIRTY */
|
#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
|
* prototypes for functions in bufmgr.c
|
||||||
*/
|
*/
|
||||||
@ -91,17 +145,14 @@ extern void ResetBufferUsage(void);
|
|||||||
extern void ResetBufferPool(void);
|
extern void ResetBufferPool(void);
|
||||||
extern int BufferPoolCheckLeak(void);
|
extern int BufferPoolCheckLeak(void);
|
||||||
extern void FlushBufferPool(int StableMainMemoryFlag);
|
extern void FlushBufferPool(int StableMainMemoryFlag);
|
||||||
extern bool BufferIsValid(Buffer bufnum);
|
|
||||||
extern BlockNumber BufferGetBlockNumber(Buffer buffer);
|
extern BlockNumber BufferGetBlockNumber(Buffer buffer);
|
||||||
extern Relation BufferGetRelation(Buffer buffer);
|
extern Relation BufferGetRelation(Buffer buffer);
|
||||||
extern BlockNumber RelationGetNumberOfBlocks(Relation relation);
|
extern BlockNumber RelationGetNumberOfBlocks(Relation relation);
|
||||||
extern Block BufferGetBlock(Buffer buffer);
|
|
||||||
extern void ReleaseRelationBuffers(Relation rdesc);
|
extern void ReleaseRelationBuffers(Relation rdesc);
|
||||||
extern void DropBuffers(Oid dbid);
|
extern void DropBuffers(Oid dbid);
|
||||||
extern void PrintBufferDescs(void);
|
extern void PrintBufferDescs(void);
|
||||||
extern void PrintPinnedBufs(void);
|
extern void PrintPinnedBufs(void);
|
||||||
extern int BufferShmemSize(void);
|
extern int BufferShmemSize(void);
|
||||||
extern void IncrBufferRefCount(Buffer buffer);
|
|
||||||
extern int ReleaseBuffer(Buffer buffer);
|
extern int ReleaseBuffer(Buffer buffer);
|
||||||
|
|
||||||
extern void BufferRefCountReset(int *refcountsave);
|
extern void BufferRefCountReset(int *refcountsave);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* 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))
|
#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
|
* extern declarations
|
||||||
@ -292,7 +307,6 @@ PageAddItem(Page page, Item item, Size size,
|
|||||||
OffsetNumber offsetNumber, ItemIdFlags flags);
|
OffsetNumber offsetNumber, ItemIdFlags flags);
|
||||||
extern Page PageGetTempPage(Page page, Size specialSize);
|
extern Page PageGetTempPage(Page page, Size specialSize);
|
||||||
extern void PageRestoreTempPage(Page tempPage, Page oldPage);
|
extern void PageRestoreTempPage(Page tempPage, Page oldPage);
|
||||||
extern OffsetNumber PageGetMaxOffsetNumber(Page page);
|
|
||||||
extern void PageRepairFragmentation(Page page);
|
extern void PageRepairFragmentation(Page page);
|
||||||
extern Size PageGetFreeSpace(Page page);
|
extern Size PageGetFreeSpace(Page page);
|
||||||
extern void PageManagerModeSet(PageManagerMode mode);
|
extern void PageManagerModeSet(PageManagerMode mode);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* 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>
|
#include <access/htup.h>
|
||||||
|
|
||||||
/* As above, plus updates in this command */
|
extern TransactionId HeapSpecialTransactionId;
|
||||||
|
extern CommandId HeapSpecialCommandId;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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) \
|
||||||
|
) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#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);
|
extern void setheapoverride(bool on);
|
||||||
extern bool heapisoverride(void);
|
|
||||||
|
|
||||||
extern bool HeapTupleSatisfiesVisibility(HeapTuple tuple, bool seeself);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* TQUAL_H */
|
#endif /* TQUAL_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user