diff options
Diffstat (limited to 'src/backend/access/nbtree/nbtree.c')
| -rw-r--r-- | src/backend/access/nbtree/nbtree.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 45f49c0b2b..e757c4adad 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -12,7 +12,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtree.c,v 1.136 2006/01/25 23:04:20 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtree.c,v 1.137 2006/02/11 16:59:09 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -543,8 +543,9 @@ btbulkdelete(PG_FUNCTION_ARGS) double num_index_tuples; OffsetNumber deletable[MaxOffsetNumber]; int ndeletable; - Buffer buf; + Buffer buf = NULL; BlockNumber num_pages; + bool scanindex = true; tuples_removed = 0; num_index_tuples = 0; @@ -565,8 +566,15 @@ btbulkdelete(PG_FUNCTION_ARGS) * skip obtaining exclusive lock on empty pages though, since no indexscan * could be stopped on those. */ - buf = _bt_get_endpoint(rel, 0, false); - if (BufferIsValid(buf)) /* check for empty index */ + if (callback_state) + { + buf = _bt_get_endpoint(rel, 0, false); + scanindex = BufferIsValid(buf); /* check for empty index */ + } + else + scanindex = false; + + if (scanindex) { for (;;) { @@ -649,7 +657,10 @@ btbulkdelete(PG_FUNCTION_ARGS) result = (IndexBulkDeleteResult *) palloc0(sizeof(IndexBulkDeleteResult)); result->num_pages = num_pages; - result->num_index_tuples = num_index_tuples; + if (scanindex) + result->num_index_tuples = num_index_tuples; + else + result->num_index_tuples = -1; result->tuples_removed = tuples_removed; PG_RETURN_POINTER(result); |
