40 "Gin scan temporary context",
43 "Gin scan key context",
60 bool isPartialMatch,
Pointer extra_data)
72 if (extra_data == NULL)
82 prevEntry->
attnum == attnum &&
110 scanEntry->
list = NULL;
111 scanEntry->
nlist = 0;
136 bool *partial_matches,
Pointer *extra_data)
140 uint32 nUserQueryValues = nQueryValues;
171 for (i = 0; i < nQueryValues; i++)
178 if (i < nUserQueryValues)
181 queryKey = queryValues[
i];
182 queryCategory = queryCategories[
i];
185 ? partial_matches[i] :
false;
186 this_extra = (extra_data) ? extra_data[i] : NULL;
191 queryKey = (
Datum) 0;
204 elog(
ERROR,
"unexpected searchMode: %d", searchMode);
208 isPartialMatch =
false;
222 strategy, searchMode,
223 queryKey, queryCategory,
224 isPartialMatch, this_extra);
236 if (so->
keys == NULL)
267 bool hasNullQuery =
false;
294 int32 nQueryValues = 0;
295 bool *partial_matches = NULL;
297 bool *nullFlags = NULL;
312 queryValues = (
Datum *)
339 if (queryValues == NULL || nQueryValues <= 0)
359 for (j = 0; j < nQueryValues; j++)
372 queryValues, categories,
373 partial_matches, extra_data);
386 NULL, NULL, NULL, NULL);
401 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
402 errmsg(
"old GIN indexes do not support whole-index scans nor searches for nulls"),
403 errhint(
"To fix this, do REINDEX INDEX \"%s\".",
414 ScanKey orderbys,
int norderbys)
#define GIN_CAT_EMPTY_QUERY
IndexScanDesc ginbeginscan(Relation rel, int nkeys, int norderbys)
void ginendscan(IndexScanDesc scan)
Oid supportCollation[INDEX_MAX_KEYS]
void tbm_end_iterate(TBMIterator *iterator)
void ginrescan(IndexScanDesc scan, ScanKey scankey, int nscankeys, ScanKey orderbys, int norderbys)
void MemoryContextDelete(MemoryContext context)
#define AllocSetContextCreate
int errhint(const char *fmt,...)
#define PointerGetDatum(X)
TBMIterator * matchIterator
#define GIN_SEARCH_MODE_EVERYTHING
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
bool canPartialMatch[INDEX_MAX_KEYS]
int ginCompareEntries(GinState *ginstate, OffsetNumber attnum, Datum a, GinNullCategory categorya, Datum b, GinNullCategory categoryb)
int errcode(int sqlerrcode)
void ReleaseBuffer(Buffer buffer)
#define GIN_SEARCH_MODE_ALL
void pfree(void *pointer)
#define GIN_SEARCH_MODE_INCLUDE_EMPTY
signed char GinNullCategory
Datum FunctionCall7Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2, Datum arg3, Datum arg4, Datum arg5, Datum arg6, Datum arg7)
struct GinScanKeyData * GinScanKey
StrategyNumber sk_strategy
#define ALLOCSET_DEFAULT_SIZES
GinScanOpaqueData * GinScanOpaque
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 tbm_free(TIDBitmap *tbm)
static GinScanEntry ginFillScanEntry(GinScanOpaque so, OffsetNumber attnum, StrategyNumber strategy, int32 searchMode, Datum queryKey, GinNullCategory queryCategory, bool isPartialMatch, Pointer extra_data)
#define FirstOffsetNumber
void initGinState(GinState *state, Relation index)
GinTernaryValue * entryRes
#define RelationGetRelationName(relation)
#define pgstat_count_index_scan(rel)
FmgrInfo extractQueryFn[INDEX_MAX_KEYS]
MemoryContext CurrentMemoryContext
#define ereport(elevel, rest)
struct GinScanEntryData * GinScanEntry
#define ItemPointerSetMin(p)
#define MemoryContextResetAndDeleteChildren(ctx)
GinScanEntry * requiredEntries
void * palloc0(Size size)
struct GinScanKeyData GinScanKeyData
void ginGetStats(Relation index, GinStatsData *stats)
#define GIN_SEARCH_MODE_DEFAULT
GinNullCategory * queryCategories
TBMIterateResult * matchResult
#define InvalidOffsetNumber
void ginNewScanKey(IndexScanDesc scan)
#define Assert(condition)
GinNullCategory queryCategory
void * repalloc(void *pointer, Size size)
#define DatumGetPointer(X)
struct ScanKeyData * keyData
void ginInitConsistentFunction(GinState *ginstate, GinScanKey key)
int errmsg(const char *fmt,...)
GinScanEntry * additionalEntries
IndexScanDesc RelationGetIndexScan(Relation indexRelation, int nkeys, int norderbys)
#define GIN_CAT_EMPTY_ITEM
#define UInt16GetDatum(X)
void ginFreeScanKeys(GinScanOpaque so)