From a50aaa7289732049e1e00cb0e61fd21af2957a83 Mon Sep 17 00:00:00 2001
From: Hiroshi Inoue <inoue@tpf.co.jp>
Date: Wed, 1 Mar 2000 05:39:24 +0000
Subject: [PATCH] Change reindex command to work properly with gist/hash/rtree

---
 src/backend/access/gist/gist.c   | 9 +++++----
 src/backend/access/hash/hash.c   | 9 +++++----
 src/backend/access/rtree/rtree.c | 9 +++++----
 src/backend/catalog/index.c      | 9 ++++-----
 4 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c
index edebfcbebe3..78a41dbb8ff 100644
--- a/src/backend/access/gist/gist.c
+++ b/src/backend/access/gist/gist.c
@@ -6,7 +6,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/gist/gist.c,v 1.50 2000/01/19 23:54:46 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/gist/gist.c,v 1.51 2000/03/01 05:39:20 inoue Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -284,12 +284,13 @@ gistbuild(Relation heap,
 	{
 		Oid		hrelid = RelationGetRelid(heap);
 		Oid		irelid = RelationGetRelid(index);
+		bool		inplace = IsReindexProcessing();
 
 		heap_close(heap, NoLock);
 		index_close(index);
-		UpdateStats(hrelid, nh, true);
-		UpdateStats(irelid, ni, false);
-		if (oldPred != NULL)
+		UpdateStats(hrelid, nh, inplace);
+		UpdateStats(irelid, ni, inplace);
+		if (oldPred != NULL && !inplace)
 		{
 			if (ni == nh)
 				pred = NULL;
diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c
index a35cd86845e..d116aa1a499 100644
--- a/src/backend/access/hash/hash.c
+++ b/src/backend/access/hash/hash.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.35 2000/01/26 05:55:55 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.36 2000/03/01 05:39:22 inoue Exp $
  *
  * NOTES
  *	  This file contains only the public interface routines.
@@ -242,12 +242,13 @@ hashbuild(Relation heap,
 	{
 		Oid		hrelid = RelationGetRelid(heap);
 		Oid		irelid = RelationGetRelid(index);
+		bool		inplace = IsReindexProcessing();
 
 		heap_close(heap, NoLock);
 		index_close(index);
-		UpdateStats(hrelid, nhtups, true);
-		UpdateStats(irelid, nitups, false);
-		if (oldPred != NULL)
+		UpdateStats(hrelid, nhtups, inplace);
+		UpdateStats(irelid, nitups, inplace);
+		if (oldPred != NULL && !inplace)
 		{
 			if (nitups == nhtups)
 				pred = NULL;
diff --git a/src/backend/access/rtree/rtree.c b/src/backend/access/rtree/rtree.c
index 53c9d7946bf..34cf0b6c937 100644
--- a/src/backend/access/rtree/rtree.c
+++ b/src/backend/access/rtree/rtree.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.43 2000/01/26 05:56:00 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.44 2000/03/01 05:39:23 inoue Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -261,12 +261,13 @@ rtbuild(Relation heap,
 	{
 		Oid		hrelid = RelationGetRelid(heap);
 		Oid		irelid = RelationGetRelid(index);
+		bool		inplace = IsReindexProcessing();
 
 		heap_close(heap, NoLock);
 		index_close(index);
-		UpdateStats(hrelid, nh, true);
-		UpdateStats(irelid, ni, false);
-		if (oldPred != NULL)
+		UpdateStats(hrelid, nh, inplace);
+		UpdateStats(irelid, ni, inplace);
+		if (oldPred != NULL && !inplace)
 		{
 			if (ni == nh)
 				pred = NULL;
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 5bfc332f0db..2a4cd3e6c5e 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.106 2000/02/25 02:58:47 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.107 2000/03/01 05:39:24 inoue Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -2057,7 +2057,6 @@ reindex_index(Oid indexId, bool force)
 	Oid		heapId, procId, accessMethodId;
 	Node		*oldPred = NULL;
 	PredInfo	*predInfo;
-	List		*cnfPred = NULL;
 	AttrNumber	*attributeNumberA;
 	FuncIndexInfo	fInfo, *funcInfo = NULL;
 	int		i, numberOfAttributes;
@@ -2096,8 +2095,8 @@ reindex_index(Oid indexId, bool force)
 		pfree(predString);
 	}
 	predInfo = (PredInfo *) palloc(sizeof(PredInfo));
-	predInfo->pred = (Node *) cnfPred;
-	predInfo->oldPred = oldPred;
+	predInfo->pred = (Node *) oldPred;
+	predInfo->oldPred = NULL;
 
 	/* Assign Index keys to attributes array */
 	attributeNumberA = (AttrNumber *) palloc(numberOfAttributes * sizeof(AttrNumber));
@@ -2247,5 +2246,5 @@ reindex_relation(Oid relid, bool force)
 		setRelhasindexInplace(relid, true, false);
 	}
 	SetReindexProcessing(old);
-	return true;
+	return reindexed;
 }
-- 
GitLab