Re: Optimizer problem with subselect.c? - Mailing list pgsql-bugs

From Tom Lane
Subject Re: Optimizer problem with subselect.c?
Date
Msg-id 18414.1078076455@sss.pgh.pa.us
Whole thread Raw
In response to Optimizer problem with subselect.c?  (Daniel O'Neill <daniel@fatport.com>)
List pgsql-bugs
"Daniel O'Neill" <daniel@fatport.com> writes:
> [ complex test case ]

Got it.  The patch against 7.4.* is attached and will appear in 7.4.2.

            regards, tom lane

Index: createplan.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/optimizer/plan/createplan.c,v
retrieving revision 1.157.2.2
diff -c -r1.157.2.2 createplan.c
*** createplan.c    18 Jan 2004 00:31:53 -0000    1.157.2.2
--- createplan.c    29 Feb 2004 17:29:48 -0000
***************
*** 101,107 ****
  static Sort *make_sort(Query *root, List *tlist, Plan *lefttree, int numCols,
            AttrNumber *sortColIdx, Oid *sortOperators);
  static Sort *make_sort_from_pathkeys(Query *root, Plan *lefttree,
!                         Relids relids, List *pathkeys);


  /*
--- 101,107 ----
  static Sort *make_sort(Query *root, List *tlist, Plan *lefttree, int numCols,
            AttrNumber *sortColIdx, Oid *sortOperators);
  static Sort *make_sort_from_pathkeys(Query *root, Plan *lefttree,
!                         List *pathkeys);


  /*
***************
*** 1015,1021 ****
          outer_plan = (Plan *)
              make_sort_from_pathkeys(root,
                                      outer_plan,
-                           best_path->jpath.outerjoinpath->parent->relids,
                                      best_path->outersortkeys);
      }

--- 1015,1020 ----
***************
*** 1025,1031 ****
          inner_plan = (Plan *)
              make_sort_from_pathkeys(root,
                                      inner_plan,
-                           best_path->jpath.innerjoinpath->parent->relids,
                                      best_path->innersortkeys);
      }

--- 1024,1029 ----
***************
*** 1793,1799 ****
   *      Create sort plan to sort according to given pathkeys
   *
   *      'lefttree' is the node which yields input tuples
-  *      'relids' is the set of relids represented by the input node
   *      'pathkeys' is the list of pathkeys by which the result is to be sorted
   *
   * We must convert the pathkey information into arrays of sort key column
--- 1791,1796 ----
***************
*** 1806,1813 ****
   * adding a Result node just to do the projection.
   */
  static Sort *
! make_sort_from_pathkeys(Query *root, Plan *lefttree,
!                         Relids relids, List *pathkeys)
  {
      List       *tlist = lefttree->targetlist;
      List       *sort_tlist;
--- 1803,1809 ----
   * adding a Result node just to do the projection.
   */
  static Sort *
! make_sort_from_pathkeys(Query *root, Plan *lefttree, List *pathkeys)
  {
      List       *tlist = lefttree->targetlist;
      List       *sort_tlist;
***************
*** 1852,1863 ****
          }
          if (!resdom)
          {
!             /* No matching Var; look for an expression */
              foreach(j, keysublist)
              {
                  pathkey = lfirst(j);
!                 if (bms_is_subset(pull_varnos(pathkey->key), relids))
!                     break;
              }
              if (!j)
                  elog(ERROR, "could not find pathkey item to sort");
--- 1848,1869 ----
          }
          if (!resdom)
          {
!             /* No matching Var; look for a computable expression */
              foreach(j, keysublist)
              {
+                 List   *exprvars;
+                 List   *k;
+
                  pathkey = lfirst(j);
!                 exprvars = pull_var_clause(pathkey->key, false);
!                 foreach(k, exprvars)
!                 {
!                     if (!tlist_member(lfirst(k), tlist))
!                         break;
!                 }
!                 freeList(exprvars);
!                 if (!k)
!                     break;        /* found usable expression */
              }
              if (!j)
                  elog(ERROR, "could not find pathkey item to sort");

pgsql-bugs by date:

Previous
From: Michael Meskes
Date:
Subject: Re: ecpg multidimensional arrays
Next
From: margitsw@t-online.de (Margit Schubert-While)
Date:
Subject: Re: ecpg multidimensional arrays