*** pgsql/src/include/access/gin.h 2008/04/22 17:53:41 1.9.2.2 --- pgsql/src/include/access/gin.h 2009/03/24 22:06:32 1.9.2.3 *************** *** 3,9 **** * 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.2.1 2007/11/16 21:50:13 tgl Exp $ *-------------------------------------------------------------------------- */ --- 3,9 ---- * 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.2.2 2008/04/22 17:53:41 teodor Exp $ *-------------------------------------------------------------------------- */ *************** *** 34,39 **** --- 34,47 ---- typedef XLogRecPtr GinNSN; /* + * Max depth allowed in search tree during bulk inserts. This is to keep from + * degenerating to O(N^2) behavior when the tree is unbalanced due to sorted + * or nearly-sorted input. (Perhaps it would be better to use a balanced-tree + * algorithm, but in common cases that would only add useless overhead.) + */ + #define GIN_MAX_TREE_DEPTH 100 + + /* * Page opaque data in a inverted index page. */ typedef struct GinPageOpaqueData *************** extern IndexTuple ginPageGetLinkItup(Buf *** 314,325 **** /* 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); --- 322,330 ---- /* 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);