]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
fix for index problem.
authorBruce Momjian <bruce@momjian.us>
Thu, 20 Aug 1998 22:07:46 +0000 (22:07 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 20 Aug 1998 22:07:46 +0000 (22:07 +0000)
src/backend/access/heap/heapam.c
src/backend/catalog/heap.c
src/backend/catalog/index.c
src/backend/catalog/indexing.c
src/backend/catalog/pg_type.c
src/backend/commands/vacuum.c
src/backend/executor/execUtils.c
src/backend/utils/cache/inval.c
src/bin/initdb/initdb.sh

index 139db3b5e36dcccb03d2c70650f1feab15fbd5a2..45899d15d83c4bde02bb5f7a923206410f5c7833 100644 (file)
@@ -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);
index 7d70b7a453d17809b5a44c3b6a500a03a2c7a7f4..84f6849357f9df88f776b8975f04581c95ce087e 100644 (file)
@@ -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;
 
index 48a2cada29a306755e0148adc72fc6f42f805817..95442918f69eb14316f2225da32ac07691b18459 100644 (file)
@@ -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
index 8b50cee327c1e384933ea71a8275ea238cdc5b60..e13200c96b2c180c186c58a1d39846f7d9813564 100644 (file)
@@ -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);
        }
 }
 
index a23e73893f825dc1aab9ae3fd0a2a17c85250a28..999a398db6c21d9f9ef898eaa54bd228a8301a5a 100644 (file)
@@ -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 */
        }
 
        /* ----------------
index 6448d2e830c21237e58076668f1653530d838bb6..bd92c1368eff50b28f9226b13cdf761b1e846a27 100644 (file)
@@ -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);
index 489fc9096a8bb822473b156f6d9dbad7a03b25d1..bbc8e2d94085f8ddf63d3b1a8aad7cfab4997da6 100644 (file)
@@ -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
index 9fc911a99bcc5b935ca21babc9082379087057dd..cd327632a870ee791dd40d04aae7cd015e77a334 100644 (file)
@@ -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);
index 02077511aa87b1c2271fa77f4e3292c430b43861..8a5c665b939da0b82597ac11f542ec8cddad6459 100644 (file)
@@ -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'" | \