aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/executor/execMain.c40
1 files 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
* ----------------