1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-10 09:21:54 +03:00

Do not assign output columns to junk attributes created from

GROUP BY or ORDER BY expressions in INSERT ... SELECT.
This commit is contained in:
Tom Lane 1999-05-23 21:42:09 +00:00
parent 505b5185fc
commit 9432b6dd64

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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); static List *ExpandAllTables(ParseState *pstate);
char *FigureColname(Node *expr, Node *resval); static char *FigureColname(Node *expr, Node *resval);
static Node *SizeTargetExpr(ParseState *pstate, static Node *SizeTargetExpr(ParseState *pstate,
Node *expr, Node *expr,
Oid attrtype, Oid attrtype,
int32 attrtypmod); int32 attrtypmod);
static TargetEntry *
MakeTargetEntryCase(ParseState *pstate,
ResTarget *res);
/* MakeTargetEntryIdent() /* MakeTargetEntryIdent()
* Transforms an Ident Node to a Target Entry * Transforms an Ident Node to a Target Entry
@ -66,8 +62,13 @@ MakeTargetEntryIdent(ParseState *pstate,
Oid attrtype_target; Oid attrtype_target;
TargetEntry *tent = makeNode(TargetEntry); 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) if (pstate->p_insert_columns != NIL)
{ {
Ident *id = lfirst(pstate->p_insert_columns); Ident *id = lfirst(pstate->p_insert_columns);
@ -79,7 +80,7 @@ MakeTargetEntryIdent(ParseState *pstate,
elog(ERROR, "INSERT has more expressions than target columns"); 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; Oid attrtype_id;
int resdomno_id, int resdomno_id,
@ -208,7 +209,7 @@ MakeTargetEntryExpr(ParseState *pstate,
type_mod = -1; type_mod = -1;
/* Process target columns that will be receiving results */ /* 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. * list, we have to guess.
* *
*/ */
char * static char *
FigureColname(Node *expr, Node *resval) FigureColname(Node *expr, Node *resval)
{ {
switch (nodeTag(expr)) switch (nodeTag(expr))