41 "Gin scan temporary context",
44 "Gin scan key context",
61 bool isPartialMatch,
Pointer extra_data)
78 if (extra_data ==
NULL &&
so->totalentries < 100)
80 for (
i = 0;
i <
so->totalentries;
i++)
85 prevEntry->isPartialMatch == isPartialMatch &&
118 scanEntry->
nlist = 0;
124 if (
so->totalentries >=
so->allocentries)
126 so->allocentries *= 2;
129 so->entries[
so->totalentries++] = scanEntry;
146 int i = key->nentries++;
151 (
Datum) 0, queryCategory,
177 key->queryValues = queryValues;
178 key->queryCategories = queryCategories;
179 key->extra_data = extra_data;
180 key->strategy = strategy;
181 key->searchMode = searchMode;
191 key->curItemMatches =
false;
192 key->recheckCurItem =
false;
193 key->isFinished =
false;
195 key->nadditional = 0;
196 key->requiredEntries =
NULL;
197 key->additionalEntries =
NULL;
209 queryKey = queryValues[
i];
210 queryCategory = queryCategories[
i];
217 strategy, searchMode,
218 queryKey, queryCategory,
244 for (
i = 0;
i <
so->totalentries;
i++)
263 so->totalentries = 0;
290 so->totalentries = 0;
291 so->allocentries = 32;
295 so->isVoidRes =
false;
314 so->isVoidRes =
true;
319 queryValues = (
Datum *)
321 so->ginstate.supportCollation[
skey->sk_attno - 1],
350 so->isVoidRes =
true;
377 skey->sk_strategy, searchMode,
379 queryValues, categories,
396 for (
i = 0;
i <
so->nkeys;
i++)
405 key->excludeOnly =
false;
430 for (
i = 0;
i <
so->nkeys;
i++)
434 if (key->excludeOnly)
456 if (
so->nkeys == 0 && !
so->isVoidRes)
478 errmsg(
"old GIN indexes do not support whole-index scans nor searches for nulls"),
479 errhint(
"To fix this, do REINDEX INDEX \"%s\".",
492 ScanKey orderbys,
int norderbys)
#define InvalidBlockNumber
void ReleaseBuffer(Buffer buffer)
#define Assert(condition)
int errhint(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define palloc_object(type)
#define repalloc_array(pointer, type, count)
#define palloc_array(type, count)
#define palloc0_array(type, count)
Datum FunctionCall7Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7)
IndexScanDesc RelationGetIndexScan(Relation indexRelation, int nkeys, int norderbys)
#define GIN_SEARCH_MODE_ALL
#define GIN_SEARCH_MODE_EVERYTHING
#define GIN_SEARCH_MODE_DEFAULT
#define GIN_SEARCH_MODE_INCLUDE_EMPTY
GinScanOpaqueData * GinScanOpaque
static int ginCompareEntries(GinState *ginstate, OffsetNumber attnum, Datum a, GinNullCategory categorya, Datum b, GinNullCategory categoryb)
struct GinScanKeyData * GinScanKey
#define GIN_CAT_EMPTY_ITEM
signed char GinNullCategory
#define ItemPointerSetMin(p)
#define GIN_CAT_EMPTY_QUERY
void ginInitConsistentFunction(GinState *ginstate, GinScanKey key)
IndexScanDesc ginbeginscan(Relation rel, int nkeys, int norderbys)
void ginFreeScanKeys(GinScanOpaque so)
static void ginFillScanKey(GinScanOpaque so, OffsetNumber attnum, StrategyNumber strategy, int32 searchMode, Datum query, uint32 nQueryValues, Datum *queryValues, GinNullCategory *queryCategories, bool *partial_matches, Pointer *extra_data)
void ginendscan(IndexScanDesc scan)
void ginNewScanKey(IndexScanDesc scan)
void ginrescan(IndexScanDesc scan, ScanKey scankey, int nscankeys, ScanKey orderbys, int norderbys)
static void ginScanKeyAddHiddenEntry(GinScanOpaque so, GinScanKey key, GinNullCategory queryCategory)
static GinScanEntry ginFillScanEntry(GinScanOpaque so, OffsetNumber attnum, StrategyNumber strategy, int32 searchMode, Datum queryKey, GinNullCategory queryCategory, bool isPartialMatch, Pointer extra_data)
void ginGetStats(Relation index, GinStatsData *stats)
void initGinState(GinState *state, Relation index)
void MemoryContextReset(MemoryContext context)
void pfree(void *pointer)
void * palloc0(Size size)
MemoryContext CurrentMemoryContext
void MemoryContextDelete(MemoryContext context)
#define AllocSetContextCreate
#define ALLOCSET_DEFAULT_SIZES
#define InvalidOffsetNumber
#define FirstOffsetNumber
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
#define pgstat_count_index_scan(rel)
static Datum PointerGetDatum(const void *X)
static Datum UInt16GetDatum(uint16 X)
static Pointer DatumGetPointer(Datum X)
#define RelationGetRelationName(relation)
TBMIterateResult matchResult
TBMPrivateIterator * matchIterator
GinNullCategory queryCategory
bool canPartialMatch[INDEX_MAX_KEYS]
struct ScanKeyData * keyData
struct IndexScanInstrumentation * instrument
void tbm_free(TIDBitmap *tbm)
void tbm_end_private_iterate(TBMPrivateIterator *iterator)