45 bool killedsomething =
false;
81 killedsomething =
true;
128 bool *recheck_distances_p)
138 *recheck_distances_p =
false;
150 elog(
ERROR,
"invalid GiST tuple found on leaf page");
198 datum, r, page, offset,
226 *recheck_p |= recheck;
247 if ((key->sk_flags &
SK_ISNULL) || isNull)
259 datum, r, page, offset,
286 *recheck_distances_p |= recheck;
364 item->
blkno = opaque->rightlink;
397 bool recheck_distances;
414 &recheck, &recheck_distances);
565 #ifndef USE_FLOAT8_BYVAL
576 #ifndef USE_FLOAT4_BYVAL
595 elog(
ERROR,
"GiST operator family's FOR ORDER BY operator must return float8 or float4 if the distance function is lossy");
628 elog(
ERROR,
"GiST only supports forward scan direction");
770 memset(&fakeItem.data.parentlsn, 0,
sizeof(
GistNSN));
#define GistMarkPageHasGarbage(page)
#define GistFollowRight(page)
#define GistPageGetNSN(page)
static void TestForOldSnapshot(Snapshot snapshot, Relation relation, Page page)
static bool gistindex_keytest(IndexScanDesc scan, IndexTuple tuple, Page page, OffsetNumber offset, bool *recheck_p, bool *recheck_distances_p)
OffsetNumber * killedItems
void MarkBufferDirtyHint(Buffer buffer, bool buffer_std)
#define ItemIdMarkDead(itemId)
#define PointerGetDatum(X)
Datum FunctionCall5Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5)
void tbm_add_tuples(TIDBitmap *tbm, const ItemPointer tids, int ntids, bool recheck)
bool gistgettuple(IndexScanDesc scan, ScanDirection dir)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
IndexTuple gistFetchTuple(GISTSTATE *giststate, Relation r, IndexTuple tuple)
#define pairingheap_is_empty(h)
#define GistTupleIsInvalid(itup)
void MemoryContextReset(MemoryContext context)
MemoryContext pageDataCxt
#define ItemIdIsDead(itemId)
#define OidIsValid(objectId)
#define PageGetMaxOffsetNumber(page)
bool ignore_killed_tuples
Datum Float8GetDatum(float8 X)
double distances[FLEXIBLE_ARRAY_MEMBER]
void pfree(void *pointer)
void gistdentryinit(GISTSTATE *giststate, int nkey, GISTENTRY *e, Datum k, Relation r, Page pg, OffsetNumber o, bool l, bool isNull)
void UnlockReleaseBuffer(Buffer buffer)
#define ObjectIdGetDatum(X)
static void gistScanPage(IndexScanDesc scan, GISTSearchItem *pageItem, double *myDistances, TIDBitmap *tbm, int64 *ntids)
Datum Float4GetDatum(float4 X)
GISTScanOpaqueData * GISTScanOpaque
XLogRecPtr BufferGetLSNAtomic(Buffer buffer)
#define FirstOffsetNumber
IndexTupleData * IndexTuple
#define pgstat_count_index_scan(rel)
#define GISTSearchItemIsHeap(item)
#define BufferGetPage(buffer)
static GISTSearchItem * getNextGISTSearchItem(GISTScanOpaque so)
int64 gistgetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
double get_float8_infinity(void)
#define GistPageIsLeaf(page)
#define XLogRecPtrIsInvalid(r)
#define PageGetItemId(page, offsetNumber)
#define DatumGetFloat8(X)
void LockBuffer(Buffer buffer, int mode)
bool gistcanreturn(Relation index, int attno)
#define GistPageGetOpaque(page)
#define Assert(condition)
static bool getNextNearest(IndexScanDesc scan)
GISTSearchHeapItem pageData[BLCKSZ/sizeof(IndexTupleData)]
void gistcheckpage(Relation rel, Buffer buf)
Buffer ReadBuffer(Relation reln, BlockNumber blockNum)
#define OffsetNumberNext(offsetNumber)
#define InvalidBlockNumber
#define BufferIsValid(bufnum)
#define index_getattr(tup, attnum, tupleDesc, isnull)
#define DatumGetPointer(X)
static void gistkillitems(IndexScanDesc scan)
union GISTSearchItem::@38 data
#define MaxIndexTuplesPerPage
#define SizeOfGISTSearchItem(n_distances)
pairingheap_node * pairingheap_remove_first(pairingheap *heap)
#define CHECK_FOR_INTERRUPTS()
void pairingheap_add(pairingheap *heap, pairingheap_node *node)
#define ItemPointerGetBlockNumber(pointer)
#define PageGetItem(page, itemId)
RegProcedure index_getprocid(Relation irel, AttrNumber attnum, uint16 procnum)