From 4756ff3dca903dfc525d1c27fd00fad8ca328188 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 25 Feb 2007 17:44:01 +0000
Subject: [PATCH] Put back copyObject() call I removed in a fit of brain fade. 
 This one is still needed despite cleanups in setrefs.c, because the point is
 to let the inserted Result node compute a different tlist than its input node
 does.  Per example from Jeremy Drake.

---
 src/backend/optimizer/plan/createplan.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index dbfa2c4e58e..6c4bde14213 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/optimizer/plan/createplan.c,v 1.226 2007/02/22 22:00:24 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/optimizer/plan/createplan.c,v 1.227 2007/02/25 17:44:01 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2740,7 +2740,11 @@ make_sort_from_pathkeys(PlannerInfo *root, Plan *lefttree, List *pathkeys)
 			 * Do we need to insert a Result node?
 			 */
 			if (!is_projection_capable_plan(lefttree))
+			{
+				/* copy needed so we don't modify input's tlist below */
+				tlist = copyObject(tlist);
 				lefttree = (Plan *) make_result(root, tlist, NULL, lefttree);
+			}
 
 			/*
 			 * Add resjunk entry to input's tlist
-- 
GitLab