]> granicus.if.org Git - postgresql/commitdiff
Another directory cleaned up
authorMarc G. Fournier <scrappy@hub.org>
Wed, 6 Nov 1996 07:31:26 +0000 (07:31 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Wed, 6 Nov 1996 07:31:26 +0000 (07:31 +0000)
src/backend/catalog/heap.c
src/backend/catalog/index.c
src/backend/catalog/indexing.c
src/backend/catalog/pg_aggregate.c
src/backend/catalog/pg_operator.c
src/backend/catalog/pg_proc.c
src/backend/catalog/pg_type.c

index 7dd8ca6d828cd1d5f9dbcdd1198f1e3cac8fbe0d..1b2084ec990b46748e9bebef7a0009ed2fa9d647 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.5 1996/11/06 06:47:03 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.6 1996/11/06 07:31:19 scrappy Exp $
  *
  * INTERFACE ROUTINES
  *     heap_creatr()           - Create an uncataloged heap relation
  */
 #include <postgres.h>
 
+#include <catalog/pg_ipl.h>
+#include <catalog/pg_inherits.h>
+#include <catalog/pg_proc.h>
+#include <miscadmin.h>
+#include <catalog/indexing.h>
+#include <catalog/catalog.h>
+#include <utils/builtins.h>
+#include <access/heapam.h>
 #include <utils/mcxt.h>
 #include <parser/catalog_utils.h>
 #include <catalog/index.h>
 #include <rewrite/rewriteRemove.h>
 #include <storage/lmgr.h>
 #include <storage/smgr.h>
-#include <access/relscan.h>
-#include <utils/tqual.h>
-
-/*
-#include <catalog/heap.h>
-#include <catalog/pg_proc.h>
-#include <parser/catalog_utils.h>
-#include <access/heapam.h>
-#include <access/genam.h>
-#include <access/istrat.h>
-#include <storage/bufmgr.h>
-#include <lib/hasht.h>
-#include <miscadmin.h>
-#include <fmgr.h>
-#include <utils/builtins.h>
-#include <utils/mcxt.h>
-#include <utils/relcache.h>
-#include <catalog/catname.h>
-#include <catalog/pg_index.h>
-#include <catalog/pg_inherits.h>
-#include <catalog/pg_ipl.h>
-#include <catalog/index.h>
-#include <catalog/indexing.h>
-#include <catalog/catalog.h>
-#include <storage/lmgr.h>
-#include <rewrite/rewriteRemove.h>
-#include <storage/smgr.h>
-*/
-
-static void AddNewAttributeTuples(Oid new_rel_oid, TupleDesc tupdesc);
-static void CheckAttributeNames(TupleDesc tupdesc);
+#ifndef HAVE_MEMMOVE
+# include <regex/utils.h>
+#else
+# include <string.h>
+#endif
 
 /* ----------------------------------------------------------------
  *             XXX UGLY HARD CODED BADNESS FOLLOWS XXX
@@ -1179,4 +1161,263 @@ DeletePgTypeTuple(Relation rdesc)
     
     /* ----------------
      * now scan pg_attribute.  if any other relations have
-     *  attributes of the type of the relation we are de
\ No newline at end of file
+     *  attributes of the type of the relation we are deleteing
+     *  then we have to disallow the deletion.  should talk to
+     *  stonebraker about this.  -cim 6/19/90
+     * ----------------
+     */
+    typoid = tup->t_oid;
+    
+    pg_attribute_desc = heap_openr(AttributeRelationName);
+    
+    ScanKeyEntryInitialize(&attkey,
+                          0, Anum_pg_attribute_atttypid, F_INT4EQ,
+                          typoid);
+    
+    pg_attribute_scan = heap_beginscan(pg_attribute_desc,
+                                      0,
+                                      NowTimeQual,
+                                      1,
+                                      &attkey);
+    
+    /* ----------------
+     * try and get a pg_attribute tuple.  if we succeed it means
+     *  we cant delete the relation because something depends on
+     *  the schema.
+     * ----------------
+     */
+    atttup = heap_getnext(pg_attribute_scan, 0, (Buffer *)NULL);
+    
+    if (PointerIsValid(atttup)) {
+       Oid relid = ((AttributeTupleForm) GETSTRUCT(atttup))->attrelid;
+       
+       heap_endscan(pg_type_scan);
+       heap_close(pg_type_desc);
+       heap_endscan(pg_attribute_scan);
+       heap_close(pg_attribute_desc);
+       
+       elog(WARN, "DeletePgTypeTuple: att of type %s exists in relation %d",
+            &rdesc->rd_rel->relname, relid);   
+    }
+    heap_endscan(pg_attribute_scan);
+    heap_close(pg_attribute_desc);
+    
+    /* ----------------
+     *  Ok, it's safe so we delete the relation tuple
+     *  from pg_type and finish up.  But first end the scan so that
+     *  we release the read lock on pg_type.  -mer 13 Aug 1991
+     * ----------------
+     */
+    heap_endscan(pg_type_scan);
+    heap_delete(pg_type_desc, &tup->t_ctid);
+    
+    heap_close(pg_type_desc);
+}
+
+/* --------------------------------
+ *     heap_destroy
+ *
+ * --------------------------------
+ */
+void
+heap_destroy(char *relname)
+{
+    Relation   rdesc;
+    
+    /* ----------------
+     * first open the relation.  if the relation does exist,
+     *  heap_openr() returns NULL.
+     * ----------------
+     */
+    rdesc = heap_openr(relname);
+    if (rdesc == NULL)
+       elog(WARN,"Relation %s Does Not Exist!", relname);
+    
+    /* ----------------
+     * prevent deletion of system relations
+     * ----------------
+     */
+    if (IsSystemRelationName(RelationGetRelationName(rdesc)->data))
+       elog(WARN, "amdestroy: cannot destroy %s relation",
+            &rdesc->rd_rel->relname);
+    
+    /* ----------------
+     * remove inheritance information
+     * ----------------
+     */
+    RelationRemoveInheritance(rdesc);
+    
+    /* ----------------
+     * remove indexes if necessary
+     * ----------------
+     */
+    if (rdesc->rd_rel->relhasindex) {
+       RelationRemoveIndexes(rdesc);
+    }
+
+    /* ----------------
+     * remove rules if necessary
+     * ----------------
+     */
+    if (rdesc->rd_rules != NULL) {
+       RelationRemoveRules(rdesc->rd_id);
+    }
+    
+    /* ----------------
+     * delete attribute tuples
+     * ----------------
+     */
+    DeletePgAttributeTuples(rdesc);
+    
+    /* ----------------
+     * delete type tuple.  here we want to see the effects
+     *  of the deletions we just did, so we use setheapoverride().
+     * ----------------
+     */
+    setheapoverride(true);
+    DeletePgTypeTuple(rdesc);
+    setheapoverride(false);
+    
+    /* ----------------
+     * delete relation tuple
+     * ----------------
+     */
+    DeletePgRelationTuple(rdesc);
+    
+    /* ----------------
+     * flush the relation from the relcache
+     * ----------------
+     */
+    RelationIdInvalidateRelationCacheByRelationId(rdesc->rd_id);
+
+    /* ----------------
+     * unlink the relation and finish up.
+     * ----------------
+     */
+    (void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc);
+    if(rdesc->rd_istemp) {
+        rdesc->rd_tmpunlinked = TRUE;
+    }
+    heap_close(rdesc);
+}
+
+/*
+ * heap_destroyr
+ *    destroy and close temporary relations
+ *
+ */
+
+void 
+heap_destroyr(Relation rdesc)
+{
+    ReleaseTmpRelBuffers(rdesc);
+    (void) smgrunlink(rdesc->rd_rel->relsmgr, rdesc);
+    if(rdesc->rd_istemp) {
+        rdesc->rd_tmpunlinked = TRUE;
+    }
+    heap_close(rdesc);
+    RemoveFromTempRelList(rdesc);
+}
+
+
+/**************************************************************
+  functions to deal with the list of temporary relations 
+**************************************************************/
+
+/* --------------
+   InitTempRellist():
+
+   initialize temporary relations list
+   the tempRelList is a list of temporary relations that
+   are created in the course of the transactions
+   they need to be destroyed properly at the end of the transactions
+
+   MODIFIES the global variable tempRels
+
+ >> NOTE <<
+
+   malloc is used instead of palloc because we KNOW when we are
+   going to free these things.  Keeps us away from the memory context
+   hairyness
+
+*/
+void
+InitTempRelList()
+{
+    if (tempRels) {
+       free(tempRels->rels);
+       free(tempRels);
+    };
+
+    tempRels = (TempRelList*)malloc(sizeof(TempRelList));
+    tempRels->size = TEMP_REL_LIST_SIZE;
+    tempRels->rels = (Relation*)malloc(sizeof(Relation) * tempRels->size);
+    memset(tempRels->rels, 0, sizeof(Relation) * tempRels->size);
+    tempRels->num = 0;
+}
+
+/*
+   removes a relation from the TempRelList
+
+   MODIFIES the global variable tempRels
+      we don't really remove it, just mark it as NULL
+      and DestroyTempRels will look for NULLs
+*/
+void
+RemoveFromTempRelList(Relation r)
+{
+    int i;
+
+    if (!tempRels)
+       return;
+
+    for (i=0; i<tempRels->num; i++) {
+       if (tempRels->rels[i] == r) {
+           tempRels->rels[i] = NULL;
+           break;
+       }
+    }
+}
+
+/*
+   add a temporary relation to the TempRelList
+
+   MODIFIES the global variable tempRels
+*/
+void
+AddToTempRelList(Relation r)
+{
+    if (!tempRels)
+       return;
+
+    if (tempRels->num == tempRels->size) {
+       tempRels->size += TEMP_REL_LIST_SIZE;
+       tempRels->rels = realloc(tempRels->rels, tempRels->size);
+    }
+    tempRels->rels[tempRels->num] = r;
+    tempRels->num++;
+}
+
+/*
+   go through the tempRels list and destroy each of the relations
+*/
+void
+DestroyTempRels()
+{
+    int i;
+    Relation rdesc;
+
+    if (!tempRels)
+       return;
+
+    for (i=0;i<tempRels->num;i++) {
+       rdesc = tempRels->rels[i];
+       /* rdesc may be NULL if it has been removed from the list already */
+       if (rdesc)
+           heap_destroyr(rdesc);
+    }
+    free(tempRels->rels);
+    free(tempRels);
+    tempRels = NULL;
+}
+
index a027b8928abbb137df26b54b6347505762bf053b..18375763a5128a4d72cd137bb70ec2476ff04d68 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.6 1996/11/05 11:57:52 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.7 1996/11/06 07:31:21 scrappy Exp $
  *
  *
  * INTERFACE ROUTINES
  *
  *-------------------------------------------------------------------------
  */
-#include "postgres.h"
+#include <postgres.h>
 
 #include <catalog/pg_proc.h>
 #include <storage/bufmgr.h>
 #include <fmgr.h>
+#include <access/genam.h>
+#include <access/heapam.h>
+#include <utils/builtins.h>
+#include <access/xact.h>
+#include <parser/catalog_utils.h>
+#include <storage/smgr.h>
+#include <storage/lmgr.h>
+#include <miscadmin.h>
+#include <utils/mcxt.h>
+#include <utils/relcache.h>
+#include <bootstrap/bootstrap.h>
+#include <catalog/catname.h>
+#include <catalog/catalog.h>
+#include <utils/syscache.h>
+#include <catalog/indexing.h>
+#include <catalog/heap.h>
+#include <catalog/index.h>
+#include <executor/executor.h>
+#include <optimizer/clauses.h>
+#include <optimizer/prep.h>
+#include <access/istrat.h>
 
-#include "access/genam.h"
-#include "access/heapam.h"
-#include "utils/builtins.h"
-#include "access/xact.h"
-#include "parser/catalog_utils.h"
-
-#include "storage/smgr.h"
-#include "storage/lmgr.h"
-#include "miscadmin.h"
-#include "utils/mcxt.h"
-#include "utils/palloc.h"
-#include "utils/relcache.h"
-
-#include "bootstrap/bootstrap.h"
-
-#include "catalog/catname.h"
-#include "catalog/catalog.h"
-#include "utils/syscache.h"
-#include "catalog/pg_attribute.h"
-#include "catalog/pg_class.h"
-#include "catalog/indexing.h"
-
-#include "catalog/heap.h"
-
-#include "nodes/plannodes.h"
-
-#include "catalog/index.h"
-
-#include "executor/executor.h"
-#include "executor/tuptable.h"
-
-#include "optimizer/clauses.h"
-#include "optimizer/prep.h"
-
-#include "access/istrat.h"
 #ifndef HAVE_MEMMOVE
 # include <regex/utils.h>
 #else
index 34edd192bc0a8abfc73f3826bdc01a2d79f215e9..8274697f5d2ca01e71a3e1cc107337dd2983faa1 100644 (file)
@@ -8,30 +8,26 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.3 1996/11/03 23:27:04 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.4 1996/11/06 07:31:22 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
-#include "postgres.h"
-#include "utils/builtins.h"
-#include "utils/oidcompos.h"
-#include "utils/palloc.h"
-#include "access/heapam.h"
-#include "access/genam.h"
-#include "access/skey.h"
-#include "storage/bufmgr.h"
-#include "nodes/execnodes.h"
-#include "catalog/catalog.h"
-#include "catalog/catname.h"
-#include "catalog/pg_index.h"
-#include "catalog/pg_proc.h"
-#include "catalog/pg_class.h"
-#include "catalog/pg_attribute.h"
-#include "utils/syscache.h"
-#include "catalog/indexing.h"
-#include "catalog/index.h"
+#include <postgres.h>
 
-#include "miscadmin.h"
+#include <utils/builtins.h>
+#include <utils/oidcompos.h>
+#include <access/heapam.h>
+#include <access/genam.h>
+#include <storage/bufmgr.h>
+#include <nodes/execnodes.h>
+#include <catalog/catalog.h>
+#include <catalog/catname.h>
+#include <catalog/pg_index.h>
+#include <catalog/pg_proc.h>
+#include <utils/syscache.h>
+#include <catalog/indexing.h>
+#include <catalog/index.h>
+#include <miscadmin.h>
 
 /*
  * Names of indices on the following system catalogs:
index 8579fa1648b4e169158dd52b1e2b18136b5d1a17..fa1298dfbfe1a60aec055e526015117503ac079e 100644 (file)
@@ -7,29 +7,27 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/catalog/pg_aggregate.c,v 1.2 1996/11/03 23:27:05 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/catalog/pg_aggregate.c,v 1.3 1996/11/06 07:31:23 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
-#include <string.h>
-#include "postgres.h"
+#include <postgres.h>
 
-#include "access/heapam.h"
-#include "access/relscan.h"
-#include "access/skey.h"
-#include "access/tupdesc.h"
-#include "utils/palloc.h"
-#include "utils/builtins.h"
-#include "fmgr.h"
-
-#include "catalog/catname.h"
-#include "utils/syscache.h"
-#include "catalog/pg_operator.h"
-#include "catalog/pg_proc.h"
-#include "catalog/pg_type.h"
-#include "catalog/pg_aggregate.h"
-
-#include "miscadmin.h"
+#include <access/heapam.h>
+#include <utils/builtins.h>
+#include <fmgr.h>
+#include <catalog/catname.h>
+#include <utils/syscache.h>
+#include <catalog/pg_operator.h>
+#include <catalog/pg_proc.h>
+#include <catalog/pg_type.h>
+#include <catalog/pg_aggregate.h>
+#include <miscadmin.h>
+#ifndef HAVE_MEMMOVE
+# include <regex/utils.h>
+#else
+# include <string.h>
+#endif
 
 /* ----------------
  * AggregateCreate
index b980da799b0a6e181e5044b29f8531af4f0d3d72..74db99fa0e583d3b6f6f30da1d4c47d7cef104d3 100644 (file)
@@ -7,32 +7,29 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.4 1996/11/05 11:57:53 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.5 1996/11/06 07:31:24 scrappy Exp $
  *
  * NOTES
  *    these routines moved here from commands/define.c and somewhat cleaned up.
  *     
  *-------------------------------------------------------------------------
  */
-#include <string.h>
-#include "postgres.h"
+#include <postgres.h>
 
 #include <catalog/pg_proc.h>
 #include <utils/syscache.h>
-
-#include "access/heapam.h"
-#include "access/skey.h"
-#include "access/htup.h"
-#include "utils/palloc.h"
-#include "parser/catalog_utils.h"
-
-#include "catalog/catname.h"
-#include "catalog/pg_operator.h"
-#include "storage/bufmgr.h"
-
-#include "fmgr.h"
-
-#include "miscadmin.h"
+#include <access/heapam.h>
+#include <parser/catalog_utils.h>
+#include <catalog/catname.h>
+#include <catalog/pg_operator.h>
+#include <storage/bufmgr.h>
+#include <fmgr.h>
+#include <miscadmin.h>
+#ifndef HAVE_MEMMOVE
+# include <regex/utils.h>
+#else
+# include <string.h>
+#endif
 
 static Oid OperatorGetWithOpenRelation(Relation pg_operator_desc,
                                       const char *operatorName,
index c6c01186eb5434fdde12d779a23c879decabda61..2e54d42ae351a55639ea9c2d8501a18e1cf71bba 100644 (file)
@@ -7,33 +7,33 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.3 1996/11/05 11:57:54 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.4 1996/11/06 07:31:25 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
-#include <string.h>
-#include "postgres.h"
+#include <postgres.h>
+
 #include <utils/syscache.h>
 #include <catalog/pg_proc.h>
-
-#include "access/heapam.h"
-#include "access/relscan.h"
-#include "access/skey.h"
-#include "fmgr.h"
-#include "utils/builtins.h"
-#include "utils/sets.h"
-
-#include "catalog/catname.h"
-#include "catalog/indexing.h"
-#include "parser/parse_query.h"
-#include "tcop/tcopprot.h"
-#include "parser/catalog_utils.h"
-#include "optimizer/internal.h"
-#include "optimizer/planner.h"
-
-#include "utils/lsyscache.h"
-
-#include "miscadmin.h"
+#include <access/heapam.h>
+#include <access/relscan.h>
+#include <fmgr.h>
+#include <utils/builtins.h>
+#include <utils/sets.h>
+#include <catalog/catname.h>
+#include <catalog/indexing.h>
+#include <parser/parse_query.h>
+#include <tcop/tcopprot.h>
+#include <parser/catalog_utils.h>
+#include <optimizer/internal.h>
+#include <optimizer/planner.h>
+#include <utils/lsyscache.h>
+#include <miscadmin.h>
+#ifndef HAVE_MEMMOVE
+# include <regex/utils.h>
+#else
+# include <string.h>
+#endif
 
 /* ----------------------------------------------------------------
  *     ProcedureDefine
index 6fbca03cb09ff7ef83b528813fd45295edee87d2..17fd7158e6fc632914133f355aa2e0c2896151c6 100644 (file)
@@ -7,30 +7,28 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.3 1996/11/05 11:57:55 scrappy Exp $
+ *    $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.4 1996/11/06 07:31:26 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
-#include <string.h>
-#include "postgres.h"
+#include <postgres.h>
+
 #include <utils/syscache.h>
 #include <catalog/pg_proc.h>
-
-
-#include "access/heapam.h"
-#include "access/relscan.h"
-#include "access/skey.h"
-#include "access/tupdesc.h"
-#include "utils/builtins.h"
-#include "utils/palloc.h"
-#include "fmgr.h"
-#include "parser/catalog_utils.h"
-
-#include "catalog/catname.h"
-#include "catalog/indexing.h"
-#include "storage/lmgr.h"
-
-#include "miscadmin.h"
+#include <access/heapam.h>
+#include <access/relscan.h>
+#include <utils/builtins.h>
+#include <fmgr.h>
+#include <parser/catalog_utils.h>
+#include <catalog/catname.h>
+#include <catalog/indexing.h>
+#include <storage/lmgr.h>
+#include <miscadmin.h>
+#ifndef HAVE_MEMMOVE
+# include <regex/utils.h>
+#else
+# include <string.h>
+#endif
 
 /* ----------------------------------------------------------------
  *     TypeGetWithOpenRelation