summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas G. Lockhart1998-09-03 14:21:06 +0000
committerThomas G. Lockhart1998-09-03 14:21:06 +0000
commitb806b3d3f8341d735a5d7c89ae58c42095f81620 (patch)
tree98b86d3f8fa453724d8db4a390cb1ce2ad5f2eb0
parentdfab686ce852da0e8cc9ad9fefd961d426ceece9 (diff)
Allow insert statements to have every column
supplied by a DEFAULT clause. Enables INSERT INTO TABLE DEFAULT VALUES...
-rw-r--r--src/backend/parser/analyze.c27
1 files 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 */