24#define CALC_NEW_BUCKET(old_bucket, lowmask) \
25 old_bucket | (lowmask + 1)
62 datum, key->sk_argument);
113 elog(
ERROR,
"missing support function %d(%u,%u) for index \"%s\"",
223 errmsg(
"index \"%s\" contains unexpected zero page at block %u",
226 errhint(
"Please REINDEX it.")));
234 errmsg(
"index \"%s\" contains corrupted page at block %u",
237 errhint(
"Please REINDEX it.")));
246 errmsg(
"index \"%s\" contains corrupted page at block %u",
249 errhint(
"Please REINDEX it.")));
262 errmsg(
"index \"%s\" is not a hash index",
268 errmsg(
"index \"%s\" has wrong hash version",
270 errhint(
"Please REINDEX it.")));
472 metap->hashm_lowmask,
473 metap->hashm_maxbucket);
546 int numKilled =
so->numKilled;
561 blkno =
so->currPos.currPage;
569 buf =
so->currPos.buf;
579 for (
i = 0;
i < numKilled;
i++)
581 int itemIndex =
so->killedItems[
i];
586 Assert(itemIndex >=
so->currPos.firstItem &&
589 while (offnum <= maxoff)
616 if (
so->hashso_bucket_buf ==
so->currPos.buf ||
static bool validate(Port *port, const char *auth)
BlockNumber BufferGetBlockNumber(Buffer buffer)
void MarkBufferDirtyHint(Buffer buffer, bool buffer_std)
static Page BufferGetPage(Buffer buffer)
static void LockBuffer(Buffer buffer, BufferLockMode mode)
static uint16 PageGetSpecialSize(const PageData *page)
static bool PageIsNew(const PageData *page)
static ItemId PageGetItemId(Page page, OffsetNumber offsetNumber)
static void * PageGetItem(PageData *page, const ItemIdData *itemId)
static OffsetNumber PageGetMaxOffsetNumber(const PageData *page)
#define RegProcedureIsValid(p)
#define Assert(condition)
int errhint(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
Datum FunctionCall2Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2)
Datum OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1)
Datum FunctionCall1Coll(FmgrInfo *flinfo, Oid collation, Datum arg1)
#define HashPageGetOpaque(page)
#define HASHSTANDARD_PROC
#define HASH_SPLITPOINT_GROUPS_WITH_ONE_PHASE
#define HashScanPosIsPinned(scanpos)
#define HashPageGetMeta(page)
#define BUCKET_TO_BLKNO(metap, B)
#define HASH_SPLITPOINT_PHASE_MASK
HashScanOpaqueData * HashScanOpaque
#define HashScanPosIsValid(scanpos)
#define HASH_SPLITPOINT_PHASE_BITS
#define LH_PAGE_HAS_DEAD_TUPLES
void _hash_relbuf(Relation rel, Buffer buf)
Buffer _hash_getbuf(Relation rel, BlockNumber blkno, int access, int flags)
uint32 _hash_spareindex(uint32 num_bucket)
BlockNumber _hash_get_newblock_from_oldbucket(Relation rel, Bucket old_bucket)
uint32 _hash_get_totalbuckets(uint32 splitpoint_phase)
uint32 _hash_get_indextuple_hashkey(IndexTuple itup)
bool _hash_checkqual(IndexScanDesc scan, IndexTuple itup)
OffsetNumber _hash_binsearch(Page page, uint32 hash_value)
uint32 _hash_datum2hashkey(Relation rel, Datum key)
Bucket _hash_hashkey2bucket(uint32 hashkey, uint32 maxbucket, uint32 highmask, uint32 lowmask)
OffsetNumber _hash_binsearch_last(Page page, uint32 hash_value)
void _hash_checkpage(Relation rel, Buffer buf, int flags)
Bucket _hash_get_newbucket_from_oldbucket(Relation rel, Bucket old_bucket, uint32 lowmask, uint32 maxbucket)
bytea * hashoptions(Datum reloptions, bool validate)
BlockNumber _hash_get_oldblock_from_newbucket(Relation rel, Bucket new_bucket)
uint32 _hash_datum2hashkey_type(Relation rel, Datum key, Oid keytype)
bool _hash_convert_tuple(Relation index, const Datum *user_values, const bool *user_isnull, Datum *index_values, bool *index_isnull)
void _hash_kill_items(IndexScanDesc scan)
#define CALC_NEW_BUCKET(old_bucket, lowmask)
FmgrInfo * index_getprocinfo(Relation irel, AttrNumber attnum, uint16 procnum)
#define ItemIdMarkDead(itemId)
bool ItemPointerEquals(const ItemPointerData *pointer1, const ItemPointerData *pointer2)
IndexTupleData * IndexTuple
static Datum index_getattr(IndexTuple tup, int attnum, TupleDesc tupleDesc, bool *isnull)
static Size IndexInfoFindDataOffset(unsigned short t_info)
Oid get_opfamily_proc(Oid opfamily, Oid lefttype, Oid righttype, int16 procnum)
#define OffsetNumberIsValid(offsetNumber)
#define OffsetNumberNext(offsetNumber)
#define FirstOffsetNumber
Datum lower(PG_FUNCTION_ARGS)
Datum upper(PG_FUNCTION_ARGS)
static int pg_leftmost_one_pos32(uint32 word)
static uint32 pg_ceil_log2_32(uint32 num)
static char buf[DEFAULT_XLOG_SEG_SIZE]
static uint32 DatumGetUInt32(Datum X)
static bool DatumGetBool(Datum X)
static Datum UInt32GetDatum(uint32 X)
#define RelationGetDescr(relation)
#define RelationGetRelationName(relation)
void * build_reloptions(Datum reloptions, bool validate, relopt_kind kind, Size relopt_struct_size, const relopt_parse_elt *relopt_elems, int num_relopt_elems)
struct ScanKeyData * keyData