diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-03-26 19:17:02 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-03-26 19:17:02 +0000 |
commit | 1dbf8aa7a8159875bb46f6ee6ab0116eee76869b (patch) | |
tree | 9aa08b4247dc230b6d35aa9c34b488b36b716693 /src/backend/parser | |
parent | da631e931f9da4bc5df4bfd39f0c42684adfb8e5 (diff) | |
download | postgresql-1dbf8aa7a8159875bb46f6ee6ab0116eee76869b.tar.gz postgresql-1dbf8aa7a8159875bb46f6ee6ab0116eee76869b.zip |
pg_class has a relnamespace column. You can create and access tables
in schemas other than the system namespace; however, there's no search
path yet, and not all operations work yet on tables outside the system
namespace.
Diffstat (limited to 'src/backend/parser')
-rw-r--r-- | src/backend/parser/analyze.c | 33 | ||||
-rw-r--r-- | src/backend/parser/parse_clause.c | 4 | ||||
-rw-r--r-- | src/backend/parser/parse_relation.c | 4 |
3 files changed, 19 insertions, 22 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index adefcd040cf..270637d451a 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.222 2002/03/22 02:56:33 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.223 2002/03/26 19:15:56 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -17,6 +17,7 @@ #include "catalog/catname.h" #include "catalog/heap.h" #include "catalog/index.h" +#include "catalog/namespace.h" #include "catalog/pg_index.h" #include "catalog/pg_type.h" #include "nodes/makefuncs.h" @@ -118,7 +119,7 @@ static void transformConstraintAttrs(List *constraintList); static void transformColumnType(ParseState *pstate, ColumnDef *column); static void transformFkeyCheckAttrs(FkConstraint *fkconstraint, Oid *pktypoid); static void transformFkeyGetPrimaryKey(FkConstraint *fkconstraint, Oid *pktypoid); -static bool relationHasPrimaryKey(char *relname); +static bool relationHasPrimaryKey(Oid relationOid); static Oid transformFkeyGetColType(CreateStmtContext *cxt, char *colname); static void release_pstate_resources(ParseState *pstate); static FromExpr *makeFromExpr(List *fromlist, Node *quals); @@ -1048,7 +1049,7 @@ transformIndexConstraints(ParseState *pstate, CreateStmtContext *cxt) /* In ALTER TABLE case, a primary index might already exist */ if (cxt->pkey != NULL || (OidIsValid(cxt->relOid) && - relationHasPrimaryKey((cxt->relation)->relname))) + relationHasPrimaryKey(cxt->relOid))) elog(ERROR, "%s / PRIMARY KEY multiple primary keys" " for table '%s' are not allowed", cxt->stmtType, (cxt->relation)->relname); @@ -1115,10 +1116,10 @@ transformIndexConstraints(ParseState *pstate, CreateStmtContext *cxt) int count; Assert(IsA(inh, RangeVar)); - rel = heap_openr(inh->relname, AccessShareLock); + rel = heap_openrv(inh, AccessShareLock); if (rel->rd_rel->relkind != RELKIND_RELATION) elog(ERROR, "inherited table \"%s\" is not a relation", - strVal(inh)); + inh->relname); for (count = 0; count < rel->rd_att->natts; count++) { Form_pg_attribute inhattr = rel->rd_att->attrs[count]; @@ -1724,7 +1725,7 @@ transformRuleStmt(ParseState *pstate, RuleStmt *stmt, * beforehand. We don't need to hold a refcount on the relcache * entry, however. */ - heap_close(heap_openr(stmt->relation->relname, AccessExclusiveLock), + heap_close(heap_openrv(stmt->relation, AccessExclusiveLock), NoLock); /* @@ -2562,9 +2563,7 @@ transformAlterTableStmt(ParseState *pstate, AlterTableStmt *stmt, cxt.relation = stmt->relation; cxt.inhRelations = NIL; cxt.relation->istemp = is_temp_rel_name(stmt->relation->relname); - cxt.relOid = GetSysCacheOid(RELNAME, - PointerGetDatum((stmt->relation)->relname), - 0, 0, 0); + cxt.relOid = RangeVarGetRelid(stmt->relation, false); cxt.hasoids = SearchSysCacheExists(ATTNUM, ObjectIdGetDatum(cxt.relOid), Int16GetDatum(ObjectIdAttributeNumber), @@ -2594,9 +2593,7 @@ transformAlterTableStmt(ParseState *pstate, AlterTableStmt *stmt, cxt.relation = stmt->relation; cxt.inhRelations = NIL; cxt.relation->istemp = is_temp_rel_name(stmt->relation->relname); - cxt.relOid = GetSysCacheOid(RELNAME, - PointerGetDatum((stmt->relation)->relname), - 0, 0, 0); + cxt.relOid = RangeVarGetRelid(stmt->relation, false); cxt.hasoids = SearchSysCacheExists(ATTNUM, ObjectIdGetDatum(cxt.relOid), Int16GetDatum(ObjectIdAttributeNumber), @@ -2844,7 +2841,7 @@ transformFkeyCheckAttrs(FkConstraint *fkconstraint, Oid *pktypoid) /* * Open the referenced table */ - pkrel = heap_openr(fkconstraint->pktable->relname, AccessShareLock); + pkrel = heap_openrv(fkconstraint->pktable, AccessShareLock); if (pkrel->rd_rel->relkind != RELKIND_RELATION) elog(ERROR, "Referenced relation \"%s\" is not a table", @@ -2937,7 +2934,7 @@ transformFkeyGetPrimaryKey(FkConstraint *fkconstraint, Oid *pktypoid) /* * Open the referenced table */ - pkrel = heap_openr(fkconstraint->pktable->relname, AccessShareLock); + pkrel = heap_openrv(fkconstraint->pktable, AccessShareLock); if (pkrel->rd_rel->relkind != RELKIND_RELATION) elog(ERROR, "Referenced relation \"%s\" is not a table", @@ -3002,14 +2999,14 @@ transformFkeyGetPrimaryKey(FkConstraint *fkconstraint, Oid *pktypoid) * See whether an existing relation has a primary key. */ static bool -relationHasPrimaryKey(char *relname) +relationHasPrimaryKey(Oid relationOid) { bool result = false; Relation rel; List *indexoidlist, *indexoidscan; - rel = heap_openr(relname, AccessShareLock); + rel = heap_open(relationOid, AccessShareLock); /* * Get the list of index OIDs for the table from the relcache, and @@ -3084,10 +3081,10 @@ transformFkeyGetColType(CreateStmtContext *cxt, char *colname) int count; Assert(IsA(inh, RangeVar)); - rel = heap_openr(inh->relname, AccessShareLock); + rel = heap_openrv(inh, AccessShareLock); if (rel->rd_rel->relkind != RELKIND_RELATION) elog(ERROR, "inherited table \"%s\" is not a relation", - strVal(inh)); + inh->relname); for (count = 0; count < rel->rd_att->natts; count++) { char *name = NameStr(rel->rd_att->attrs[count]->attname); diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index c2f578f4e6d..6213e9edefc 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.86 2002/03/22 02:56:33 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.87 2002/03/26 19:15:57 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -133,7 +133,7 @@ setTargetTable(ParseState *pstate, RangeVar *relation, * analyze.c will eventually do the corresponding heap_close(), but *not* * release the lock. */ - pstate->p_target_relation = heap_openr(relation->relname, RowExclusiveLock); + pstate->p_target_relation = heap_openrv(relation, RowExclusiveLock); /* * Now build an RTE. diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c index 3701539af58..f6a2dc208f8 100644 --- a/src/backend/parser/parse_relation.c +++ b/src/backend/parser/parse_relation.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.65 2002/03/22 02:56:34 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.66 2002/03/26 19:15:59 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -443,7 +443,7 @@ addRangeTableEntry(ParseState *pstate, * access level depending on whether we're doing SELECT FOR UPDATE. */ lockmode = isForUpdate(pstate, refname) ? RowShareLock : AccessShareLock; - rel = heap_openr(relation->relname, lockmode); + rel = heap_openrv(relation, lockmode); rte->relid = RelationGetRelid(rel); eref = alias ? (Alias *) copyObject(alias) : makeAlias(refname, NIL); |