31#define IS_INDEX(r) ((r)->rd_rel->relkind == RELKIND_INDEX)
32#define IS_HASH(r) ((r)->rd_rel->relam == HASH_AM_OID)
71 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
72 errmsg(
"input page is not a valid %s page",
"hash"),
73 errdetail(
"Expected special size %d, got %d.",
80 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
81 errmsg(
"input page is not a valid %s page",
"hash"),
93 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
94 errmsg(
"invalid hash page type %08x", pagetype)));
97 if (flags != 0 && (pagetype & flags) == 0)
103 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
104 errmsg(
"page is not a hash meta page")));
108 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
109 errmsg(
"page is not a hash bucket or overflow page")));
113 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
114 errmsg(
"page is not a hash overflow page")));
118 "hash page of type %08x not in mask %08x",
133 (
errcode(ERRCODE_INDEX_CORRUPTED),
134 errmsg(
"invalid magic number for metadata"),
135 errdetail(
"Expected 0x%08x, got 0x%08x.",
140 (
errcode(ERRCODE_INDEX_CORRUPTED),
141 errmsg(
"invalid version for metadata"),
162 stat->dead_items =
stat->live_items = 0;
202 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
203 errmsg(
"must be superuser to use raw page functions")));
250 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
251 errmsg(
"must be superuser to use raw page functions")));
257 stat.hasho_flag =
stat.hasho_page_id =
stat.free_size = 0;
263 elog(
ERROR,
"return type must be a row type");
315 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
316 errmsg(
"must be superuser to use raw page functions")));
338 elog(
ERROR,
"return type must be a row type");
415 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
416 errmsg(
"must be superuser to use raw page functions")));
422 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
423 errmsg(
"\"%s\" is not a %s index",
428 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
429 errmsg(
"cannot access temporary tables of other sessions")));
433 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
434 errmsg(
"invalid block number")));
438 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
439 errmsg(
"block number %lld is out of range for relation \"%s\"",
452 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
453 errmsg(
"invalid overflow block number %u",
458 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
459 errmsg(
"invalid overflow block number %u",
469 bitmapbit = ovflbitno &
BMPG_MASK(metap);
473 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
474 errmsg(
"invalid overflow block number %u",
493 elog(
ERROR,
"return type must be a row type");
525 bool nulls[16] = {0};
531 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
532 errmsg(
"must be superuser to use raw page functions")));
538 elog(
ERROR,
"return type must be a row type");
ArrayType * construct_array_builtin(Datum *elems, int nelems, Oid elmtype)
#define InvalidBlockNumber
static Datum values[MAXATTR]
#define RelationGetNumberOfBlocks(reln)
static Page BufferGetPage(Buffer buffer)
Size PageGetFreeSpace(const PageData *page)
static uint16 PageGetSpecialSize(const PageData *page)
static Size PageGetPageSize(const PageData *page)
static Item PageGetItem(const PageData *page, const ItemIdData *itemId)
static bool PageIsNew(const PageData *page)
static ItemId PageGetItemId(Page page, OffsetNumber offsetNumber)
static OffsetNumber PageGetMaxOffsetNumber(const PageData *page)
int errdetail(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
TupleDesc BlessTupleDesc(TupleDesc tupdesc)
AttInMetadata * TupleDescGetAttInMetadata(TupleDesc tupdesc)
Datum Int64GetDatum(int64 X)
Datum Float8GetDatum(float8 X)
#define PG_GETARG_INT64(n)
#define PG_RETURN_TEXT_P(x)
#define PG_RETURN_DATUM(x)
#define PG_GETARG_BYTEA_P(n)
TypeFuncClass get_call_result_type(FunctionCallInfo fcinfo, Oid *resultTypeId, TupleDesc *resultTupleDesc)
#define SRF_IS_FIRSTCALL()
#define SRF_PERCALL_SETUP()
#define SRF_RETURN_NEXT(_funcctx, _result)
#define SRF_FIRSTCALL_INIT()
static Datum HeapTupleGetDatum(const HeapTupleData *tuple)
#define SRF_RETURN_DONE(_funcctx)
#define HashPageGetOpaque(page)
#define HASH_MAX_SPLITPOINTS
#define HashPageGetBitmap(page)
#define HashPageGetMeta(page)
#define BMPG_SHIFT(metap)
Datum hash_bitmap_info(PG_FUNCTION_ARGS)
Datum hash_page_stats(PG_FUNCTION_ARGS)
PG_FUNCTION_INFO_V1(hash_page_type)
Datum hash_page_type(PG_FUNCTION_ARGS)
Datum hash_metapage_info(PG_FUNCTION_ARGS)
struct HashPageStat HashPageStat
static Page verify_hash_page(bytea *raw_page, int flags)
static void GetHashPageStatistics(Page page, HashPageStat *stat)
Datum hash_page_items(PG_FUNCTION_ARGS)
uint32 _hash_ovflblkno_to_bitno(HashMetaPage metap, BlockNumber ovflblkno)
void _hash_relbuf(Relation rel, Buffer buf)
Buffer _hash_getbuf(Relation rel, BlockNumber blkno, int access, int flags)
uint32 _hash_get_indextuple_hashkey(IndexTuple itup)
HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, const Datum *values, const bool *isnull)
void index_close(Relation relation, LOCKMODE lockmode)
#define ItemIdIsDead(itemId)
#define ItemIdIsValid(itemId)
IndexTupleData * IndexTuple
#define FirstOffsetNumber
Page get_page_from_raw(bytea *raw_page)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
static Datum PointerGetDatum(const void *X)
static Datum BoolGetDatum(bool X)
static Datum ObjectIdGetDatum(Oid X)
static Datum Int32GetDatum(int32 X)
#define RelationGetRelationName(relation)
#define RELATION_IS_OTHER_TEMP(relation)
Relation relation_open(Oid relationId, LOCKMODE lockmode)
AttInMetadata * attinmeta
MemoryContext multi_call_memory_ctx
BlockNumber hashm_mapp[HASH_MAX_BITMAPS]
RegProcedure hashm_procid
uint32 hashm_spares[HASH_MAX_SPLITPOINTS]
BlockNumber hasho_nextblkno
BlockNumber hasho_prevblkno
BlockNumber hasho_prevblkno
BlockNumber hasho_nextblkno
Datum bit(PG_FUNCTION_ARGS)
text * cstring_to_text(const char *s)