75 for (
i = 0;
i <
so->numKilled;
i++)
88 offnum =
so->killedItems[
i];
161 elog(
ERROR,
"invalid GiST tuple found on leaf page");
165 so->distances[
i].isnull =
false;
212 datum, r, page, offset,
261 if ((key->sk_flags &
SK_ISNULL) || isNull)
274 datum, r, page, offset,
406 so->nPageData =
so->curPageData = 0;
469 so->pageData[
so->nPageData].heapPtr =
it->t_tid;
470 so->pageData[
so->nPageData].recheck = recheck;
471 so->pageData[
so->nPageData].offnum =
i;
480 so->pageData[
so->nPageData].recontup =
626 elog(
ERROR,
"GiST only supports forward scan direction");
640 so->firstCall =
false;
641 so->curPageData =
so->nPageData = 0;
661 if (
so->curPageData <
so->nPageData)
666 if (
so->killedItems ==
NULL)
678 so->killedItems[
so->numKilled++] =
679 so->pageData[
so->curPageData - 1].offnum;
687 scan->
xs_hitup =
so->pageData[
so->curPageData].recontup;
699 &&
so->curPageData > 0
700 &&
so->curPageData ==
so->nPageData)
703 if (
so->killedItems ==
NULL)
715 so->killedItems[
so->numKilled++] =
716 so->pageData[
so->curPageData - 1].offnum;
745 }
while (
so->nPageData == 0);
768 so->curPageData =
so->nPageData = 0;
#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)
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 PointerGetDatum(const void *X)
static Datum UInt16GetDatum(uint16 X)
static float8 DatumGetFloat8(Datum X)
static Datum ObjectIdGetDatum(Oid X)
void PredicateLockPage(Relation relation, BlockNumber blkno, Snapshot snapshot)
#define IndexRelationGetNumberOfKeyAttributes(relation)
union GISTSearchItem::@49 data
IndexOrderByDistance distances[FLEXIBLE_ARRAY_MEMBER]
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)