*** pgsql/src/include/access/gin.h 2008/04/22 17:54:19 1.16.2.1 --- pgsql/src/include/access/gin.h 2009/03/24 22:06:24 1.16.2.2 *************** *** 4,10 **** * * Copyright (c) 2006-2008, PostgreSQL Global Development Group * ! * $PostgreSQL: pgsql/src/include/access/gin.h,v 1.16 2008/01/01 19:45:56 momjian Exp $ *-------------------------------------------------------------------------- */ --- 4,10 ---- * * Copyright (c) 2006-2008, PostgreSQL Global Development Group * ! * $PostgreSQL: pgsql/src/include/access/gin.h,v 1.16.2.1 2008/04/22 17:54:19 teodor Exp $ *-------------------------------------------------------------------------- */ *************** *** 33,38 **** --- 33,46 ---- #define GINNProcs 4 /* + * 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. * * Note: GIN does not include a page ID word as do the other index types. *************** 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);