Add double quotes around the sequence name generated to support the
authorThomas G. Lockhart
Thu, 13 May 1999 15:01:32 +0000 (15:01 +0000)
committerThomas G. Lockhart
Thu, 13 May 1999 15:01:32 +0000 (15:01 +0000)
 SERIAL data type DEFAULT clause.
This fixes a problem finding the sequence name when mixed case table names
 are involved.

src/backend/parser/analyze.c

index 98c5748868432d17fc231a8569940be2e843430f..ab05411b3c5c67545fe0c721cc9b0d8c301bacb2 100644 (file)
@@ -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 -