mirror of
https://github.com/postgres/postgres.git
synced 2025-08-25 20:23:07 +03:00
Allow GIN's extractQuery method to signal that nothing can satisfy the query.
In this case extractQuery should returns -1 as nentries. This changes prototype of extractQuery method to use int32* instead of uint32* for nentries argument. Based on that gincostestimate may see two corner cases: nothing will be found or seqscan should be used. Per proposal at http://archives.postgresql.org/pgsql-hackers/2007-01/msg01581.php PS tsearch_core patch should be sightly modified to support changes, but I'm waiting a verdict about reviewing of tsearch_core patch.
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
* header file for postgres inverted index access method implementation.
|
||||
*
|
||||
* Copyright (c) 2006, PostgreSQL Global Development Group
|
||||
* $PostgreSQL: pgsql/src/include/access/gin.h,v 1.9 2006/10/05 17:57:40 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/access/gin.h,v 1.10 2007/01/31 15:09:45 teodor Exp $
|
||||
*--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@@ -233,8 +233,8 @@ extern void GinInitBuffer(Buffer b, uint32 f);
|
||||
extern void GinInitPage(Page page, uint32 f, Size pageSize);
|
||||
extern int compareEntries(GinState *ginstate, Datum a, Datum b);
|
||||
extern Datum *extractEntriesS(GinState *ginstate, Datum value,
|
||||
uint32 *nentries, bool *needUnique);
|
||||
extern Datum *extractEntriesSU(GinState *ginstate, Datum value, uint32 *nentries);
|
||||
int32 *nentries, bool *needUnique);
|
||||
extern Datum *extractEntriesSU(GinState *ginstate, Datum value, int32 *nentries);
|
||||
extern Page GinPageGetCopyPage(Page page);
|
||||
|
||||
/* gininsert.c */
|
||||
@@ -399,6 +399,8 @@ typedef struct GinScanOpaqueData
|
||||
|
||||
GinScanKey keys;
|
||||
uint32 nkeys;
|
||||
bool isVoidRes; /* true if ginstate.extractQueryFn
|
||||
guarantees that nothing will be found */
|
||||
|
||||
GinScanKey markPos;
|
||||
} GinScanOpaqueData;
|
||||
@@ -458,7 +460,7 @@ typedef struct
|
||||
|
||||
extern void ginInitBA(BuildAccumulator *accum);
|
||||
extern void ginInsertRecordBA(BuildAccumulator *accum,
|
||||
ItemPointer heapptr, Datum *entries, uint32 nentry);
|
||||
ItemPointer heapptr, Datum *entries, int32 nentry);
|
||||
extern ItemPointerData *ginGetEntry(BuildAccumulator *accum, Datum *entry, uint32 *n);
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user