diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/parser/analyze.c | 40 | ||||
-rw-r--r-- | src/backend/parser/gram.y | 28 |
2 files changed, 36 insertions, 32 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index c192b4ce7a1..a874c24f5e1 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: analyze.c,v 1.140 2000/03/14 23:06:30 thomas Exp $ + * $Id: analyze.c,v 1.141 2000/03/24 23:34:19 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -570,7 +570,7 @@ CreateIndexName(char *table_name, char *column_name, char *label, List *indices) foreach(ilist, indices) { IndexStmt *index = lfirst(ilist); - if (strcasecmp(iname, index->idxname) == 0) + if (strcmp(iname, index->idxname) == 0) break; } /* ran through entire list? then no name conflict found so done */ @@ -679,7 +679,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) constraint->name = sname; constraint->raw_expr = (Node *) funccallnode; constraint->cooked_expr = NULL; - constraint->keys = NULL; + constraint->keys = NIL; column->constraints = lappend(column->constraints, constraint); @@ -766,7 +766,11 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) if (constraint->name == NULL) constraint->name = makeObjectName(stmt->relname, NULL, "pkey"); if (constraint->keys == NIL) - constraint->keys = lappend(constraint->keys, column); + { + key = makeNode(Ident); + key->name = pstrdup(column->colname); + constraint->keys = lcons(key, NIL); + } dlist = lappend(dlist, constraint); break; @@ -774,7 +778,11 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) if (constraint->name == NULL) constraint->name = makeObjectName(stmt->relname, column->colname, "key"); if (constraint->keys == NIL) - constraint->keys = lappend(constraint->keys, column); + { + key = makeNode(Ident); + key->name = pstrdup(column->colname); + constraint->keys = lcons(key, NIL); + } dlist = lappend(dlist, constraint); break; @@ -890,23 +898,21 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) index->withClause = NIL; index->whereClause = NULL; - keys = constraint->keys; - while (keys != NIL) + foreach(keys, constraint->keys) { - key = lfirst(keys); - columns = stmt->tableElts; + key = (Ident *) lfirst(keys); + Assert(IsA(key, Ident)); column = NULL; - while (columns != NIL) + foreach(columns, stmt->tableElts) { column = lfirst(columns); - if (strcasecmp(column->colname, key->name) == 0) + Assert(IsA(column, ColumnDef)); + if (strcmp(column->colname, key->name) == 0) break; - else - column = NULL; - columns = lnext(columns); } - if (column == NULL) - elog(ERROR, "CREATE TABLE column '%s' in key does not exist", key->name); + if (columns == NIL) /* fell off end of list? */ + elog(ERROR, "CREATE TABLE: column '%s' named in key does not exist", + key->name); if (constraint->contype == CONSTR_PRIMARY) column->is_not_null = TRUE; @@ -919,8 +925,6 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) if (index->idxname == NULL) index->idxname = CreateIndexName(stmt->relname, iparam->name, "key", ilist); - - keys = lnext(keys); } if (index->idxname == NULL) /* should not happen */ diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 4277f9c7366..3c56dba04f4 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.162 2000/03/21 06:00:40 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.163 2000/03/24 23:34:19 tgl Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -3969,7 +3969,7 @@ Character: character '(' Iconst ')' character: CHARACTER opt_varying opt_charset { char *type, *c; - if (($3 == NULL) || (strcasecmp($3, "sql_text") == 0)) { + if (($3 == NULL) || (strcmp($3, "sql_text") == 0)) { if ($2) type = xlateSqlType("varchar"); else type = xlateSqlType("bpchar"); } else { @@ -5544,11 +5544,11 @@ mapTargetColumns(List *src, List *dst) static char * xlateSqlFunc(char *name) { - if (!strcasecmp(name,"character_length")) + if (!strcmp(name,"character_length")) return "char_length"; - else if (!strcasecmp(name,"datetime")) + else if (!strcmp(name,"datetime")) return "timestamp"; - else if (!strcasecmp(name,"timespan")) + else if (!strcmp(name,"timespan")) return "interval"; else return name; @@ -5564,21 +5564,21 @@ xlateSqlFunc(char *name) static char * xlateSqlType(char *name) { - if (!strcasecmp(name,"int") - || !strcasecmp(name,"integer")) + if (!strcmp(name,"int") + || !strcmp(name,"integer")) return "int4"; - else if (!strcasecmp(name, "smallint")) + else if (!strcmp(name, "smallint")) return "int2"; - else if (!strcasecmp(name, "real") - || !strcasecmp(name, "float")) + else if (!strcmp(name, "real") + || !strcmp(name, "float")) return "float8"; - else if (!strcasecmp(name, "decimal")) + else if (!strcmp(name, "decimal")) return "numeric"; - else if (!strcasecmp(name, "datetime")) + else if (!strcmp(name, "datetime")) return "timestamp"; - else if (!strcasecmp(name, "timespan")) + else if (!strcmp(name, "timespan")) return "interval"; - else if (!strcasecmp(name, "boolean")) + else if (!strcmp(name, "boolean")) return "bool"; else return name; |