OSDN Git Service

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

src/backend/executor/execMain.c

index 6646091..78fe6b2 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 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
         * ----------------