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

📄 itemptr.h

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 H
字号:
/*------------------------------------------------------------------------- * * itemptr.h *	  POSTGRES disk item pointer definitions. * * * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * $PostgreSQL: pgsql/src/include/storage/itemptr.h,v 1.27 2005/10/15 02:49:46 momjian Exp $ * *------------------------------------------------------------------------- */#ifndef ITEMPTR_H#define ITEMPTR_H#include "storage/block.h"#include "storage/off.h"/* * ItemPointer: * * This is a pointer to an item within a disk page of a known file * (for example, a cross-link from an index to its parent table). * blkid tells us which block, posid tells us which entry in the linp * (ItemIdData) array we want. * * Note: because there is an item pointer in each tuple header and index * tuple header on disk, it's very important not to waste space with * structure padding bytes.  The struct is designed to be six bytes long * (it contains three int16 fields) but a few compilers will pad it to * eight bytes unless coerced.	We apply appropriate persuasion where * possible, and to cope with unpersuadable compilers, we try to use * "SizeOfIptrData" rather than "sizeof(ItemPointerData)" when computing * on-disk sizes. */typedef struct ItemPointerData{	BlockIdData ip_blkid;	OffsetNumber ip_posid;}#ifdef __arm____attribute__((packed))			/* Appropriate whack upside the head for ARM */#endifItemPointerData;#define SizeOfIptrData	\	(offsetof(ItemPointerData, ip_posid) + sizeof(OffsetNumber))typedef ItemPointerData *ItemPointer;/* ---------------- *		support macros * ---------------- *//* * ItemPointerIsValid *		True iff the disk item pointer is not NULL. */#define ItemPointerIsValid(pointer) \	((bool) (PointerIsValid(pointer) && ((pointer)->ip_posid != 0)))/* * ItemPointerGetBlockNumber *		Returns the block number of a disk item pointer. */#define ItemPointerGetBlockNumber(pointer) \( \	AssertMacro(ItemPointerIsValid(pointer)), \	BlockIdGetBlockNumber(&(pointer)->ip_blkid) \)/* * ItemPointerGetOffsetNumber *		Returns the offset number of a disk item pointer. */#define ItemPointerGetOffsetNumber(pointer) \( \	AssertMacro(ItemPointerIsValid(pointer)), \	(pointer)->ip_posid \)/* * ItemPointerSet *		Sets a disk item pointer to the specified block and offset. */#define ItemPointerSet(pointer, blockNumber, offNum) \( \	AssertMacro(PointerIsValid(pointer)), \	BlockIdSet(&((pointer)->ip_blkid), blockNumber), \	(pointer)->ip_posid = offNum \)/* * ItemPointerSetBlockNumber *		Sets a disk item pointer to the specified block. */#define ItemPointerSetBlockNumber(pointer, blockNumber) \( \	AssertMacro(PointerIsValid(pointer)), \	BlockIdSet(&((pointer)->ip_blkid), blockNumber) \)/* * ItemPointerSetOffsetNumber *		Sets a disk item pointer to the specified offset. */#define ItemPointerSetOffsetNumber(pointer, offsetNumber) \( \	AssertMacro(PointerIsValid(pointer)), \	(pointer)->ip_posid = (offsetNumber) \)/* * ItemPointerCopy *		Copies the contents of one disk item pointer to another. */#define ItemPointerCopy(fromPointer, toPointer) \( \	AssertMacro(PointerIsValid(toPointer)), \	AssertMacro(PointerIsValid(fromPointer)), \	*(toPointer) = *(fromPointer) \)/* * ItemPointerSetInvalid *		Sets a disk item pointer to be invalid. */#define ItemPointerSetInvalid(pointer) \( \	AssertMacro(PointerIsValid(pointer)), \	BlockIdSet(&((pointer)->ip_blkid), InvalidBlockNumber), \	(pointer)->ip_posid = InvalidOffsetNumber \)/* ---------------- *		externs * ---------------- */extern bool ItemPointerEquals(ItemPointer pointer1, ItemPointer pointer2);#endif   /* ITEMPTR_H */

⌨️ 快捷键说明

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