From 5d1af6aee3c78bb01d78e0a150c9617b1ff23500 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed, 7 Apr 2004 17:42:28 +0000
Subject: [PATCH] build_subquery_pathkeys() was examining wrong copy of
 subquery target list, causing it to fail to recognize the output ordering of
 subqueries that contain set operations (UNION/INTERSECT/EXPECT).  Per example
 from Karel Zak.

---
 src/backend/optimizer/path/pathkeys.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/backend/optimizer/path/pathkeys.c b/src/backend/optimizer/path/pathkeys.c
index d6d83f7c761..65eb5cb8a65 100644
--- a/src/backend/optimizer/path/pathkeys.c
+++ b/src/backend/optimizer/path/pathkeys.c
@@ -11,7 +11,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/optimizer/path/pathkeys.c,v 1.55 2003/12/03 17:45:07 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/optimizer/path/pathkeys.c,v 1.56 2004/04/07 17:42:28 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -757,6 +757,7 @@ build_subquery_pathkeys(Query *root, RelOptInfo *rel, Query *subquery)
 	List	   *retval = NIL;
 	int			retvallen = 0;
 	int			outer_query_keys = length(root->query_pathkeys);
+	List	   *sub_tlist = rel->subplan->targetlist;
 	List	   *l;
 
 	foreach(l, subquery->query_pathkeys)
@@ -789,7 +790,7 @@ build_subquery_pathkeys(Query *root, RelOptInfo *rel, Query *subquery)
 			Node	   *sub_key = sub_item->key;
 			List	   *k;
 
-			foreach(k, subquery->targetList)
+			foreach(k, sub_tlist)
 			{
 				TargetEntry *tle = (TargetEntry *) lfirst(k);
 
-- 
GitLab