Conditionally execute Junk filter only when ORDER BY of columns
authorBruce Momjian
Sun, 19 Jul 1998 03:46:29 +0000 (03:46 +0000)
committerBruce Momjian
Sun, 19 Jul 1998 03:46:29 +0000 (03:46 +0000)
not in target list.

src/backend/executor/execMain.c

index 66460913cf3297a6f414f0f9773f4b6b54fac4c9..78fe6b22a43edde6941402aaa65eb2ce65a36d5d 100644 (file)
@@ -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 [email protected]  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
     * ----------------