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

📄 heapam.h

📁 关系型数据库 Postgresql 6.5.2
💻 H
字号:
/*------------------------------------------------------------------------- * * heapam.h *	  POSTGRES heap access method definitions. * * * Copyright (c) 1994, Regents of the University of California * * $Id: heapam.h,v 1.43.2.1 1999/07/30 18:26:58 scrappy Exp $ * *------------------------------------------------------------------------- */#ifndef HEAPAM_H#define HEAPAM_H#include <time.h>#include "access/htup.h"#include "access/relscan.h"#include "access/tupmacs.h"#include "storage/block.h"#include "utils/rel.h"#include "utils/tqual.h"/* ---------------------------------------------------------------- *				heap access method statistics * ---------------------------------------------------------------- */typedef struct HeapAccessStatisticsData{	time_t		init_global_timestamp;	/* time global statistics started */	time_t		local_reset_timestamp;	/* last time local reset was done */	time_t		last_request_timestamp; /* last time stats were requested */	int			global_open;	int			global_openr;	int			global_close;	int			global_beginscan;	int			global_rescan;	int			global_endscan;	int			global_getnext;	int			global_fetch;	int			global_insert;	int			global_delete;	int			global_replace;	int			global_mark4update;	int			global_markpos;	int			global_restrpos;	int			global_BufferGetRelation;	int			global_RelationIdGetRelation;	int			global_RelationIdGetRelation_Buf;	int			global_RelationNameGetRelation;	int			global_getreldesc;	int			global_heapgettup;	int			global_RelationPutHeapTuple;	int			global_RelationPutLongHeapTuple;	int			local_open;	int			local_openr;	int			local_close;	int			local_beginscan;	int			local_rescan;	int			local_endscan;	int			local_getnext;	int			local_fetch;	int			local_insert;	int			local_delete;	int			local_replace;	int			local_mark4update;	int			local_markpos;	int			local_restrpos;	int			local_BufferGetRelation;	int			local_RelationIdGetRelation;	int			local_RelationIdGetRelation_Buf;	int			local_RelationNameGetRelation;	int			local_getreldesc;	int			local_heapgettup;	int			local_RelationPutHeapTuple;	int			local_RelationPutLongHeapTuple;} HeapAccessStatisticsData;typedef HeapAccessStatisticsData *HeapAccessStatistics;#define IncrHeapAccessStat(x) \	(heap_access_stats == NULL ? 0 : (heap_access_stats->x)++)/* ---------------- *		fastgetattr * *		This gets called many times, so we macro the cacheable and NULL *		lookups, and call noncachegetattr() for the rest. * * ---------------- */extern Datum nocachegetattr(HeapTuple tup, int attnum,			   TupleDesc att, bool *isnull);#if !defined(DISABLE_COMPLEX_MACRO)#define fastgetattr(tup, attnum, tupleDesc, isnull) \( \	AssertMacro((attnum) > 0), \	((isnull) ? (*(isnull) = false) : (dummyret)NULL), \	HeapTupleNoNulls(tup) ? \	( \		((tupleDesc)->attrs[(attnum)-1]->attcacheoff != -1 || \		 (attnum) == 1) ? \		( \			(Datum)fetchatt(&((tupleDesc)->attrs[(attnum)-1]), \				(char *) (tup)->t_data + (tup)->t_data->t_hoff + \				( \					((attnum) != 1) ? \						(tupleDesc)->attrs[(attnum)-1]->attcacheoff \					: \						0 \				) \			) \		) \		: \			nocachegetattr((tup), (attnum), (tupleDesc), (isnull)) \	) \	: \	( \		att_isnull((attnum)-1, (tup)->t_data->t_bits) ? \		( \			((isnull) ? (*(isnull) = true) : (dummyret)NULL), \			(Datum)NULL \		) \		: \		( \			nocachegetattr((tup), (attnum), (tupleDesc), (isnull)) \		) \	) \)#else							/* !defined(DISABLE_COMPLEX_MACRO) */static Datumfastgetattr(HeapTuple tup, int attnum, TupleDesc tupleDesc,			bool *isnull){	return (			(attnum) > 0 ?			(			 ((isnull) ? (*(isnull) = false) : (dummyret) NULL),			 HeapTupleNoNulls(tup) ?			 (			  ((tupleDesc)->attrs[(attnum) - 1]->attcacheoff != -1 ||			   (attnum) == 1) ?			  (			   (Datum) fetchatt(&((tupleDesc)->attrs[(attnum) - 1]),						 (char *) (tup)->t_data + (tup)->t_data->t_hoff +								(								 ((attnum) != 1) ?							(tupleDesc)->attrs[(attnum) - 1]->attcacheoff								 :								 0								 )								)			   )			  :			  nocachegetattr((tup), (attnum), (tupleDesc), (isnull))			  )			 :			 (			  att_isnull((attnum) - 1, (tup)->t_data->t_bits) ?			  (			   ((isnull) ? (*(isnull) = true) : (dummyret) NULL),			   (Datum) NULL			   )			  :			  (			   nocachegetattr((tup), (attnum), (tupleDesc), (isnull))			   )			  )			 )			:			(			 (Datum) NULL			 )	);}#endif/* ---------------- *		heap_getattr * *		Find a particular field in a row represented as a heap tuple. *		We return a pointer into that heap tuple, which points to the *		first byte of the value of the field in question. * *		If the field in question has a NULL value, we return a null *		pointer and return <*isnull> == true.  Otherwise, we return *		<*isnull> == false. * *		<tup> is the pointer to the heap tuple.  <attnum> is the attribute *		number of the column (field) caller wants.	<tupleDesc> is a *		pointer to the structure describing the row and all its fields. * *		Because this macro is often called with constants, it generates *		compiler warnings about 'left-hand comma expression has no effect. * * ---------------- */#define heap_getattr(tup, attnum, tupleDesc, isnull) \( \	AssertMacro((tup) != NULL && \		(attnum) > FirstLowInvalidHeapAttributeNumber && \		(attnum) != 0), \	((attnum) > (int) (tup)->t_data->t_natts) ? \	( \		((isnull) ? (*(isnull) = true) : (dummyret)NULL), \		(Datum)NULL \	) \	: \	( \		((attnum) > 0) ? \		( \			fastgetattr((tup), (attnum), (tupleDesc), (isnull)) \		) \		: \		( \			((isnull) ? (*(isnull) = false) : (dummyret)NULL), \			((attnum) == SelfItemPointerAttributeNumber) ? \			( \				(Datum)((char *)&((tup)->t_self)) \			) \			: \			( \				(Datum)*(unsigned int *) \					((char *)(tup)->t_data + heap_sysoffset[-(attnum)-1]) \			) \		) \	) \)extern HeapAccessStatistics heap_access_stats;	/* in stats.c *//* ---------------- *		function prototypes for heap access method * ---------------- *//* heap_create, heap_creatr, and heap_destroy are declared in catalog/heap.h *//* heapam.c */extern Relation heap_open(Oid relationId);extern Relation heap_openr(char *relationName);extern void heap_close(Relation relation);extern HeapScanDesc heap_beginscan(Relation relation, int atend,			   Snapshot snapshot, unsigned nkeys, ScanKey key);extern void heap_rescan(HeapScanDesc scan, bool scanFromEnd, ScanKey key);extern void heap_endscan(HeapScanDesc scan);extern HeapTuple heap_getnext(HeapScanDesc scandesc, int backw);extern void heap_fetch(Relation relation, Snapshot snapshot, HeapTuple tup, Buffer *userbuf);extern Oid	heap_insert(Relation relation, HeapTuple tup);extern int	heap_delete(Relation relation, ItemPointer tid, ItemPointer ctid);extern int heap_replace(Relation relation, ItemPointer otid, HeapTuple tup,			 ItemPointer ctid);extern int	heap_mark4update(Relation relation, HeapTuple tup, Buffer *userbuf);extern void heap_markpos(HeapScanDesc scan);extern void heap_restrpos(HeapScanDesc scan);/* in common/heaptuple.c */extern Size ComputeDataSize(TupleDesc tupleDesc, Datum *value, char *nulls);extern void DataFill(char *data, TupleDesc tupleDesc,		 Datum *value, char *nulls, uint16 *infomask,		 bits8 *bit);extern int	heap_attisnull(HeapTuple tup, int attnum);extern int	heap_sysattrlen(AttrNumber attno);extern bool heap_sysattrbyval(AttrNumber attno);extern Datum nocachegetattr(HeapTuple tup, int attnum,			   TupleDesc att, bool *isnull);extern HeapTuple heap_copytuple(HeapTuple tuple);extern void heap_copytuple_with_tuple(HeapTuple src, HeapTuple dest);extern HeapTuple heap_formtuple(TupleDesc tupleDescriptor,			   Datum *value, char *nulls);extern HeapTuple heap_modifytuple(HeapTuple tuple,		Relation relation, Datum *replValue, char *replNull, char *repl);HeapTuple	heap_addheader(uint32 natts, int structlen, char *structure);/* in common/heap/stats.c */extern void PrintHeapAccessStatistics(HeapAccessStatistics stats);extern void initam(void);#endif	 /* HEAPAM_H */

⌨️ 快捷键说明

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