1414 *
1515 *
1616 * IDENTIFICATION
17- * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.103 2003/08/04 02:40:01 momjian Exp $
17+ * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.104 2003/08/11 23:04:49 tgl Exp $
1818 *
1919 *-------------------------------------------------------------------------
2020 */
@@ -64,7 +64,7 @@ static bool tlist_same_datatypes(List *tlist, List *colTypes, bool junkOK);
6464static Node * adjust_inherited_attrs_mutator (Node * node ,
6565adjust_inherited_attrs_context * context );
6666static Relids adjust_relid_set (Relids relids ,Index oldrelid ,Index newrelid );
67- static List * adjust_inherited_tlist (List * tlist ,Oid new_relid );
67+ static List * adjust_inherited_tlist (List * tlist ,Oid old_relid , Oid new_relid );
6868
6969
7070/*
@@ -787,6 +787,7 @@ adjust_inherited_attrs(Node *node,
787787if (newnode -> commandType == CMD_UPDATE )
788788newnode -> targetList =
789789adjust_inherited_tlist (newnode -> targetList ,
790+ old_relid ,
790791new_relid );
791792}
792793return (Node * )newnode ;
@@ -812,9 +813,10 @@ adjust_inherited_attrs_mutator(Node *node,
812813var -> varnoold = context -> new_rt_index ;
813814if (var -> varattno > 0 )
814815{
815- char * attname = get_attname (context -> old_relid ,
816- var -> varattno );
816+ char * attname ;
817817
818+ attname = get_relid_attribute_name (context -> old_relid ,
819+ var -> varattno );
818820var -> varattno = get_attnum (context -> new_relid ,attname );
819821if (var -> varattno == InvalidAttrNumber )
820822elog (ERROR ,"attribute \"%s\" of relation \"%s\" does not exist" ,
@@ -976,7 +978,7 @@ adjust_relid_set(Relids relids, Index oldrelid, Index newrelid)
976978 * Note that this is not needed for INSERT because INSERT isn't inheritable.
977979 */
978980static List *
979- adjust_inherited_tlist (List * tlist ,Oid new_relid )
981+ adjust_inherited_tlist (List * tlist ,Oid old_relid , Oid new_relid )
980982{
981983bool changed_it = false;
982984List * tl ;
@@ -989,21 +991,26 @@ adjust_inherited_tlist(List *tlist, Oid new_relid)
989991{
990992TargetEntry * tle = (TargetEntry * )lfirst (tl );
991993Resdom * resdom = tle -> resdom ;
994+ char * attname ;
992995
993996if (resdom -> resjunk )
994997continue ;/* ignore junk items */
995998
996- attrno = get_attnum (new_relid ,resdom -> resname );
999+ attname = get_relid_attribute_name (old_relid ,resdom -> resno );
1000+ attrno = get_attnum (new_relid ,attname );
9971001if (attrno == InvalidAttrNumber )
9981002elog (ERROR ,"attribute \"%s\" of relation \"%s\" does not exist" ,
999- resdom -> resname ,get_rel_name (new_relid ));
1003+ attname ,get_rel_name (new_relid ));
10001004if (resdom -> resno != attrno )
10011005{
10021006resdom = (Resdom * )copyObject ((Node * )resdom );
10031007resdom -> resno = attrno ;
1008+ resdom -> resname = attname ;
10041009tle -> resdom = resdom ;
10051010changed_it = true;
10061011}
1012+ else
1013+ pfree (attname );
10071014}
10081015
10091016/*