diff options
| author | Teodor Sigaev | 2006-05-02 11:28:56 +0000 |
|---|---|---|
| committer | Teodor Sigaev | 2006-05-02 11:28:56 +0000 |
| commit | 8a3631f8d86cdd9b07c577d6e213b1fc824db255 (patch) | |
| tree | 40bcee8383d3552cba8f79e50025613fb683a72e /src/include | |
| parent | 427c6b5b984928972e955f4477c6ba64edbb66cc (diff) | |
GIN: Generalized Inverted iNdex.
text[], int4[], Tsearch2 support for GIN.
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/access/gin.h | 436 | ||||
| -rw-r--r-- | src/include/access/rmgr.h | 3 | ||||
| -rw-r--r-- | src/include/catalog/catversion.h | 4 | ||||
| -rw-r--r-- | src/include/catalog/pg_am.h | 39 | ||||
| -rw-r--r-- | src/include/catalog/pg_amop.h | 16 | ||||
| -rw-r--r-- | src/include/catalog/pg_amproc.h | 12 | ||||
| -rw-r--r-- | src/include/catalog/pg_opclass.h | 4 | ||||
| -rw-r--r-- | src/include/catalog/pg_operator.h | 7 | ||||
| -rw-r--r-- | src/include/catalog/pg_proc.h | 41 | ||||
| -rw-r--r-- | src/include/utils/selfuncs.h | 3 |
10 files changed, 539 insertions, 26 deletions
diff --git a/src/include/access/gin.h b/src/include/access/gin.h new file mode 100644 index 00000000000..8fff7f42326 --- /dev/null +++ b/src/include/access/gin.h @@ -0,0 +1,436 @@ +/*-------------------------------------------------------------------------- + * gin.h + * 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.1 2006/05/02 11:28:55 teodor Exp $ + *-------------------------------------------------------------------------- + */ + + +#ifndef GIN_H +#define GIN_H + +#include "access/xlog.h" +#include "access/xlogdefs.h" +#include "storage/bufpage.h" +#include "storage/off.h" +#include "utils/rel.h" +#include "access/itup.h" +#include "fmgr.h" + + +/* + * amproc indexes for inverted indexes. + */ +#define GIN_COMPARE_PROC 1 +#define GIN_EXTRACTVALUE_PROC 2 +#define GIN_EXTRACTQUERY_PROC 3 +#define GIN_CONSISTENT_PROC 4 +#define GINNProcs 4 + +typedef XLogRecPtr GinNSN; + +/* + * Page opaque data in a inverted index page. + */ +typedef struct GinPageOpaqueData { + uint16 flags; + OffsetNumber maxoff; /* number entries on GIN_DATA page: + number of heap ItemPointer on GIN_DATA|GIN_LEAF page + and number of records on GIN_DATA & ~GIN_LEAF page + */ + BlockNumber rightlink; +} GinPageOpaqueData; + +typedef GinPageOpaqueData *GinPageOpaque; + +#define GIN_ROOT_BLKNO (0) + +typedef struct { + BlockIdData child_blkno; /* use it instead of BlockNumber to + save space on page */ + ItemPointerData key; +} PostingItem; + +#define PostingItemGetBlockNumber(pointer) \ + BlockIdGetBlockNumber(&(pointer)->child_blkno) + +#define PostingItemSetBlockNumber(pointer, blockNumber) \ + BlockIdSet(&((pointer)->child_blkno), (blockNumber)) + +/* + * Page opaque data in a inverted index page. + */ +#define GIN_DATA (1 << 0) +#define GIN_LEAF (1 << 1) +#define GIN_DELETED (1 << 2) + +/* + * Works on page + */ +#define GinPageGetOpaque(page) ( (GinPageOpaque) PageGetSpecialPointer(page) ) + +#define GinPageIsLeaf(page) ( GinPageGetOpaque(page)->flags & GIN_LEAF ) +#define GinPageSetLeaf(page) ( GinPageGetOpaque(page)->flags |= GIN_LEAF ) +#define GinPageSetNonLeaf(page) ( GinPageGetOpaque(page)->flags &= ~GIN_LEAF ) +#define GinPageIsData(page) ( GinPageGetOpaque(page)->flags & GIN_DATA ) +#define GinPageSetData(page) ( GinPageGetOpaque(page)->flags |= GIN_DATA ) + +#define GinPageIsDeleted(page) ( GinPageGetOpaque(page)->flags & GIN_DELETED) +#define GinPageSetDeleted(page) ( GinPageGetOpaque(page)->flags |= GIN_DELETED) +#define GinPageSetNonDeleted(page) ( GinPageGetOpaque(page)->flags &= ~GIN_DELETED) + +#define GinPageRightMost(page) ( GinPageGetOpaque(page)->rightlink == InvalidBlockNumber) + +/* + * Define our ItemPointerGet(BlockNumber|GetOffsetNumber) + * to prevent asserts + */ + +#define GinItemPointerGetBlockNumber(pointer) \ + BlockIdGetBlockNumber(&(pointer)->ip_blkid) + +#define GinItemPointerGetOffsetNumber(pointer) \ + ((pointer)->ip_posid) + +/* + * Support work on IndexTuuple on leaf pages + */ +#define GinGetNPosting(itup) GinItemPointerGetOffsetNumber(&(itup)->t_tid) +#define GinSetNPosting(itup,n) ItemPointerSetOffsetNumber(&(itup)->t_tid,(n)) +#define GIN_TREE_POSTING ((OffsetNumber)0xffff) +#define GinIsPostingTree(itup) ( GinGetNPosting(itup)==GIN_TREE_POSTING ) +#define GinSetPostingTree(itup, blkno) ( GinSetNPosting((itup),GIN_TREE_POSTING ), ItemPointerSetBlockNumber(&(itup)->t_tid, blkno) ) +#define GinGetPostingTree(itup) GinItemPointerGetBlockNumber(&(itup)->t_tid) + +#define GinGetOrigSizePosting(itup) GinItemPointerGetBlockNumber(&(itup)->t_tid) +#define GinSetOrigSizePosting(itup,n) ItemPointerSetBlockNumber(&(itup)->t_tid,(n)) +#define GinGetPosting(itup) ( (ItemPointer)(( ((char*)(itup)) + SHORTALIGN(GinGetOrigSizePosting(itup)) )) ) + +#define GinMaxItemSize \ + ((BLCKSZ - SizeOfPageHeaderData - \ + MAXALIGN(sizeof(GinPageOpaqueData))) / 3 - sizeof(ItemIdData)) + + +/* + * Data (posting tree) pages + */ +#define GinDataPageGetData(page) \ + (PageGetContents(page)+MAXALIGN(sizeof(ItemPointerData))) +#define GinDataPageGetRightBound(page) ((ItemPointer)PageGetContents(page)) +#define GinSizeOfItem(page) ( (GinPageIsLeaf(page)) ? sizeof(ItemPointerData) : sizeof(PostingItem) ) +#define GinDataPageGetItem(page,i) ( GinDataPageGetData(page) + ((i)-1) * GinSizeOfItem(page) ) + +#define GinDataPageGetFreeSpace(page) \ + ( BLCKSZ - SizeOfPageHeaderData - MAXALIGN(sizeof(GinPageOpaqueData)) - \ + GinPageGetOpaque(page)->maxoff * GinSizeOfItem(page) - \ + MAXALIGN(sizeof(ItemPointerData))) + + + +#define GIN_UNLOCK BUFFER_LOCK_UNLOCK +#define GIN_SHARE BUFFER_LOCK_SHARE +#define GIN_EXCLUSIVE BUFFER_LOCK_EXCLUSIVE + +typedef struct GinState { + FmgrInfo compareFn; + FmgrInfo extractValueFn; + FmgrInfo extractQueryFn; + FmgrInfo consistentFn; + + TupleDesc tupdesc; +} GinState; + +/* XLog stuff */ + +#define XLOG_GIN_CREATE_INDEX 0x00 + +#define XLOG_GIN_CREATE_PTREE 0x10 + +typedef struct ginxlogCreatePostingTree { + RelFileNode node; + BlockNumber blkno; + uint32 nitem; + /* follows list of heap's ItemPointer */ +} ginxlogCreatePostingTree; + +#define XLOG_GIN_INSERT 0x20 + +typedef struct ginxlogInsert { + RelFileNode node; + BlockNumber blkno; + BlockNumber updateBlkno; + OffsetNumber offset; + bool isDelete; + bool isData; + bool isLeaf; + OffsetNumber nitem; + + /* follows: tuples or ItemPointerData or PostingItem or list of ItemPointerData*/ +} ginxlogInsert; + +#define XLOG_GIN_SPLIT 0x30 + +typedef struct ginxlogSplit { + RelFileNode node; + BlockNumber lblkno; + BlockNumber rootBlkno; + BlockNumber rblkno; + BlockNumber rrlink; + OffsetNumber separator; + OffsetNumber nitem; + + bool isData; + bool isLeaf; + bool isRootSplit; + + BlockNumber leftChildBlkno; + BlockNumber updateBlkno; + + ItemPointerData rightbound; /* used only in posting tree */ + /* follows: list of tuple or ItemPointerData or PostingItem */ +} ginxlogSplit; + +#define XLOG_GIN_VACUUM_PAGE 0x40 + +typedef struct ginxlogVacuumPage { + RelFileNode node; + BlockNumber blkno; + OffsetNumber nitem; + /* follows content of page */ +} ginxlogVacuumPage; + +#define XLOG_GIN_DELETE_PAGE 0x50 + +typedef struct ginxlogDeletePage { + RelFileNode node; + BlockNumber blkno; + BlockNumber parentBlkno; + OffsetNumber parentOffset; + BlockNumber leftBlkno; + BlockNumber rightLink; +} ginxlogDeletePage; + +/* ginutil.c */ +extern void initGinState( GinState *state, Relation index ); +extern Buffer GinNewBuffer(Relation index); +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); +extern Datum* extractEntriesSU(GinState *ginstate, Datum value, uint32 *nentries); +extern Page GinPageGetCopyPage( Page page ); + +/* gininsert.c */ +extern Datum ginbuild(PG_FUNCTION_ARGS); +extern Datum gininsert(PG_FUNCTION_ARGS); + +/* ginxlog.c */ +extern void gin_redo(XLogRecPtr lsn, XLogRecord *record); +extern void gin_desc(StringInfo buf, uint8 xl_info, char *rec); +extern void gin_xlog_startup(void); +extern void gin_xlog_cleanup(void); + +/* ginbtree.c */ + +typedef struct GinBtreeStack { + BlockNumber blkno; + Buffer buffer; + OffsetNumber off; + /* predictNumber contains prediction number of pages on current level */ + uint32 predictNumber; + struct GinBtreeStack *parent; +} GinBtreeStack; + +typedef struct GinBtreeData *GinBtree; + +typedef struct GinBtreeData { + /* search methods */ + BlockNumber (*findChildPage)(GinBtree, GinBtreeStack *); + bool (*isMoveRight)(GinBtree, Page); + bool (*findItem)(GinBtree, GinBtreeStack *); + + /* insert methods */ + OffsetNumber (*findChildPtr)(GinBtree, Page, BlockNumber, OffsetNumber); + BlockNumber (*getLeftMostPage)(GinBtree, Page); + bool (*isEnoughSpace)(GinBtree, Buffer, OffsetNumber); + void (*placeToPage)(GinBtree, Buffer, OffsetNumber, XLogRecData**); + Page (*splitPage)(GinBtree, Buffer, Buffer, OffsetNumber, XLogRecData**); + void (*fillRoot)(GinBtree, Buffer, Buffer, Buffer); + + bool searchMode; + + Relation index; + GinState *ginstate; + bool fullScan; + bool isBuild; + + BlockNumber rightblkno; + + /* Entry options */ + Datum entryValue; + IndexTuple entry; + bool isDelete; + + /* Data (posting tree) option */ + ItemPointerData *items; + uint32 nitem; + uint32 curitem; + + PostingItem pitem; +} GinBtreeData; + +extern GinBtreeStack* ginPrepareFindLeafPage(GinBtree btree, BlockNumber blkno); +extern GinBtreeStack* ginFindLeafPage(GinBtree btree, GinBtreeStack *stack ); +extern void freeGinBtreeStack( GinBtreeStack *stack ); +extern void ginInsertValue(GinBtree btree, GinBtreeStack *stack); +extern void findParents( GinBtree btree, GinBtreeStack *stack, BlockNumber rootBlkno); + +/* ginentrypage.c */ +extern IndexTuple GinFormTuple(GinState *ginstate, Datum key, ItemPointerData *ipd, uint32 nipd); +extern Datum ginGetHighKey(GinState *ginstate, Page page); +extern void prepareEntryScan( GinBtree btree, Relation index, Datum value, GinState *ginstate); +extern void entryFillRoot(GinBtree btree, Buffer root, Buffer lbuf, Buffer rbuf); +extern IndexTuple ginPageGetLinkItup(Buffer buf); + +/* gindatapage.c */ +extern int compareItemPointers( ItemPointer a, ItemPointer b ); +extern void MergeItemPointers( + ItemPointerData *dst, + ItemPointerData *a, uint32 na, + ItemPointerData *b, uint32 nb + ); + +extern void GinDataPageAddItem( Page page, void *data, OffsetNumber offset ); +extern void PageDeletePostingItem(Page page, OffsetNumber offset); + +typedef struct { + GinBtreeData btree; + GinBtreeStack *stack; +} GinPostingTreeScan; + +extern GinPostingTreeScan* prepareScanPostingTree( Relation index, + BlockNumber rootBlkno, bool searchMode); +extern void insertItemPointer(GinPostingTreeScan *gdi, + ItemPointerData *items, uint32 nitem); +extern Buffer scanBeginPostingTree( GinPostingTreeScan *gdi ); +extern void dataFillRoot(GinBtree btree, Buffer root, Buffer lbuf, Buffer rbuf); +extern void prepareDataScan( GinBtree btree, Relation index); +/* ginscan.c */ + +typedef struct GinScanEntryData *GinScanEntry; + +typedef struct GinScanEntryData { + /* link to the equals entry in current scan key */ + GinScanEntry master; + + /* link to values reported to consistentFn, + points to GinScanKey->entryRes[i]*/ + bool *pval; + + /* entry, got from extractQueryFn */ + Datum entry; + + /* current ItemPointer to heap, its offset in buffer and buffer */ + ItemPointerData curItem; + OffsetNumber offset; + Buffer buffer; + + /* in case of Posing list */ + ItemPointerData *list; + uint32 nlist; + + bool isFinished; + bool reduceResult; + uint32 predictNumberResult; +} GinScanEntryData; + +typedef struct GinScanKeyData { + /* Number of entries in query (got by extractQueryFn) */ + uint32 nentries; + + /* array of ItemPointer result, reported to consistentFn */ + bool *entryRes; + + /* array of scans per entry */ + GinScanEntry scanEntry; + + /* for calling consistentFn(GinScanKey->entryRes, strategy, query) */ + StrategyNumber strategy; + Datum query; + + ItemPointerData curItem; + bool firstCall; + bool isFinished; +} GinScanKeyData; + +typedef GinScanKeyData *GinScanKey; + +typedef struct GinScanOpaqueData { + MemoryContext tempCtx; + GinState ginstate; + + GinScanKey keys; + uint32 nkeys; + + GinScanKey markPos; +} GinScanOpaqueData; + +typedef GinScanOpaqueData *GinScanOpaque; + +extern Datum ginbeginscan(PG_FUNCTION_ARGS); +extern Datum ginendscan(PG_FUNCTION_ARGS); +extern Datum ginrescan(PG_FUNCTION_ARGS); +extern Datum ginmarkpos(PG_FUNCTION_ARGS); +extern Datum ginrestrpos(PG_FUNCTION_ARGS); +extern void newScanKey( IndexScanDesc scan ); + +/* ginget.c */ +extern DLLIMPORT int GinFuzzySearchLimit; + +#define ItemPointerSetMax(p) ItemPointerSet( (p), (BlockNumber)0xffffffff, (OffsetNumber)0xffff ) +#define ItemPointerIsMax(p) ( ItemPointerGetBlockNumber(p) == (BlockNumber)0xffffffff && ItemPointerGetOffsetNumber(p) == (OffsetNumber)0xffff ) +#define ItemPointerSetMin(p) ItemPointerSet( (p), (BlockNumber)0, (OffsetNumber)0) +#define ItemPointerIsMin(p) ( ItemPointerGetBlockNumber(p) == (BlockNumber)0 && ItemPointerGetOffsetNumber(p) == (OffsetNumber)0 ) + +extern Datum gingetmulti(PG_FUNCTION_ARGS); +extern Datum gingettuple(PG_FUNCTION_ARGS); + +/* ginvacuum.c */ +extern Datum ginbulkdelete(PG_FUNCTION_ARGS); +extern Datum ginvacuumcleanup(PG_FUNCTION_ARGS); + +/* ginarrayproc.c */ +extern Datum ginarrayextract(PG_FUNCTION_ARGS); +extern Datum ginarrayconsistent(PG_FUNCTION_ARGS); + +/* I'm not sure that is the best place */ +extern Datum arrayoverlap(PG_FUNCTION_ARGS); +extern Datum arraycontains(PG_FUNCTION_ARGS); +extern Datum arraycontained(PG_FUNCTION_ARGS); + +/* ginbulk.c */ +typedef struct { + Datum value; + uint32 length; + uint32 number; + ItemPointerData *list; + bool shouldSort; +} EntryAccumulator; + +typedef struct { + GinState *ginstate; + EntryAccumulator *entries; + uint32 length; + uint32 number; + uint32 curget; + uint32 allocatedMemory; +} BuildAccumulator; + +extern void ginInitBA(BuildAccumulator *accum); +extern void ginInsertRecordBA( BuildAccumulator *accum, + ItemPointer heapptr, Datum *entries, uint32 nentry ); +extern ItemPointerData* ginGetEntry(BuildAccumulator *accum, Datum *entry, uint32 *n); + +#endif diff --git a/src/include/access/rmgr.h b/src/include/access/rmgr.h index da6bc696835..471b0cfb764 100644 --- a/src/include/access/rmgr.h +++ b/src/include/access/rmgr.h @@ -3,7 +3,7 @@ * * Resource managers definition * - * $PostgreSQL: pgsql/src/include/access/rmgr.h,v 1.15 2005/11/07 17:36:46 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/rmgr.h,v 1.16 2006/05/02 11:28:55 teodor Exp $ */ #ifndef RMGR_H #define RMGR_H @@ -23,6 +23,7 @@ typedef uint8 RmgrId; #define RM_HEAP_ID 10 #define RM_BTREE_ID 11 #define RM_HASH_ID 12 +#define RM_GIN_ID 13 #define RM_GIST_ID 14 #define RM_SEQ_ID 15 #define RM_MAX_ID RM_SEQ_ID diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 4c76aa70fa8..97cf51ef545 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -37,7 +37,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.328 2006/04/30 18:30:40 tgl Exp $ + * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.329 2006/05/02 11:28:55 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 200604301 +#define CATALOG_VERSION_NO 200605021 #endif diff --git a/src/include/catalog/pg_am.h b/src/include/catalog/pg_am.h index c81409bbbfd..29d19147d2d 100644 --- a/src/include/catalog/pg_am.h +++ b/src/include/catalog/pg_am.h @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/pg_am.h,v 1.40 2006/03/05 15:58:54 momjian Exp $ + * $PostgreSQL: pgsql/src/include/catalog/pg_am.h,v 1.41 2006/05/02 11:28:55 teodor Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -51,6 +51,7 @@ CATALOG(pg_am,2601) bool amoptionalkey; /* can query omit key for the first column? */ bool amindexnulls; /* does AM support NULL index entries? */ bool amconcurrent; /* does AM support concurrent updates? */ + bool amclusterable; /* does AM support cluster command? */ regproc aminsert; /* "insert this tuple" function */ regproc ambeginscan; /* "start new scan" function */ regproc amgettuple; /* "next valid tuple" function */ @@ -76,7 +77,7 @@ typedef FormData_pg_am *Form_pg_am; * compiler constants for pg_am * ---------------- */ -#define Natts_pg_am 21 +#define Natts_pg_am 22 #define Anum_pg_am_amname 1 #define Anum_pg_am_amstrategies 2 #define Anum_pg_am_amsupport 3 @@ -86,32 +87,36 @@ typedef FormData_pg_am *Form_pg_am; #define Anum_pg_am_amoptionalkey 7 #define Anum_pg_am_amindexnulls 8 #define Anum_pg_am_amconcurrent 9 -#define Anum_pg_am_aminsert 10 -#define Anum_pg_am_ambeginscan 11 -#define Anum_pg_am_amgettuple 12 -#define Anum_pg_am_amgetmulti 13 -#define Anum_pg_am_amrescan 14 -#define Anum_pg_am_amendscan 15 -#define Anum_pg_am_ammarkpos 16 -#define Anum_pg_am_amrestrpos 17 -#define Anum_pg_am_ambuild 18 -#define Anum_pg_am_ambulkdelete 19 -#define Anum_pg_am_amvacuumcleanup 20 -#define Anum_pg_am_amcostestimate 21 +#define Anum_pg_am_amclusterable 10 +#define Anum_pg_am_aminsert 11 +#define Anum_pg_am_ambeginscan 12 +#define Anum_pg_am_amgettuple 13 +#define Anum_pg_am_amgetmulti 14 +#define Anum_pg_am_amrescan 15 +#define Anum_pg_am_amendscan 16 +#define Anum_pg_am_ammarkpos 17 +#define Anum_pg_am_amrestrpos 18 +#define Anum_pg_am_ambuild 19 +#define Anum_pg_am_ambulkdelete 20 +#define Anum_pg_am_amvacuumcleanup 21 +#define Anum_pg_am_amcostestimate 22 /* ---------------- * initial contents of pg_am * ---------------- */ -DATA(insert OID = 403 ( btree 5 1 1 t t t t t btinsert btbeginscan btgettuple btgetmulti btrescan btendscan btmarkpos btrestrpos btbuild btbulkdelete btvacuumcleanup btcostestimate )); +DATA(insert OID = 403 ( btree 5 1 1 t t t t t t btinsert btbeginscan btgettuple btgetmulti btrescan btendscan btmarkpos btrestrpos btbuild btbulkdelete btvacuumcleanup btcostestimate )); DESCR("b-tree index access method"); #define BTREE_AM_OID 403 -DATA(insert OID = 405 ( hash 1 1 0 f f f f t hashinsert hashbeginscan hashgettuple hashgetmulti hashrescan hashendscan hashmarkpos hashrestrpos hashbuild hashbulkdelete - hashcostestimate )); +DATA(insert OID = 405 ( hash 1 1 0 f f f f t f hashinsert hashbeginscan hashgettuple hashgetmulti hashrescan hashendscan hashmarkpos hashrestrpos hashbuild hashbulkdelete - hashcostestimate )); DESCR("hash index access method"); #define HASH_AM_OID 405 -DATA(insert OID = 783 ( gist 100 7 0 f t f f t gistinsert gistbeginscan gistgettuple gistgetmulti gistrescan gistendscan gistmarkpos gistrestrpos gistbuild gistbulkdelete gistvacuumcleanup gistcostestimate )); +DATA(insert OID = 783 ( gist 100 7 0 f t f f t t gistinsert gistbeginscan gistgettuple gistgetmulti gistrescan gistendscan gistmarkpos gistrestrpos gistbuild gistbulkdelete gistvacuumcleanup gistcostestimate )); DESCR("GiST index access method"); #define GIST_AM_OID 783 +DATA(insert OID = 2742 ( gin 100 4 0 f f f f t f gininsert ginbeginscan gingettuple gingetmulti ginrescan ginendscan ginmarkpos ginrestrpos ginbuild ginbulkdelete ginvacuumcleanup gincostestimate )); +DESCR("GIN index access method"); +#define GIN_AM_OID 2742 #endif /* PG_AM_H */ diff --git a/src/include/catalog/pg_amop.h b/src/include/catalog/pg_amop.h index 26f409c0c48..bb72deef235 100644 --- a/src/include/catalog/pg_amop.h +++ b/src/include/catalog/pg_amop.h @@ -23,7 +23,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/pg_amop.h,v 1.69 2006/03/05 15:58:54 momjian Exp $ + * $PostgreSQL: pgsql/src/include/catalog/pg_amop.h,v 1.70 2006/05/02 11:28:55 teodor Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -636,4 +636,18 @@ DATA(insert ( 2595 0 10 t 1515 )); DATA(insert ( 2595 0 11 t 1514 )); DATA(insert ( 2595 0 12 t 2590 )); +/* + * gin _int4_ops + */ +DATA(insert ( 2745 0 1 f 2750 )); +DATA(insert ( 2745 0 2 f 2751 )); +DATA(insert ( 2745 0 3 t 2752 )); + +/* + * gin _text_ops + */ +DATA(insert ( 2746 0 1 f 2750 )); +DATA(insert ( 2746 0 2 f 2751 )); +DATA(insert ( 2746 0 3 t 2752 )); + #endif /* PG_AMOP_H */ diff --git a/src/include/catalog/pg_amproc.h b/src/include/catalog/pg_amproc.h index 2efb359edcb..85467edd0cd 100644 --- a/src/include/catalog/pg_amproc.h +++ b/src/include/catalog/pg_amproc.h @@ -19,7 +19,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/pg_amproc.h,v 1.56 2006/03/05 15:58:54 momjian Exp $ + * $PostgreSQL: pgsql/src/include/catalog/pg_amproc.h,v 1.57 2006/05/02 11:28:55 teodor Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -185,4 +185,14 @@ DATA(insert ( 2595 0 5 2581 )); DATA(insert ( 2595 0 6 2582 )); DATA(insert ( 2595 0 7 2584 )); +/* gin */ +DATA(insert ( 2745 0 1 351 )); +DATA(insert ( 2745 0 2 2743 )); +DATA(insert ( 2745 0 3 2743 )); +DATA(insert ( 2745 0 4 2744 )); +DATA(insert ( 2746 0 1 360 )); +DATA(insert ( 2746 0 2 2743 )); +DATA(insert ( 2746 0 3 2743 )); +DATA(insert ( 2746 0 4 2744 )); + #endif /* PG_AMPROC_H */ diff --git a/src/include/catalog/pg_opclass.h b/src/include/catalog/pg_opclass.h index e70633f84b8..4a5c5351ca3 100644 --- a/src/include/catalog/pg_opclass.h +++ b/src/include/catalog/pg_opclass.h @@ -27,7 +27,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/pg_opclass.h,v 1.68 2006/03/05 15:58:54 momjian Exp $ + * $PostgreSQL: pgsql/src/include/catalog/pg_opclass.h,v 1.69 2006/05/02 11:28:55 teodor Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -176,5 +176,7 @@ DATA(insert OID = 2235 ( 405 aclitem_ops PGNSP PGUID 1033 t 0 )); DATA(insert OID = 2593 ( 783 box_ops PGNSP PGUID 603 t 0 )); DATA(insert OID = 2594 ( 783 poly_ops PGNSP PGUID 604 t 603 )); DATA(insert OID = 2595 ( 783 circle_ops PGNSP PGUID 718 t 603 )); +DATA(insert OID = 2745 ( 2742 _int4_ops PGNSP PGUID 1007 t 23 )); +DATA(insert OID = 2746 ( 2742 _text_ops PGNSP PGUID 1009 t 25 )); #endif /* PG_OPCLASS_H */ diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h index af70c92a88e..a296bf3e41c 100644 --- a/src/include/catalog/pg_operator.h +++ b/src/include/catalog/pg_operator.h @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/pg_operator.h,v 1.142 2006/03/05 15:58:54 momjian Exp $ + * $PostgreSQL: pgsql/src/include/catalog/pg_operator.h,v 1.143 2006/05/02 11:28:55 teodor Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -871,6 +871,11 @@ DATA(insert OID = 2577 ( "|>>" PGNSP PGUID b f 604 604 16 0 0 0 0 0 0 DATA(insert OID = 2589 ( "&<|" PGNSP PGUID b f 718 718 16 0 0 0 0 0 0 circle_overbelow positionsel positionjoinsel )); DATA(insert OID = 2590 ( "|&>" PGNSP PGUID b f 718 718 16 0 0 0 0 0 0 circle_overabove positionsel positionjoinsel )); +/* overlap/contains/contained from arrays */ +DATA(insert OID = 2750 ( "&&" PGNSP PGUID b f 2277 2277 16 2750 0 0 0 0 0 arrayoverlap areasel areajoinsel )); +DATA(insert OID = 2751 ( "@" PGNSP PGUID b f 2277 2277 16 2752 0 0 0 0 0 arraycontains contsel contjoinsel )); +DATA(insert OID = 2752 ( "~" PGNSP PGUID b f 2277 2277 16 2751 0 0 0 0 0 arraycontained contsel contjoinsel )); + /* * function prototypes diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 43c87f36477..c4e41ba9c6d 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.408 2006/04/26 22:33:17 momjian Exp $ + * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.409 2006/05/02 11:28:55 teodor Exp $ * * NOTES * The script catalog/genbki.sh reads this file and generates .bki @@ -3813,6 +3813,45 @@ DESCR("GiST support"); DATA(insert OID = 2592 ( gist_circle_compress PGNSP PGUID 12 f f t f i 1 2281 "2281" _null_ _null_ _null_ gist_circle_compress - _null_ )); DESCR("GiST support"); +/* GIN */ +DATA(insert OID = 2730 ( gingettuple PGNSP PGUID 12 f f t f v 2 16 "2281 2281" _null_ _null_ _null_ gingettuple - _null_ )); +DESCR("gin(internal)"); +DATA(insert OID = 2731 ( gingetmulti PGNSP PGUID 12 f f t f v 4 16 "2281 2281 2281 2281" _null_ _null_ _null_ gingetmulti - _null_ )); +DESCR("gin(internal)"); +DATA(insert OID = 2732 ( gininsert PGNSP PGUID 12 f f t f v 6 16 "2281 2281 2281 2281 2281 2281" _null_ _null_ _null_ gininsert - _null_ )); +DESCR("gin(internal)"); +DATA(insert OID = 2733 ( ginbeginscan PGNSP PGUID 12 f f t f v 3 2281 "2281 2281 2281" _null_ _null_ _null_ ginbeginscan - _null_ )); +DESCR("gin(internal)"); +DATA(insert OID = 2734 ( ginrescan PGNSP PGUID 12 f f t f v 2 2278 "2281 2281" _null_ _null_ _null_ ginrescan - _null_ )); +DESCR("gin(internal)"); +DATA(insert OID = 2735 ( ginendscan PGNSP PGUID 12 f f t f v 1 2278 "2281" _null_ _null_ _null_ ginendscan - _null_ )); +DESCR("gin(internal)"); +DATA(insert OID = 2736 ( ginmarkpos PGNSP PGUID 12 f f t f v 1 2278 "2281" _null_ _null_ _null_ ginmarkpos - _null_ )); +DESCR("gin(internal)"); +DATA(insert OID = 2737 ( ginrestrpos PGNSP PGUID 12 f f t f v 1 2278 "2281" _null_ _null_ _null_ ginrestrpos - _null_ )); +DESCR("gin(internal)"); +DATA(insert OID = 2738 ( ginbuild PGNSP PGUID 12 f f t f v 3 2278 "2281 2281 2281" _null_ _null_ _null_ ginbuild - _null_ )); +DESCR("gin(internal)"); +DATA(insert OID = 2739 ( ginbulkdelete PGNSP PGUID 12 f f t f v 3 2281 "2281 2281 2281" _null_ _null_ _null_ ginbulkdelete - _null_ )); +DESCR("gin(internal)"); +DATA(insert OID = 2740 ( ginvacuumcleanup PGNSP PGUID 12 f f t f v 3 2281 "2281 2281 2281" _null_ _null_ _null_ ginvacuumcleanup - _null_ )); +DESCR("gin(internal)"); +DATA(insert OID = 2741 ( gincostestimate PGNSP PGUID 12 f f t f v 7 2278 "2281 2281 2281 2281 2281 2281 2281" _null_ _null_ _null_ gincostestimate - _null_ )); +DESCR("gin(internal)"); + +/* GIN array support */ +DATA(insert OID = 2743 ( ginarrayextract PGNSP PGUID 12 f f t f i 2 2281 "2277 2281" _null_ _null_ _null_ ginarrayextract - _null_ )); +DESCR("GIN array support"); +DATA(insert OID = 2744 ( ginarrayconsistent PGNSP PGUID 12 f f t f i 3 16 "2281 21 2281" _null_ _null_ _null_ ginarrayconsistent - _null_ )); +DESCR("GIN array support"); + +/* overlap/contains/contained */ +DATA(insert OID = 2747 ( arrayoverlap PGNSP PGUID 12 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ arrayoverlap - _null_ )); +DESCR("anyarray overlap"); +DATA(insert OID = 2748 ( arraycontains PGNSP PGUID 12 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ arraycontains - _null_ )); +DESCR("anyarray contains"); +DATA(insert OID = 2749 ( arraycontained PGNSP PGUID 12 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ arraycontained - _null_ )); +DESCR("anyarray contained"); /* * Symbolic values for provolatile column: these indicate whether the result diff --git a/src/include/utils/selfuncs.h b/src/include/utils/selfuncs.h index 723ae07092d..35fda0d9221 100644 --- a/src/include/utils/selfuncs.h +++ b/src/include/utils/selfuncs.h @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/utils/selfuncs.h,v 1.32 2006/04/27 17:52:40 tgl Exp $ + * $PostgreSQL: pgsql/src/include/utils/selfuncs.h,v 1.33 2006/05/02 11:28:55 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -168,5 +168,6 @@ extern Selectivity estimate_hash_bucketsize(PlannerInfo *root, Node *hashkey, extern Datum btcostestimate(PG_FUNCTION_ARGS); extern Datum hashcostestimate(PG_FUNCTION_ARGS); extern Datum gistcostestimate(PG_FUNCTION_ARGS); +extern Datum gincostestimate(PG_FUNCTION_ARGS); #endif /* SELFUNCS_H */ |
