aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2000-10-11 21:28:19 +0000
committerBruce Momjian <bruce@momjian.us>2000-10-11 21:28:19 +0000
commitf41f8eebe73895da37f5529afc23e1de38a59854 (patch)
tree47c20221682b0aa497806e5b3effbe1bf8999ada
parent75e3ba335d33747db62268263c70ffea98d0fc9f (diff)
downloadpostgresql-f41f8eebe73895da37f5529afc23e1de38a59854.tar.gz
postgresql-f41f8eebe73895da37f5529afc23e1de38a59854.zip
Fix temp relation handling for indexes, cleanup
-rw-r--r--src/backend/access/transam/xact.c4
-rw-r--r--src/backend/catalog/heap.c8
-rw-r--r--src/backend/catalog/index.c6
-rw-r--r--src/backend/utils/cache/temprel.c29
-rw-r--r--src/include/utils/temprel.h6
5 files changed, 21 insertions, 32 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index 9a52b2ff09c..1e50b9e3e7f 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.71 2000/09/27 10:41:55 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.72 2000/10/11 21:28:17 momjian Exp $
*
* NOTES
* Transaction aborts can now occur two ways:
@@ -1119,7 +1119,7 @@ AbortTransaction()
AtEOXact_portals();
RecordTransactionAbort();
RelationPurgeLocalRelation(false);
- invalidate_temp_relations();
+ remove_temp_rel_in_myxid();
AtEOXact_SPI();
AtEOXact_nbtree();
AtAbort_Cache();
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index a9feacd2add..5353108b98e 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.147 2000/10/05 19:48:21 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.148 2000/10/11 21:28:18 momjian Exp $
*
*
* INTERFACE ROUTINES
@@ -131,11 +131,11 @@ static FormData_pg_attribute a6 = {
MaxCommandIdAttributeNumber, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0'
};
-/*
+/*
We decide to call this attribute "tableoid" rather than say
"classoid" on the basis that in the future there may be more than one
table of a particular class/type. In any case table is still the word
-used in SQL.
+used in SQL.
*/
static FormData_pg_attribute a7 = {
0xffffffff, {"tableoid"}, OIDOID, 0, sizeof(Oid),
@@ -1489,7 +1489,7 @@ heap_drop_with_catalog(const char *relname,
RelationForgetRelation(rid);
if (istemp)
- remove_temp_relation(rid);
+ remove_temp_rel_by_relid(rid);
if (has_toasttable)
{
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 307f4834b16..33aa67fe451 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.127 2000/10/05 19:48:21 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.128 2000/10/11 21:28:18 momjian Exp $
*
*
* INTERFACE ROUTINES
@@ -1145,7 +1145,7 @@ index_drop(Oid indexId)
RelationForgetRelation(indexId);
/* does something only if it is a temp index */
- remove_temp_relation(indexId);
+ remove_temp_rel_by_relid(indexId);
}
/* ----------------------------------------------------------------
@@ -1374,7 +1374,7 @@ IndexesAreActive(Oid relid, bool confirmCommitted)
if (!LockClassinfoForUpdate(relid, &tuple, &buffer, confirmCommitted))
elog(ERROR, "IndexesAreActive couldn't lock %u", relid);
if (((Form_pg_class) GETSTRUCT(&tuple))->relkind != RELKIND_RELATION &&
- ((Form_pg_class) GETSTRUCT(&tuple))->relkind != RELKIND_TOASTVALUE)
+ ((Form_pg_class) GETSTRUCT(&tuple))->relkind != RELKIND_TOASTVALUE)
elog(ERROR, "relation %u isn't an indexable relation", relid);
isactive = ((Form_pg_class) GETSTRUCT(&tuple))->relhasindex;
ReleaseBuffer(buffer);
diff --git a/src/backend/utils/cache/temprel.c b/src/backend/utils/cache/temprel.c
index 6ba2d176512..af584591e57 100644
--- a/src/backend/utils/cache/temprel.c
+++ b/src/backend/utils/cache/temprel.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/temprel.c,v 1.27 2000/07/12 18:04:45 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/temprel.c,v 1.28 2000/10/11 21:28:19 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -91,35 +91,24 @@ create_temp_relation(const char *relname, HeapTuple pg_class_tuple)
void
remove_all_temp_relations(void)
{
- List *l,
- *next;
-
- if (temp_rels == NIL)
- return;
-
AbortOutOfAnyTransaction();
StartTransactionCommand();
- l = temp_rels;
- while (l != NIL)
+ while (temp_rels != NIL)
{
- TempTable *temp_rel = (TempTable *) lfirst(l);
-
- next = lnext(l); /* do this first, l is deallocated */
+ char relname[NAMEDATALEN];
+ TempTable *temp_rel = (TempTable *) lfirst(temp_rels);
- /* Indexes are dropped during heap drop */
if (temp_rel->relkind != RELKIND_INDEX)
{
- char relname[NAMEDATALEN];
-
/* safe from deallocation */
strcpy(relname, temp_rel->user_relname);
heap_drop_with_catalog(relname, allowSystemTableMods);
}
-
- l = next;
+ else
+ index_drop(temp_rel->relid);
+ CommandCounterIncrement();
}
- temp_rels = NIL;
CommitTransactionCommand();
}
@@ -129,7 +118,7 @@ remove_all_temp_relations(void)
* we don't have the relname for indexes, so we just pass the oid
*/
void
-remove_temp_relation(Oid relid)
+remove_temp_rel_by_relid(Oid relid)
{
MemoryContext oldcxt;
List *l,
@@ -179,7 +168,7 @@ remove_temp_relation(Oid relid)
* We just have to delete the map entry.
*/
void
-invalidate_temp_relations(void)
+remove_temp_rel_in_myxid(void)
{
MemoryContext oldcxt;
List *l,
diff --git a/src/include/utils/temprel.h b/src/include/utils/temprel.h
index 337188b6124..a99839ac266 100644
--- a/src/include/utils/temprel.h
+++ b/src/include/utils/temprel.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: temprel.h,v 1.10 2000/06/20 06:41:11 tgl Exp $
+ * $Id: temprel.h,v 1.11 2000/10/11 21:28:19 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -18,12 +18,12 @@
extern void create_temp_relation(const char *relname,
HeapTuple pg_class_tuple);
-extern void remove_temp_relation(Oid relid);
+extern void remove_temp_rel_by_relid(Oid relid);
extern bool rename_temp_relation(const char *oldname,
const char *newname);
extern void remove_all_temp_relations(void);
-extern void invalidate_temp_relations(void);
+extern void remove_temp_rel_in_myxid(void);
extern char *get_temp_rel_by_username(const char *user_relname);
extern char *get_temp_rel_by_physicalname(const char *relname);