47 bool killedsomething =
false;
91 killedsomething =
true;
139 bool *recheck_distances_p)
149 *recheck_distances_p =
false;
161 elog(
ERROR,
"invalid GiST tuple found on leaf page");
212 datum, r, page, offset,
240 *recheck_p |= recheck;
261 if ((key->sk_flags &
SK_ISNULL) || isNull)
264 distance_p->
value = 0.0;
265 distance_p->
isnull =
true;
274 datum, r, page, offset,
301 *recheck_distances_p |= recheck;
303 distance_p->
isnull =
false;
374 Assert(myDistances != NULL);
428 bool recheck_distances;
446 &recheck, &recheck_distances);
626 elog(
ERROR,
"GiST only supports forward scan direction");
#define InvalidBlockNumber
BlockNumber BufferGetBlockNumber(Buffer buffer)
void BufferFinishSetHintBits(Buffer buffer, bool mark_dirty, bool buffer_std)
XLogRecPtr BufferGetLSNAtomic(Buffer buffer)
void UnlockReleaseBuffer(Buffer buffer)
bool BufferBeginSetHintBits(Buffer buffer)
Buffer ReadBuffer(Relation reln, BlockNumber blockNum)
static Page BufferGetPage(Buffer buffer)
static void LockBuffer(Buffer buffer, BufferLockMode mode)
static bool BufferIsValid(Buffer bufnum)
static ItemId PageGetItemId(Page page, OffsetNumber offsetNumber)
static void * PageGetItem(PageData *page, const ItemIdData *itemId)
static OffsetNumber PageGetMaxOffsetNumber(const PageData *page)
#define Assert(condition)
#define OidIsValid(objectId)
memcpy(sums, checksumBaseOffsets, sizeof(checksumBaseOffsets))
static float8 get_float8_infinity(void)
Datum FunctionCall5Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5)
#define GIST_COMPRESS_PROC
#define GistPageIsLeaf(page)
#define GistFollowRight(page)
#define GistPageIsDeleted(page)
#define GistPageGetOpaque(page)
#define GistMarkPageHasGarbage(page)
#define GistPageGetNSN(page)
GISTScanOpaqueData * GISTScanOpaque
#define SizeOfGISTSearchItem(n_distances)
#define GistTupleIsInvalid(itup)
#define GISTSearchItemIsHeap(item)
static bool getNextNearest(IndexScanDesc scan)
static GISTSearchItem * getNextGISTSearchItem(GISTScanOpaque so)
static bool gistindex_keytest(IndexScanDesc scan, IndexTuple tuple, Page page, OffsetNumber offset, bool *recheck_p, bool *recheck_distances_p)
bool gistgettuple(IndexScanDesc scan, ScanDirection dir)
int64 gistgetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
bool gistcanreturn(Relation index, int attno)
static void gistScanPage(IndexScanDesc scan, GISTSearchItem *pageItem, IndexOrderByDistance *myDistances, TIDBitmap *tbm, int64 *ntids)
static void gistkillitems(IndexScanDesc scan)
HeapTuple gistFetchTuple(GISTSTATE *giststate, Relation r, IndexTuple tuple)
void gistdentryinit(GISTSTATE *giststate, int nkey, GISTENTRY *e, Datum k, Relation r, Page pg, OffsetNumber o, bool l, bool isNull)
void gistcheckpage(Relation rel, Buffer buf)
RegProcedure index_getprocid(Relation irel, AttrNumber attnum, uint16 procnum)
void index_store_float8_orderby_distances(IndexScanDesc scan, Oid *orderByTypes, IndexOrderByDistance *distances, bool recheckOrderBy)
#define ItemIdMarkDead(itemId)
#define ItemIdIsDead(itemId)
static BlockNumber ItemPointerGetBlockNumber(const ItemPointerData *pointer)
IndexTupleData * IndexTuple
static Datum index_getattr(IndexTuple tup, int attnum, TupleDesc tupleDesc, bool *isnull)
#define MaxIndexTuplesPerPage
void MemoryContextReset(MemoryContext context)
void pfree(void *pointer)
#define CHECK_FOR_INTERRUPTS()
#define OffsetNumberNext(offsetNumber)
#define FirstOffsetNumber
void pairingheap_add(pairingheap *heap, pairingheap_node *node)
pairingheap_node * pairingheap_remove_first(pairingheap *heap)
#define pairingheap_is_empty(h)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
#define pgstat_count_index_scan(rel)
static bool DatumGetBool(Datum X)
static Datum UInt16GetDatum(uint16 X)
static float8 DatumGetFloat8(Datum X)
static Datum ObjectIdGetDatum(Oid X)
#define PointerGetDatum(X)
void PredicateLockPage(Relation relation, BlockNumber blkno, Snapshot snapshot)
#define IndexRelationGetNumberOfKeyAttributes(relation)
OffsetNumber * killedItems
GISTSearchHeapItem pageData[BLCKSZ/sizeof(IndexTupleData)]
IndexOrderByDistance * distances
MemoryContext pageDataCxt
IndexOrderByDistance distances[FLEXIBLE_ARRAY_MEMBER]
union GISTSearchItem::@52 data
struct ScanKeyData * keyData
struct ScanKeyData * orderByData
bool ignore_killed_tuples
struct IndexScanInstrumentation * instrument
ItemPointerData xs_heaptid
struct SnapshotData * xs_snapshot
void tbm_add_tuples(TIDBitmap *tbm, const ItemPointerData *tids, int ntids, bool recheck)
#define XLogRecPtrIsValid(r)