? config.log ? config.cache ? config.status ? GNUmakefile ? src/Makefile.custom ? src/GNUmakefile ? src/Makefile.global ? src/log ? src/crtags ? src/backend/postgres ? src/backend/catalog/global.bki ? src/backend/catalog/global.description ? src/backend/catalog/template1.bki ? src/backend/catalog/template1.description ? src/backend/port/Makefile ? src/bin/x ? src/bin/initdb/initdb ? src/bin/initlocation/initlocation ? src/bin/ipcclean/ipcclean ? src/bin/pg_config/pg_config ? src/bin/pg_ctl/pg_ctl ? src/bin/pg_dump/pg_dump ? src/bin/pg_dump/pg_restore ? src/bin/pg_dump/pg_dumpall ? src/bin/pg_id/pg_id ? src/bin/pg_passwd/pg_passwd ? src/bin/pgaccess/pgaccess ? src/bin/pgtclsh/Makefile.tkdefs ? src/bin/pgtclsh/Makefile.tcldefs ? src/bin/pgtclsh/pgtclsh ? src/bin/pgtclsh/pgtksh ? src/bin/psql/psql ? src/bin/scripts/createlang ? src/include/config.h ? src/include/stamp-h ? src/interfaces/ecpg/lib/libecpg.so.3.2.0 ? src/interfaces/ecpg/preproc/ecpg ? src/interfaces/libpgeasy/libpgeasy.so.2.1 ? src/interfaces/libpgtcl/libpgtcl.so.2.1 ? src/interfaces/libpq/libpq.so.2.1 ? src/interfaces/perl5/blib ? src/interfaces/perl5/Makefile ? src/interfaces/perl5/pm_to_blib ? src/interfaces/perl5/Pg.c ? src/interfaces/perl5/Pg.bs ? src/pl/plpgsql/src/libplpgsql.so.1.0 ? src/pl/tcl/Makefile.tcldefs ? src/test/regress/pg_regress ? src/test/regress/regress.out ? src/test/regress/results ? src/test/regress/regression.diffs ? src/test/regress/expected/copy.out ? src/test/regress/expected/create_function_1.out ? src/test/regress/expected/create_function_2.out ? src/test/regress/expected/misc.out ? src/test/regress/expected/constraints.out ? src/test/regress/sql/copy.sql ? src/test/regress/sql/misc.sql ? src/test/regress/sql/create_function_1.sql ? src/test/regress/sql/create_function_2.sql ? src/test/regress/sql/constraints.sql Index: src/backend/access/transam/xact.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/access/transam/xact.c,v retrieving revision 1.71 diff -c -r1.71 xact.c *** src/backend/access/transam/xact.c 2000/09/27 10:41:55 1.71 --- src/backend/access/transam/xact.c 2000/10/11 21:22:55 *************** *** 1119,1125 **** AtEOXact_portals(); RecordTransactionAbort(); RelationPurgeLocalRelation(false); ! invalidate_temp_relations(); AtEOXact_SPI(); AtEOXact_nbtree(); AtAbort_Cache(); --- 1119,1125 ---- AtEOXact_portals(); RecordTransactionAbort(); RelationPurgeLocalRelation(false); ! remove_temp_rel_in_myxid(); AtEOXact_SPI(); AtEOXact_nbtree(); AtAbort_Cache(); Index: src/backend/catalog/heap.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/catalog/heap.c,v retrieving revision 1.147 diff -c -r1.147 heap.c *** src/backend/catalog/heap.c 2000/10/05 19:48:21 1.147 --- src/backend/catalog/heap.c 2000/10/11 21:22:59 *************** *** 131,141 **** 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. */ static FormData_pg_attribute a7 = { 0xffffffff, {"tableoid"}, OIDOID, 0, sizeof(Oid), --- 131,141 ---- 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. */ static FormData_pg_attribute a7 = { 0xffffffff, {"tableoid"}, OIDOID, 0, sizeof(Oid), *************** *** 1489,1495 **** RelationForgetRelation(rid); if (istemp) ! remove_temp_relation(rid); if (has_toasttable) { --- 1489,1495 ---- RelationForgetRelation(rid); if (istemp) ! remove_temp_rel_by_relid(rid); if (has_toasttable) { Index: src/backend/catalog/index.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/catalog/index.c,v retrieving revision 1.127 diff -c -r1.127 index.c *** src/backend/catalog/index.c 2000/10/05 19:48:21 1.127 --- src/backend/catalog/index.c 2000/10/11 21:23:00 *************** *** 1145,1151 **** RelationForgetRelation(indexId); /* does something only if it is a temp index */ ! remove_temp_relation(indexId); } /* ---------------------------------------------------------------- --- 1145,1151 ---- RelationForgetRelation(indexId); /* does something only if it is a temp index */ ! remove_temp_rel_by_relid(indexId); } /* ---------------------------------------------------------------- *************** *** 1374,1380 **** 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) elog(ERROR, "relation %u isn't an indexable relation", relid); isactive = ((Form_pg_class) GETSTRUCT(&tuple))->relhasindex; ReleaseBuffer(buffer); --- 1374,1380 ---- 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) elog(ERROR, "relation %u isn't an indexable relation", relid); isactive = ((Form_pg_class) GETSTRUCT(&tuple))->relhasindex; ReleaseBuffer(buffer); Index: src/backend/utils/cache/temprel.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/cache/temprel.c,v retrieving revision 1.27 diff -c -r1.27 temprel.c *** src/backend/utils/cache/temprel.c 2000/07/12 18:04:45 1.27 --- src/backend/utils/cache/temprel.c 2000/10/11 21:23:01 *************** *** 91,125 **** void remove_all_temp_relations(void) { - List *l, - *next; - - if (temp_rels == NIL) - return; - AbortOutOfAnyTransaction(); StartTransactionCommand(); ! l = temp_rels; ! while (l != NIL) { ! TempTable *temp_rel = (TempTable *) lfirst(l); ! next = lnext(l); /* do this first, l is deallocated */ ! ! /* 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; } - temp_rels = NIL; CommitTransactionCommand(); } --- 91,112 ---- void remove_all_temp_relations(void) { AbortOutOfAnyTransaction(); StartTransactionCommand(); ! while (temp_rels != NIL) { ! char relname[NAMEDATALEN]; ! TempTable *temp_rel = (TempTable *) lfirst(temp_rels); ! /* safe from deallocation */ ! strcpy(relname, temp_rel->user_relname); if (temp_rel->relkind != RELKIND_INDEX) heap_drop_with_catalog(relname, allowSystemTableMods); ! else ! index_drop(temp_rel->relid); ! CommandCounterIncrement(); } CommitTransactionCommand(); } *************** *** 129,135 **** * we don't have the relname for indexes, so we just pass the oid */ void ! remove_temp_relation(Oid relid) { MemoryContext oldcxt; List *l, --- 116,122 ---- * we don't have the relname for indexes, so we just pass the oid */ void ! remove_temp_rel_by_relid(Oid relid) { MemoryContext oldcxt; List *l, *************** *** 179,185 **** * We just have to delete the map entry. */ void ! invalidate_temp_relations(void) { MemoryContext oldcxt; List *l, --- 166,172 ---- * We just have to delete the map entry. */ void ! remove_temp_rel_in_myxid(void) { MemoryContext oldcxt; List *l, Index: src/include/utils/temprel.h =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/utils/temprel.h,v retrieving revision 1.10 diff -c -r1.10 temprel.h *** src/include/utils/temprel.h 2000/06/20 06:41:11 1.10 --- src/include/utils/temprel.h 2000/10/11 21:23:14 *************** *** 18,29 **** extern void create_temp_relation(const char *relname, HeapTuple pg_class_tuple); ! extern void remove_temp_relation(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 char *get_temp_rel_by_username(const char *user_relname); extern char *get_temp_rel_by_physicalname(const char *relname); --- 18,29 ---- extern void create_temp_relation(const char *relname, HeapTuple pg_class_tuple); ! 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 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);