From 5b4ca671470e5f74f37e52a6744eb13d5db78e6f Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Sun, 19 Jul 1998 03:46:29 +0000
Subject: [PATCH] Conditionally execute Junk filter only when ORDER BY of
 columns not in target list.

---
 src/backend/executor/execMain.c | 40 ++++++++++++++++++++++++---------
 1 file changed, 30 insertions(+), 10 deletions(-)

diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index 66460913cf3..78fe6b22a43 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -26,7 +26,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.48 1998/06/15 19:28:19 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.49 1998/07/19 03:46:29 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -522,18 +522,38 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate)
 	 *        SELECT added by daveh@insightdist.com  5/20/98 to allow 
 	 *        ORDER/GROUP BY have an identifier missing from the target.
 	 */
-	if (operation == CMD_UPDATE || operation == CMD_DELETE ||
-		operation == CMD_INSERT || operation == CMD_SELECT)
 	{
-		JunkFilter *j = (JunkFilter *) ExecInitJunkFilter(targetList);
-		estate->es_junkFilter = j;
-
+		bool	junk_filter_needed = false;
+		List	*tlist;
+		
 		if (operation == CMD_SELECT)
-			tupType = j->jf_cleanTupType;
-	}
-	else
-		estate->es_junkFilter = NULL;
+		{
+			foreach(tlist, targetList)
+			{
+				TargetEntry	*tle = lfirst(tlist);
+	
+				if (tle->resdom->resjunk)
+				{
+					junk_filter_needed = true;
+					break;
+				}
+			}
+		}
+
+		if (operation == CMD_UPDATE || operation == CMD_DELETE ||
+			operation == CMD_INSERT ||
+			(operation == CMD_SELECT && junk_filter_needed))
+		{
+			JunkFilter *j = (JunkFilter *) ExecInitJunkFilter(targetList);
+			estate->es_junkFilter = j;
 
+			if (operation == CMD_SELECT)
+				tupType = j->jf_cleanTupType;
+		}
+		else
+			estate->es_junkFilter = NULL;
+	}
+	
 	/* ----------------
 	 *	initialize the "into" relation
 	 * ----------------
-- 
GitLab