* 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.225 2002/03/31 06:26:31 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.226 2002/04/02 06:30:34 tgl Exp $
*
*-------------------------------------------------------------------------
*/
#include "rewrite/rewriteManip.h"
#include "utils/builtins.h"
#include "utils/fmgroids.h"
+#include "utils/lsyscache.h"
#include "utils/relcache.h"
#include "utils/syscache.h"
#ifdef MULTIBYTE
if (is_serial)
{
char *sname;
+ char *snamespace;
char *qstring;
A_Const *snamenode;
FuncCall *funccallnode;
- CreateSeqStmt *sequence;
+ CreateSeqStmt *seqstmt;
+
+ /*
+ * Determine name and namespace to use for the sequence.
+ */
+ sname = makeObjectName(cxt->relation->relname, column->colname, "seq");
+ snamespace = get_namespace_name(RangeVarGetCreationNamespace(cxt->relation));
+
+ elog(NOTICE, "%s will create implicit sequence '%s' for SERIAL column '%s.%s'",
+ cxt->stmtType, sname, cxt->relation->relname, column->colname);
+
+ /*
+ * Build a CREATE SEQUENCE command to create the sequence object,
+ * and add it to the list of things to be done before this
+ * CREATE/ALTER TABLE.
+ */
+ seqstmt = makeNode(CreateSeqStmt);
+ seqstmt->sequence = makeRangeVar(snamespace, sname);
+ seqstmt->options = NIL;
+
+ cxt->blist = lappend(cxt->blist, seqstmt);
/*
* Create appropriate constraints for SERIAL. We do this in full,
* rather than shortcutting, so that we will detect any
* conflicting constraints the user wrote (like a different
* DEFAULT).
- */
- sname = makeObjectName((cxt->relation)->relname, column->colname, "seq");
-
- /*
+ *
* Create an expression tree representing the function call
* nextval('"sequencename"')
*/
- qstring = palloc(strlen(sname) + 2 + 1);
- sprintf(qstring, "\"%s\"", sname);
+ qstring = palloc(strlen(snamespace) + strlen(sname) + 5 + 1);
+ sprintf(qstring, "\"%s\".\"%s\"", snamespace, sname);
snamenode = makeNode(A_Const);
snamenode->val.type = T_String;
snamenode->val.val.str = qstring;
constraint = makeNode(Constraint);
constraint->contype = CONSTR_NOTNULL;
column->constraints = lappend(column->constraints, constraint);
-
- /*
- * Build a CREATE SEQUENCE command to create the sequence object,
- * and add it to the list of things to be done before this
- * CREATE/ALTER TABLE.
- */
- sequence = makeNode(CreateSeqStmt);
- sequence->sequence = copyObject(cxt->relation);
- sequence->sequence->relname = pstrdup(sname);
- sequence->options = NIL;
-
- elog(NOTICE, "%s will create implicit sequence '%s' for SERIAL column '%s.%s'",
- cxt->stmtType, sequence->sequence->relname, (cxt->relation)->relname, column->colname);
-
- cxt->blist = lappend(cxt->blist, sequence);
}
/* Process column constraints, if any... */