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(Page page)
static Item PageGetItem(Page page, ItemId itemId)
static Size PageGetPageSize(Page page)
static ItemId PageGetItemId(Page page, OffsetNumber offsetNumber)
static bool PageIsNew(Page page)
static OffsetNumber PageGetMaxOffsetNumber(Page page)
static uint16 PageGetSpecialSize(Page 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 Datum PointerGetDatum(const void *X)
static Datum BoolGetDatum(bool X)
static Datum ObjectIdGetDatum(Oid X)
static Datum Int32GetDatum(int32 X)
MemoryContextSwitchTo(old_ctx)
#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)