aboutsummaryrefslogtreecommitdiff
path: root/src/backend/catalog/heap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/catalog/heap.c')
-rw-r--r--src/backend/catalog/heap.c95
1 files changed, 70 insertions, 25 deletions
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 5353108b98e..fbdd1ae0cf9 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.148 2000/10/11 21:28:18 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.149 2000/10/16 14:52:02 vadim Exp $
*
*
* INTERFACE ROUTINES
@@ -177,12 +177,13 @@ heap_create(char *relname,
{
static unsigned int uniqueId = 0;
- Oid relid;
- Relation rel;
- bool nailme = false;
- int natts = tupDesc->natts;
- int i;
- MemoryContext oldcxt;
+ Oid relid;
+ Relation rel;
+ bool nailme = false;
+ int natts = tupDesc->natts;
+ int i;
+ MemoryContext oldcxt;
+ Oid tblNode = MyDatabaseId;
/* ----------------
* sanity checks
@@ -203,25 +204,65 @@ heap_create(char *relname,
* descriptor follows.
* ----------------
*/
- if (relname && strcmp(RelationRelationName, relname) == 0)
- {
- relid = RelOid_pg_class;
- nailme = true;
- }
- else if (relname && strcmp(AttributeRelationName, relname) == 0)
- {
- relid = RelOid_pg_attribute;
- nailme = true;
- }
- else if (relname && strcmp(ProcedureRelationName, relname) == 0)
- {
- relid = RelOid_pg_proc;
- nailme = true;
- }
- else if (relname && strcmp(TypeRelationName, relname) == 0)
+ if (relname && IsSystemRelationName(relname))
{
- relid = RelOid_pg_type;
- nailme = true;
+ if (strcmp(TypeRelationName, relname) == 0)
+ {
+ nailme = true;
+ relid = RelOid_pg_type;
+ }
+ else if (strcmp(AttributeRelationName, relname) == 0)
+ {
+ nailme = true;
+ relid = RelOid_pg_attribute;
+ }
+ else if (strcmp(ProcedureRelationName, relname) == 0)
+ {
+ nailme = true;
+ relid = RelOid_pg_proc;
+ }
+ else if (strcmp(RelationRelationName, relname) == 0)
+ {
+ nailme = true;
+ relid = RelOid_pg_class;
+ }
+ else if (strcmp(ShadowRelationName, relname) == 0)
+ {
+ tblNode = InvalidOid;
+ relid = RelOid_pg_shadow;
+ }
+ else if (strcmp(GroupRelationName, relname) == 0)
+ {
+ tblNode = InvalidOid;
+ relid = RelOid_pg_group;
+ }
+ else if (strcmp(DatabaseRelationName, relname) == 0)
+ {
+ tblNode = InvalidOid;
+ relid = RelOid_pg_database;
+ }
+ else if (strcmp(VariableRelationName, relname) == 0)
+ {
+ tblNode = InvalidOid;
+ relid = RelOid_pg_variable;
+ }
+ else if (strcmp(LogRelationName, relname) == 0)
+ {
+ tblNode = InvalidOid;
+ relid = RelOid_pg_log;
+ }
+ else if (strcmp(AttrDefaultRelationName, relname) == 0)
+ relid = RelOid_pg_attrdef;
+ else if (strcmp(RelCheckRelationName, relname) == 0)
+ relid = RelOid_pg_relcheck;
+ else if (strcmp(TriggerRelationName, relname) == 0)
+ relid = RelOid_pg_trigger;
+ else
+ {
+ relid = newoid();
+ if (IsSharedSystemRelationName(relname))
+ tblNode = InvalidOid;
+ }
}
else
relid = newoid();
@@ -290,6 +331,10 @@ heap_create(char *relname,
rel->rd_rel->reltype = relid;
}
+ rel->rd_node.tblNode = tblNode;
+ rel->rd_node.relNode = relid;
+ rel->rd_rel->relfilenode = relid;
+
/* ----------------
* done building relcache entry.
* ----------------