30 #define IS_HASH(r) ((r)->rd_rel->relam == HASH_AM_OID) 69 (
errcode(ERRCODE_INDEX_CORRUPTED),
70 errmsg(
"index table contains corrupted page")));
75 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
76 errmsg(
"page is not a hash page"),
88 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
89 errmsg(
"invalid hash page type %08x", pagetype)));
92 if (flags != 0 && (pagetype & flags) == 0)
98 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
99 errmsg(
"page is not a hash meta page")));
103 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
104 errmsg(
"page is not a hash bucket or overflow page")));
108 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
109 errmsg(
"page is not a hash overflow page")));
113 "hash page of type %08x not in mask %08x",
128 (
errcode(ERRCODE_INDEX_CORRUPTED),
129 errmsg(
"invalid magic number for metadata"),
130 errdetail(
"Expected 0x%08x, got 0x%08x.",
135 (
errcode(ERRCODE_INDEX_CORRUPTED),
136 errmsg(
"invalid version for metadata"),
197 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
198 errmsg(
"must be superuser to use raw page functions")));
245 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
246 errmsg(
"must be superuser to use raw page functions")));
258 elog(
ERROR,
"return type must be a row type");
261 MemSet(nulls, 0,
sizeof(nulls));
312 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
313 errmsg(
"must be superuser to use raw page functions")));
335 elog(
ERROR,
"return type must be a row type");
361 MemSet(nulls, 0,
sizeof(nulls));
414 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
415 errmsg(
"must be superuser to use raw page functions")));
420 elog(
ERROR,
"relation \"%s\" is not a hash index",
425 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
426 errmsg(
"cannot access temporary tables of other sessions")));
430 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
431 errmsg(
"invalid block number")));
435 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
436 errmsg(
"block number %lld is out of range for relation \"%s\"",
449 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
450 errmsg(
"invalid overflow block number %u",
455 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
456 errmsg(
"invalid overflow block number %u",
466 bitmapbit = ovflbitno &
BMPG_MASK(metap);
470 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
471 errmsg(
"invalid overflow block number %u",
483 bit =
ISSET(freep, bitmapbit) != 0;
490 elog(
ERROR,
"return type must be a row type");
493 MemSet(nulls, 0,
sizeof(nulls));
530 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
531 errmsg(
"must be superuser to use raw page functions")));
537 elog(
ERROR,
"return type must be a row type");
542 MemSet(nulls, 0,
sizeof(nulls));
563 HASH_MAX_SPLITPOINTS,
static void GetHashPageStatistics(Page page, HashPageStat *stat)
Datum hash_metapage_info(PG_FUNCTION_ARGS)
#define HashPageGetBitmap(page)
TypeFuncClass get_call_result_type(FunctionCallInfo fcinfo, Oid *resultTypeId, TupleDesc *resultTupleDesc)
RegProcedure hashm_procid
#define SRF_IS_FIRSTCALL()
#define PointerGetDatum(X)
struct HashPageStat HashPageStat
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
ArrayType * construct_array(Datum *elems, int nelems, Oid elmtype, int elmlen, bool elmbyval, char elmalign)
int errcode(int sqlerrcode)
#define MemSet(start, val, len)
HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, Datum *values, bool *isnull)
Buffer _hash_getbuf(Relation rel, BlockNumber blkno, int access, int flags)
#define ItemIdIsDead(itemId)
#define PageGetMaxOffsetNumber(page)
#define SRF_PERCALL_SETUP()
Size PageGetFreeSpace(Page page)
Datum Float8GetDatum(float8 X)
#define HASH_MAX_SPLITPOINTS
#define SRF_RETURN_NEXT(_funcctx, _result)
#define PG_GETARG_BYTEA_P(n)
BlockNumber hasho_prevblkno
#define ObjectIdGetDatum(X)
uint32 _hash_get_indextuple_hashkey(IndexTuple itup)
Datum hash_bitmap_info(PG_FUNCTION_ARGS)
TupleDesc BlessTupleDesc(TupleDesc tupdesc)
BlockNumber hasho_prevblkno
#define FirstOffsetNumber
AttInMetadata * attinmeta
IndexTupleData * IndexTuple
int errdetail(const char *fmt,...)
#define PageGetPageSize(page)
#define RelationGetRelationName(relation)
Datum Int64GetDatum(int64 X)
#define BMPG_SHIFT(metap)
#define BufferGetPage(buffer)
Datum hash_page_stats(PG_FUNCTION_ARGS)
#define PageGetItemId(page, offsetNumber)
#define PG_RETURN_DATUM(x)
AttInMetadata * TupleDescGetAttInMetadata(TupleDesc tupdesc)
uint32 hashm_spares[HASH_MAX_SPLITPOINTS]
#define RelationGetNumberOfBlocks(reln)
PG_FUNCTION_INFO_V1(hash_page_type)
Datum hash_page_items(PG_FUNCTION_ARGS)
void _hash_relbuf(Relation rel, Buffer buf)
#define ereport(elevel,...)
#define ItemIdIsValid(itemId)
#define PG_RETURN_TEXT_P(x)
text * cstring_to_text(const char *s)
Datum bit(PG_FUNCTION_ARGS)
Page get_page_from_raw(bytea *raw_page)
#define RELATION_IS_OTHER_TEMP(relation)
MemoryContext multi_call_memory_ctx
#define PageGetSpecialPointer(page)
#define InvalidBlockNumber
HashPageOpaqueData * HashPageOpaque
#define HeapTupleGetDatum(tuple)
#define PageGetSpecialSize(page)
uint32 _hash_ovflblkno_to_bitno(HashMetaPage metap, BlockNumber ovflblkno)
void index_close(Relation relation, LOCKMODE lockmode)
static Datum values[MAXATTR]
#define HashPageGetMeta(page)
int errmsg(const char *fmt,...)
BlockNumber hasho_nextblkno
static Page verify_hash_page(bytea *raw_page, int flags)
#define PG_GETARG_INT64(n)
BlockNumber hashm_mapp[HASH_MAX_BITMAPS]
Datum hash_page_type(PG_FUNCTION_ARGS)
BlockNumber hasho_nextblkno
Relation index_open(Oid relationId, LOCKMODE lockmode)
#define PageGetItem(page, itemId)
#define SRF_RETURN_DONE(_funcctx)
#define SRF_FIRSTCALL_INIT()