diff --git a/contrib/bloom/blinsert.c b/contrib/bloom/blinsert.c index a31149f044..946902a61d 100644 --- a/contrib/bloom/blinsert.c +++ b/contrib/bloom/blinsert.c @@ -33,10 +33,11 @@ PG_MODULE_MAGIC; typedef struct { BloomState blstate; /* bloom index state */ + int64 indtuples; /* total number of tuples indexed */ MemoryContext tmpCtx; /* temporary memory context reset after each * tuple */ char data[BLCKSZ]; /* cached page */ - int64 count; /* number of tuples in cached page */ + int count; /* number of tuples in cached page */ } BloomBuildState; /* @@ -102,8 +103,14 @@ bloomBuildCallback(Relation index, HeapTuple htup, Datum *values, /* We shouldn't be here since we're inserting to the empty page */ elog(ERROR, "could not add new bloom tuple to empty page"); } + + /* Next item was added successfully */ + buildstate->count++; } + /* Update total tuple count */ + buildstate->indtuples += 1; + MemoryContextSwitchTo(oldCtx); MemoryContextReset(buildstate->tmpCtx); } @@ -137,17 +144,15 @@ blbuild(Relation heap, Relation index, IndexInfo *indexInfo) reltuples = IndexBuildHeapScan(heap, index, indexInfo, true, bloomBuildCallback, (void *) &buildstate); - /* - * There are could be some items in cached page. Flush this page if - * needed. - */ + /* Flush last page if needed (it will be, unless heap was empty) */ if (buildstate.count > 0) flushCachedPage(index, &buildstate); MemoryContextDelete(buildstate.tmpCtx); result = (IndexBuildResult *) palloc(sizeof(IndexBuildResult)); - result->heap_tuples = result->index_tuples = reltuples; + result->heap_tuples = reltuples; + result->index_tuples = buildstate.indtuples; return result; }