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:
parent
505b5185fc
commit
9432b6dd64
@ -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))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user