aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas G. Lockhart <lockhart@fourpalms.org>1999-05-13 15:01:32 +0000
committerThomas G. Lockhart <lockhart@fourpalms.org>1999-05-13 15:01:32 +0000
commit9bbc1657a14e3efacab8a7a930db7aec150c0665 (patch)
tree2b8ffd741256c0da6857f98176f200a3611c06fa
parent81c83db3bbc7133b28b8d456a114e4b5c274843a (diff)
downloadpostgresql-9bbc1657a14e3efacab8a7a930db7aec150c0665.tar.gz
postgresql-9bbc1657a14e3efacab8a7a930db7aec150c0665.zip
Add double quotes around the sequence name generated to support the
SERIAL data type DEFAULT clause. This fixes a problem finding the sequence name when mixed case table names are involved.
-rw-r--r--src/backend/parser/analyze.c63
1 files changed, 18 insertions, 45 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 98c57488684..ab05411b3c5 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -5,7 +5,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: analyze.c,v 1.103 1999/05/13 07:28:34 tgl Exp $
+ * $Id: analyze.c,v 1.104 1999/05/13 15:01:32 thomas Exp $
*
*-------------------------------------------------------------------------
*/
@@ -546,39 +546,22 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
constraint->contype = CONSTR_DEFAULT;
constraint->name = sname;
cstring = palloc(9 + strlen(constraint->name) + 2 + 1);
- strcpy(cstring, "nextval('");
+ strcpy(cstring, "nextval('\"");
strcat(cstring, constraint->name);
- strcat(cstring, "')");
+ strcat(cstring, "\"')");
constraint->def = cstring;
constraint->keys = NULL;
-#if 0
- /* The parser only allows PRIMARY KEY as a constraint for the SERIAL type.
- * So, if there is a constraint of any kind, assume it is that.
- * If PRIMARY KEY is specified, then don't need to gin up a UNIQUE constraint
- * since that will be covered already.
- * - thomas 1998-09-15
- */
- if (column->constraints != NIL)
- {
- column->constraints = lappend(column->constraints, constraint);
- }
- else
- {
-#endif
- column->constraints = lappend(column->constraints, constraint);
+ column->constraints = lappend(column->constraints, constraint);
- constraint = makeNode(Constraint);
- constraint->contype = CONSTR_UNIQUE;
- constraint->name = makeTableName(stmt->relname, column->colname, "key", NULL);
- if (constraint->name == NULL)
- elog(ERROR, "CREATE TABLE/SERIAL implicit index name must be less than %d characters"
- "\n\tSum of lengths of '%s' and '%s' must be less than %d",
- NAMEDATALEN, stmt->relname, column->colname, (NAMEDATALEN-5));
- column->constraints = lappend(column->constraints, constraint);
-#if 0
- }
-#endif
+ constraint = makeNode(Constraint);
+ constraint->contype = CONSTR_UNIQUE;
+ constraint->name = makeTableName(stmt->relname, column->colname, "key", NULL);
+ if (constraint->name == NULL)
+ elog(ERROR, "CREATE TABLE/SERIAL implicit index name must be less than %d characters"
+ "\n\tSum of lengths of '%s' and '%s' must be less than %d",
+ NAMEDATALEN, stmt->relname, column->colname, (NAMEDATALEN-5));
+ column->constraints = lappend(column->constraints, constraint);
sequence = makeNode(CreateSeqStmt);
sequence->seqname = pstrdup(sname);
@@ -604,21 +587,21 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
*/
if (column->is_not_null)
elog(ERROR, "CREATE TABLE/(NOT) NULL conflicting declaration"
- " for %s.%s", stmt->relname, column->colname);
+ " for '%s.%s'", stmt->relname, column->colname);
column->is_not_null = FALSE;
break;
case CONSTR_NOTNULL:
if (column->is_not_null)
elog(ERROR, "CREATE TABLE/NOT NULL already specified"
- " for %s.%s", stmt->relname, column->colname);
+ " for '%s.%s'", stmt->relname, column->colname);
column->is_not_null = TRUE;
break;
case CONSTR_DEFAULT:
if (column->defval != NULL)
elog(ERROR, "CREATE TABLE/DEFAULT multiple values specified"
- " for %s.%s", stmt->relname, column->colname);
+ " for '%s.%s'", stmt->relname, column->colname);
column->defval = constraint->def;
break;
@@ -680,10 +663,6 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
break;
case CONSTR_UNIQUE:
-#ifdef NOT_USED
- if (constraint->name == NULL)
- constraint->name = makeTableName(stmt->relname, "key", NULL);
-#endif
dlist = lappend(dlist, constraint);
break;
@@ -735,7 +714,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
{
if (pkey != NULL)
elog(ERROR, "CREATE TABLE/PRIMARY KEY multiple primary keys"
- " for table %s are not legal", stmt->relname);
+ " for table '%s' are not allowed", stmt->relname);
pkey = (IndexStmt *) index;
}
@@ -796,14 +775,8 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
}
if (index->idxname == NULL)
- elog(ERROR, "CREATE TABLE unable to construct implicit index for table %s"
+ elog(ERROR, "CREATE TABLE unable to construct implicit index for table '%s'"
"; name too long", stmt->relname);
-#if 0
- else
- elog(NOTICE, "CREATE TABLE/%s will create implicit index '%s' for table '%s'",
- ((constraint->contype == CONSTR_PRIMARY) ? "PRIMARY KEY" : "UNIQUE"),
- index->idxname, stmt->relname);
-#endif
ilist = lappend(ilist, index);
dlist = lnext(dlist);
@@ -855,7 +828,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
extras_after = ilist;
return q;
-}
+} /* transformCreateStmt() */
/*
* transformIndexStmt -