summaryrefslogtreecommitdiff
path: root/src/backend/access/nbtree/nbtree.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/nbtree/nbtree.c')
-rw-r--r--src/backend/access/nbtree/nbtree.c21
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);