aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1998-08-20 22:07:46 +0000
committerBruce Momjian <bruce@momjian.us>1998-08-20 22:07:46 +0000
commit4a700021494a78c5a943b32d4ba30d22d8d0f3d9 (patch)
tree1ad3ecedf3da5ba09c43f2ca2e8ff69af1c88b8a /src
parent31309423c9fa0a50afb138760def0897969f727f (diff)
downloadpostgresql-4a700021494a78c5a943b32d4ba30d22d8d0f3d9.tar.gz
postgresql-4a700021494a78c5a943b32d4ba30d22d8d0f3d9.zip
fix for index problem.
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/heap/heapam.c38
-rw-r--r--src/backend/catalog/heap.c38
-rw-r--r--src/backend/catalog/index.c22
-rw-r--r--src/backend/catalog/indexing.c5
-rw-r--r--src/backend/catalog/pg_type.c8
-rw-r--r--src/backend/commands/vacuum.c4
-rw-r--r--src/backend/executor/execUtils.c4
-rw-r--r--src/backend/utils/cache/inval.c3
-rw-r--r--src/bin/initdb/initdb.sh8
9 files changed, 69 insertions, 61 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 139db3b5e36..45899d15d83 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.32 1998/08/19 02:01:05 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.33 1998/08/20 22:07:30 momjian Exp $
*
*
* INTERFACE ROUTINES
@@ -1274,10 +1274,10 @@ heap_delete(Relation relation, ItemPointer tid)
* ----------------
*/
int
-heap_replace(Relation relation, ItemPointer otid, HeapTuple tup)
+heap_replace(Relation relation, ItemPointer otid, HeapTuple replace_tuple)
{
ItemId lp;
- HeapTuple tp;
+ HeapTuple old_tuple;
Page dp;
Buffer buffer;
HeapTuple tuple;
@@ -1319,8 +1319,8 @@ heap_replace(Relation relation, ItemPointer otid, HeapTuple tup)
* ----------------
*/
- tp = (HeapTuple) PageGetItem(dp, lp);
- Assert(HeapTupleIsValid(tp));
+ old_tuple = (HeapTuple) PageGetItem(dp, lp);
+ Assert(HeapTupleIsValid(old_tuple));
/* -----------------
* the following test should be able to catch all non-functional
@@ -1333,7 +1333,7 @@ heap_replace(Relation relation, ItemPointer otid, HeapTuple tup)
* -----------------
*/
- if (TupleUpdatedByCurXactAndCmd(tp))
+ if (TupleUpdatedByCurXactAndCmd(old_tuple))
{
elog(NOTICE, "Non-functional update, only first update is performed");
if (IsSystemRelationName(RelationGetRelationName(relation)->data))
@@ -1367,19 +1367,19 @@ heap_replace(Relation relation, ItemPointer otid, HeapTuple tup)
}
/* XXX order problems if not atomic assignment ??? */
- tup->t_oid = tp->t_oid;
- TransactionIdStore(GetCurrentTransactionId(), &(tup->t_xmin));
- tup->t_cmin = GetCurrentCommandId();
- StoreInvalidTransactionId(&(tup->t_xmax));
- tup->t_infomask &= ~(HEAP_XACT_MASK);
- tup->t_infomask |= HEAP_XMAX_INVALID;
+ replace_tuple->t_oid = old_tuple->t_oid;
+ TransactionIdStore(GetCurrentTransactionId(), &(replace_tuple->t_xmin));
+ replace_tuple->t_cmin = GetCurrentCommandId();
+ StoreInvalidTransactionId(&(replace_tuple->t_xmax));
+ replace_tuple->t_infomask &= ~(HEAP_XACT_MASK);
+ replace_tuple->t_infomask |= HEAP_XMAX_INVALID;
/* ----------------
* insert new item
* ----------------
*/
- if ((unsigned) DOUBLEALIGN(tup->t_len) <= PageGetFreeSpace((Page) dp))
- RelationPutHeapTuple(relation, BufferGetBlockNumber(buffer), tup);
+ if ((unsigned) DOUBLEALIGN(replace_tuple->t_len) <= PageGetFreeSpace((Page) dp))
+ RelationPutHeapTuple(relation, BufferGetBlockNumber(buffer), replace_tuple);
else
{
/* ----------------
@@ -1387,23 +1387,23 @@ heap_replace(Relation relation, ItemPointer otid, HeapTuple tup)
* for a new place to put it.
* ----------------
*/
- doinsert(relation, tup);
+ doinsert(relation, replace_tuple);
}
/* ----------------
* new item in place, now record transaction information
* ----------------
*/
- TransactionIdStore(GetCurrentTransactionId(), &(tp->t_xmax));
- tp->t_cmax = GetCurrentCommandId();
- tp->t_infomask &= ~(HEAP_XMAX_COMMITTED | HEAP_XMAX_INVALID);
+ TransactionIdStore(GetCurrentTransactionId(), &(old_tuple->t_xmax));
+ old_tuple->t_cmax = GetCurrentCommandId();
+ old_tuple->t_infomask &= ~(HEAP_XMAX_COMMITTED | HEAP_XMAX_INVALID);
/* ----------------
* invalidate caches
* ----------------
*/
SetRefreshWhenInvalidate(ImmediateInvalidation);
- RelationInvalidateHeapTuple(relation, tp);
+ RelationInvalidateHeapTuple(relation, old_tuple);
SetRefreshWhenInvalidate((bool) !ImmediateInvalidation);
WriteBuffer(buffer);
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 7d70b7a453d..84f6849357f 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.58 1998/08/19 02:01:30 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.59 1998/08/20 22:07:32 momjian Exp $
*
* INTERFACE ROUTINES
* heap_create() - Create an uncataloged heap relation
@@ -1051,18 +1051,20 @@ DeletePgAttributeTuples(Relation rel)
*/
RelationSetLockForWrite(pg_attribute_desc);
- attnum = FirstLowInvalidHeapAttributeNumber + 1; /* cmax */
-
- while (HeapTupleIsValid(tup = SearchSysCacheTupleCopy(ATTNUM,
- ObjectIdGetDatum(rel->rd_att->attrs[0]->attrelid),
- Int16GetDatum(attnum),
- 0, 0)))
+ for (attnum = FirstLowInvalidHeapAttributeNumber + 1;
+ attnum <= rel->rd_att->natts;
+ attnum++)
{
- heap_delete(pg_attribute_desc, &tup->t_ctid);
- pfree(tup);
- attnum++;
+ if (HeapTupleIsValid(tup = SearchSysCacheTupleCopy(ATTNUM,
+ ObjectIdGetDatum(RelationGetRelid(rel)),
+ Int16GetDatum(attnum),
+ 0, 0)))
+ {
+ heap_delete(pg_attribute_desc, &tup->t_ctid);
+ pfree(tup);
+ }
}
-
+
/* ----------------
* Release the write lock
* ----------------
@@ -1104,8 +1106,10 @@ DeletePgTypeTuple(Relation rel)
* to this relation.
* ----------------
*/
- ScanKeyEntryInitialize(&key, 0, Anum_pg_type_typrelid, F_INT4EQ,
- rel->rd_att->attrs[0]->attrelid);
+ ScanKeyEntryInitialize(&key, 0,
+ Anum_pg_type_typrelid,
+ F_OIDEQ,
+ ObjectIdGetDatum(RelationGetRelid(rel)));
pg_type_scan = heap_beginscan(pg_type_desc,
0,
@@ -1140,7 +1144,9 @@ DeletePgTypeTuple(Relation rel)
pg_attribute_desc = heap_openr(AttributeRelationName);
ScanKeyEntryInitialize(&attkey,
- 0, Anum_pg_attribute_atttypid, F_INT4EQ,
+ 0,
+ Anum_pg_attribute_atttypid,
+ F_OIDEQ,
typoid);
pg_attribute_scan = heap_beginscan(pg_attribute_desc,
@@ -1151,13 +1157,13 @@ DeletePgTypeTuple(Relation rel)
/* ----------------
* try and get a pg_attribute tuple. if we succeed it means
- * we cant delete the relation because something depends on
+ * we can't delete the relation because something depends on
* the schema.
* ----------------
*/
atttup = heap_getnext(pg_attribute_scan, 0);
- if (PointerIsValid(atttup))
+ if (HeapTupleIsValid(atttup))
{
Oid relid = ((AttributeTupleForm) GETSTRUCT(atttup))->attrelid;
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 48a2cada29a..95442918f69 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.49 1998/08/20 15:16:54 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.50 1998/08/20 22:07:34 momjian Exp $
*
*
* INTERFACE ROUTINES
@@ -1173,6 +1173,7 @@ index_destroy(Oid indexId)
{
Relation indexRelation;
Relation catalogRelation;
+ Relation attributeRelation;
HeapTuple tuple;
int16 attnum;
@@ -1200,7 +1201,7 @@ index_destroy(Oid indexId)
* fix ATTRIBUTE relation
* ----------------
*/
- catalogRelation = heap_openr(AttributeRelationName);
+ attributeRelation = heap_openr(AttributeRelationName);
attnum = 1; /* indexes start at 1 */
@@ -1209,29 +1210,28 @@ index_destroy(Oid indexId)
Int16GetDatum(attnum),
0, 0)))
{
- heap_delete(catalogRelation, &tuple->t_ctid);
+ heap_delete(attributeRelation, &tuple->t_ctid);
pfree(tuple);
attnum++;
}
-
- heap_close(catalogRelation);
+ heap_close(attributeRelation);
/* ----------------
* fix INDEX relation
* ----------------
*/
tuple = SearchSysCacheTupleCopy(INDEXRELID,
- ObjectIdGetDatum(indexId),
- 0, 0, 0);
+ ObjectIdGetDatum(indexId),
+ 0, 0, 0);
if (!HeapTupleIsValid(tuple))
- {
elog(NOTICE, "IndexRelationDestroy: %s's INDEX tuple missing",
RelationGetRelationName(indexRelation));
- }
- heap_delete(catalogRelation, &tuple->t_ctid);
+
+ Assert(ItemPointerIsValid(&tuple->t_ctid));
+
+ heap_delete(indexRelation, &tuple->t_ctid);
pfree(tuple);
- heap_close(catalogRelation);
/*
* flush cache and physically remove the file
diff --git a/src/backend/catalog/indexing.c b/src/backend/catalog/indexing.c
index 8b50cee327c..e13200c96b2 100644
--- a/src/backend/catalog/indexing.c
+++ b/src/backend/catalog/indexing.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.21 1998/08/20 15:16:55 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.22 1998/08/20 22:07:36 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -125,7 +125,7 @@ CatalogIndexInsert(Relation *idescs,
InsertIndexResult indexRes;
indexDescriptor = RelationGetTupleDescriptor(idescs[i]);
- pgIndexTup = SearchSysCacheTuple(INDEXRELID,
+ pgIndexTup = SearchSysCacheTupleCopy(INDEXRELID,
ObjectIdGetDatum(idescs[i]->rd_id),
0, 0, 0);
Assert(pgIndexTup);
@@ -163,6 +163,7 @@ CatalogIndexInsert(Relation *idescs,
&heapTuple->t_ctid, heapRelation);
if (indexRes)
pfree(indexRes);
+ pfree(pgIndexTup);
}
}
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index a23e73893f8..999a398db6c 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.27 1998/08/19 02:01:38 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.28 1998/08/20 22:07:37 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -384,12 +384,12 @@ TypeCreate(char *typeName,
values[i++] = (Datum) GetUserId(); /* 2 */
values[i++] = (Datum) internalSize; /* 3 */
values[i++] = (Datum) externalSize; /* 4 */
- values[i++] = (Datum) passedByValue; /* 5 */
+ values[i++] = (Datum) passedByValue;/* 5 */
values[i++] = (Datum) typeType; /* 6 */
values[i++] = (Datum) (bool) 1; /* 7 */
values[i++] = (Datum) typDelim; /* 8 */
values[i++] = (Datum) (typeType == 'c' ? relationOid : InvalidOid); /* 9 */
- values[i++] = (Datum) elementObjectId; /* 10 */
+ values[i++] = (Datum) elementObjectId;/* 10 */
/*
* arguments to type input and output functions must be 0
@@ -431,7 +431,7 @@ TypeCreate(char *typeName,
func_error("TypeCreate", procname, 1, argList, NULL);
}
- values[i++] = (Datum) tup->t_oid; /* 11 - 14 */
+ values[i++] = (Datum) tup->t_oid; /* 11 - 14 */
}
/* ----------------
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 6448d2e830c..bd92c1368ef 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.75 1998/08/20 15:16:57 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.76 1998/08/20 22:07:39 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -2217,7 +2217,7 @@ vc_mkindesc(Relation onerel, int nindices, Relation *Irel, IndDesc **Idesc)
cachetuple = SearchSysCacheTupleCopy(INDEXRELID,
ObjectIdGetDatum(RelationGetRelid(Irel[i])),
0, 0, 0);
- Assert(tuple);
+ Assert(cachetuple);
/* get the buffer cache tuple */
tuple = heap_fetch(onerel, SnapshotNow, &cachetuple->t_ctid, &buffer);
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c
index 489fc9096a8..bbc8e2d9408 100644
--- a/src/backend/executor/execUtils.c
+++ b/src/backend/executor/execUtils.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.35 1998/08/19 02:02:01 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.36 1998/08/20 22:07:41 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -690,7 +690,7 @@ ExecGetIndexKeyInfo(IndexTupleForm indexTuple,
* the IndexCatalogInformation function in plancat.c
* because IndexCatalogInformation is poorly written.
*
- * It would be much better the functionality provided
+ * It would be much better if the functionality provided
* by this function and IndexCatalogInformation was
* in the form of a small set of orthogonal routines..
* If you are trying to understand this, I suggest you
diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c
index 9fc911a99bc..cd327632a87 100644
--- a/src/backend/utils/cache/inval.c
+++ b/src/backend/utils/cache/inval.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.13 1998/08/19 14:51:29 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.14 1998/08/20 22:07:43 momjian Exp $
*
* Note - this code is real crufty...
*
@@ -643,6 +643,7 @@ RelationInvalidateHeapTuple(Relation relation, HeapTuple tuple)
RelationIdRegisterLocalInvalid);
if (RefreshWhenInvalidate)
+ /* what does this do? bjm 1998/08/20 */
RelationInvalidateCatalogCacheTuple(relation,
tuple,
(void (*) ()) NULL);
diff --git a/src/bin/initdb/initdb.sh b/src/bin/initdb/initdb.sh
index 02077511aa8..8a5c665b939 100644
--- a/src/bin/initdb/initdb.sh
+++ b/src/bin/initdb/initdb.sh
@@ -26,7 +26,7 @@
#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.49 1998/08/20 15:16:59 momjian Exp $
+# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.50 1998/08/20 22:07:46 momjian Exp $
#
#-------------------------------------------------------------------------
@@ -404,13 +404,13 @@ echo
PGSQL_OPT="-o /dev/null -F -Q -D$PGDATA"
# If the COPY is first, the VACUUM generates an error, so we vacuum first
-echo "vacuuming template1"
+echo "Vacuuming template1"
echo "vacuum" | postgres $PGSQL_OPT template1 > /dev/null
echo "COPY pg_shadow TO '$PGDATA/pg_pwd' USING DELIMITERS '\\t'" | \
postgres $PGSQL_OPT template1 > /dev/null
-echo "creating public pg_user view"
+echo "Creating public pg_user view"
echo "CREATE TABLE xpg_user ( \
usename name, \
usesysid int4, \
@@ -436,7 +436,7 @@ echo "CREATE RULE _RETpg_user AS ON SELECT TO pg_user DO INSTEAD \
echo "REVOKE ALL on pg_shadow FROM public" | \
postgres $PGSQL_OPT template1 > /dev/null
-echo "loading pg_description"
+echo "Loading pg_description"
echo "copy pg_description from '$TEMPLATE_DESCR'" | \
postgres $PGSQL_OPT template1 > /dev/null
echo "copy pg_description from '$GLOBAL_DESCR'" | \