From b806b3d3f8341d735a5d7c89ae58c42095f81620 Mon Sep 17 00:00:00 2001 From: "Thomas G. Lockhart" Date: Thu, 3 Sep 1998 14:21:06 +0000 Subject: [PATCH] Allow insert statements to have every column supplied by a DEFAULT clause. Enables INSERT INTO TABLE DEFAULT VALUES... --- src/backend/parser/analyze.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index f77cdfc7551..2d2ab420145 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.85 1998/09/01 04:30:15 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.86 1998/09/03 14:21:06 thomas Exp $ * *------------------------------------------------------------------------- */ @@ -269,8 +269,8 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) int ndef = pstate->p_target_relation->rd_att->constr->num_defval; /* - * if stmt->cols == NIL then makeTargetNames returns list of all - * attrs: have to shorter icolumns list... + * if stmt->cols == NIL then makeTargetNames returns list of all attrs. + * May have to shorten icolumns list... */ if (stmt->cols == NIL) { @@ -279,11 +279,26 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) foreach(extrl, icolumns) { + /* + * decrements first, so if we started with zero items + * it will now be negative + */ if (--i <= 0) break; } - freeList(lnext(extrl)); - lnext(extrl) = NIL; + /* + * this an index into the targetList, + * so make sure we had one to start... + */ + if (i >= 0) + { + freeList(lnext(extrl)); + lnext(extrl) = NIL; + } + else + { + icolumns = NIL; + } } while (ndef-- > 0) @@ -295,7 +310,7 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) foreach(tl, icolumns) { id = (Ident *) lfirst(tl); - if (!namestrcmp(&(att[defval[ndef].adnum - 1]->attname), id->name)) + if (namestrcmp(&(att[defval[ndef].adnum - 1]->attname), id->name) == 0) break; } if (tl != NIL) /* something given for this attr */