aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_target.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>1999-05-23 21:42:09 +0000
committerTom Lane <tgl@sss.pgh.pa.us>1999-05-23 21:42:09 +0000
commit9432b6dd64b521276dc8e1fd37bc66853c93073d (patch)
tree87bb33cbf2af904e8b479835fb59999e7706bb2a /src/backend/parser/parse_target.c
parent505b5185fc37a53fbdcd27e26f163fb0c532d136 (diff)
downloadpostgresql-9432b6dd64b521276dc8e1fd37bc66853c93073d.tar.gz
postgresql-9432b6dd64b521276dc8e1fd37bc66853c93073d.zip
Do not assign output columns to junk attributes created from
GROUP BY or ORDER BY expressions in INSERT ... SELECT.
Diffstat (limited to 'src/backend/parser/parse_target.c')
-rw-r--r--src/backend/parser/parse_target.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c
index 1294326f3d4..2dfe2ece57d 100644
--- a/src/backend/parser/parse_target.c
+++ b/src/backend/parser/parse_target.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.38 1999/05/22 04:12:28 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.39 1999/05/23 21:42:09 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -32,16 +32,12 @@
static List *ExpandAllTables(ParseState *pstate);
-char *FigureColname(Node *expr, Node *resval);
-
+static char *FigureColname(Node *expr, Node *resval);
static Node *SizeTargetExpr(ParseState *pstate,
Node *expr,
Oid attrtype,
int32 attrtypmod);
-static TargetEntry *
-MakeTargetEntryCase(ParseState *pstate,
- ResTarget *res);
/* MakeTargetEntryIdent()
* Transforms an Ident Node to a Target Entry
@@ -66,8 +62,13 @@ MakeTargetEntryIdent(ParseState *pstate,
Oid attrtype_target;
TargetEntry *tent = makeNode(TargetEntry);
- if (pstate->p_is_insert)
+ if (pstate->p_is_insert && !resjunk)
{
+ /* Assign column name of destination column to the new TLE.
+ * XXX this is probably WRONG in INSERT ... SELECT case,
+ * since handling of GROUP BY and so forth probably should use
+ * the source table's names not the destination's names.
+ */
if (pstate->p_insert_columns != NIL)
{
Ident *id = lfirst(pstate->p_insert_columns);
@@ -79,7 +80,7 @@ MakeTargetEntryIdent(ParseState *pstate,
elog(ERROR, "INSERT has more expressions than target columns");
}
- if (pstate->p_is_insert || pstate->p_is_update)
+ if ((pstate->p_is_insert || pstate->p_is_update) && !resjunk)
{
Oid attrtype_id;
int resdomno_id,
@@ -208,7 +209,7 @@ MakeTargetEntryExpr(ParseState *pstate,
type_mod = -1;
/* Process target columns that will be receiving results */
- if (pstate->p_is_insert || pstate->p_is_update)
+ if ((pstate->p_is_insert || pstate->p_is_update) && !resjunk)
{
/*
@@ -870,7 +871,7 @@ ExpandAllTables(ParseState *pstate)
* list, we have to guess.
*
*/
-char *
+static char *
FigureColname(Node *expr, Node *resval)
{
switch (nodeTag(expr))