aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/analyze.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser/analyze.c')
-rw-r--r--src/backend/parser/analyze.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 94e5e1602eb..6c61ab9acbf 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.201 2001/10/12 00:07:14 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.202 2001/10/22 22:49:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -15,6 +15,7 @@
#include "access/heapam.h"
#include "catalog/catname.h"
+#include "catalog/heap.h"
#include "catalog/pg_index.h"
#include "catalog/pg_type.h"
#include "nodes/makefuncs.h"
@@ -50,6 +51,7 @@ typedef struct
char *relname; /* name of relation */
List *inhRelnames; /* names of relations to inherit from */
bool istemp; /* is it to be a temp relation? */
+ bool hasoids; /* does relation have an OID column? */
Oid relOid; /* OID of table, if ALTER TABLE case */
List *columns; /* ColumnDef items */
List *ckconstraints; /* CHECK constraints */
@@ -720,6 +722,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
cxt.relname = stmt->relname;
cxt.inhRelnames = stmt->inhRelnames;
cxt.istemp = stmt->istemp;
+ cxt.hasoids = stmt->hasoids;
cxt.relOid = InvalidOid;
cxt.columns = NIL;
cxt.ckconstraints = NIL;
@@ -1106,6 +1109,15 @@ transformIndexConstraints(ParseState *pstate, CreateStmtContext *cxt)
if (constraint->contype == CONSTR_PRIMARY)
column->is_not_null = TRUE;
}
+ else if (SystemAttributeByName(key->name, cxt->hasoids) != NULL)
+ {
+ /*
+ * column will be a system column in the new table,
+ * so accept it. System columns can't ever be null,
+ * so no need to worry about PRIMARY/NOT NULL constraint.
+ */
+ found = true;
+ }
else if (cxt->inhRelnames)
{
/* try inherited tables */
@@ -2520,6 +2532,10 @@ transformAlterTableStmt(ParseState *pstate, AlterTableStmt *stmt)
cxt.relOid = GetSysCacheOid(RELNAME,
PointerGetDatum(stmt->relname),
0, 0, 0);
+ cxt.hasoids = SearchSysCacheExists(ATTNUM,
+ ObjectIdGetDatum(cxt.relOid),
+ Int16GetDatum(ObjectIdAttributeNumber),
+ 0, 0);
cxt.columns = NIL;
cxt.ckconstraints = NIL;
cxt.fkconstraints = NIL;
@@ -2548,6 +2564,10 @@ transformAlterTableStmt(ParseState *pstate, AlterTableStmt *stmt)
cxt.relOid = GetSysCacheOid(RELNAME,
PointerGetDatum(stmt->relname),
0, 0, 0);
+ cxt.hasoids = SearchSysCacheExists(ATTNUM,
+ ObjectIdGetDatum(cxt.relOid),
+ Int16GetDatum(ObjectIdAttributeNumber),
+ 0, 0);
cxt.columns = NIL;
cxt.ckconstraints = NIL;
cxt.fkconstraints = NIL;