⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bufmgr.h

📁 关系型数据库 Postgresql 6.5.2
💻 H
字号:
/*------------------------------------------------------------------------- * * bufmgr.h *	  POSTGRES buffer manager definitions. * * * Copyright (c) 1994, Regents of the University of California * * $Id: bufmgr.h,v 1.26 1999/05/25 16:14:39 momjian Exp $ * *------------------------------------------------------------------------- */#ifndef BUFMGR_H#define BUFMGR_H#include <stdio.h>#include <storage/ipc.h>#include <storage/block.h>#include <storage/buf.h>#include <storage/buf_internals.h>#include <utils/rel.h>/* * the maximum size of a disk block for any possible installation. * * in theory this could be anything, but in practice this is actually * limited to 2^13 bytes because we have limited ItemIdData.lp_off and * ItemIdData.lp_len to 13 bits (see itemid.h). * * limit is now 2^15.  Took four bits from ItemIdData.lp_flags and gave * two apiece to ItemIdData.lp_len and lp_off. darrenk 01/06/98 * */#define MAXBLCKSZ		32768typedef void *Block;/* special pageno for bget */#define P_NEW	InvalidBlockNumber		/* grow the file to get a new page */typedef bits16 BufferLock;/**********************************************************************  the rest is function defns in the bufmgr that are externally callable **********************************************************************//* * These routines are beaten on quite heavily, hence the macroization. * See buf_internals.h for a related comment. */#define BufferDescriptorGetBuffer(bdesc) ((bdesc)->buf_id + 1)/* * BufferIsPinned *		True iff the buffer is pinned (and therefore valid) * * Note: *		Smenatics are identical to BufferIsValid *		XXX - need to remove either one eventually. */#define BufferIsPinned BufferIsValidextern int	ShowPinTrace;/* * BufferWriteModes (settable via SetBufferWriteMode) */#define BUFFER_FLUSH_WRITE		0		/* immediate write */#define BUFFER_LATE_WRITE		1		/* delayed write: mark as DIRTY *//* * Buffer context lock modes */#define BUFFER_LOCK_UNLOCK		0#define BUFFER_LOCK_SHARE		1#define BUFFER_LOCK_EXCLUSIVE	2/* * 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) \( \	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 RelationGetBufferWithBuffer(Relation relation,							BlockNumber blockNumber, Buffer buffer);extern Buffer ReadBuffer(Relation reln, BlockNumber blockNum);extern int	WriteBuffer(Buffer buffer);extern int	WriteNoReleaseBuffer(Buffer buffer);extern Buffer ReleaseAndReadBuffer(Buffer buffer, Relation relation,					 BlockNumber blockNum);extern void InitBufferPool(IPCKey key);extern void PrintBufferUsage(FILE *statfp);extern void ResetBufferUsage(void);extern void ResetBufferPool(void);extern int	BufferPoolCheckLeak(void);extern void FlushBufferPool(int StableMainMemoryFlag);extern BlockNumber BufferGetBlockNumber(Buffer buffer);extern BlockNumber RelationGetNumberOfBlocks(Relation relation);extern void ReleaseRelationBuffers(Relation rel);extern void DropBuffers(Oid dbid);extern void PrintPinnedBufs(void);extern int	BufferShmemSize(void);extern int	ReleaseBuffer(Buffer buffer);extern void BufferRefCountReset(int *refcountsave);extern void BufferRefCountRestore(int *refcountsave);extern int	SetBufferWriteMode(int mode);extern void SetBufferCommitInfoNeedsSave(Buffer buffer);extern void UnlockBuffers(void);extern void LockBuffer(Buffer buffer, int mode);#endif	 /* !defined(BufMgrIncluded) */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -