Re: [HACKERS] subselect and optimizer

From: Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us>
To: boersenspiel(at)vocalweb(dot)de (Boersenspielteam)
Cc: hackers(at)postgreSQL(dot)org
Subject: Re: [HACKERS] subselect and optimizer
Date: 1998-04-13 15:06:23
Message-ID: 199804131506.LAA17422@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

>
>
> > Here is the prune.c file from 6.2.1. Please try it and let me know if
> > it fixes the problem:
>
> Nope, doesn't even compile ...
>
> ---
>
> gcc -I../../../include -I../../../backend -I/usr/include/curses -O2
> -Wall -Wmissing-prototypes -I../.. -c prune.c -o prune.o
> prune.c:39: conflicting types for `prune_joinrels'
> ../../../include/optimizer/paths.h:95: previous declaration of
> `prune_joinrels' prune.c: In function `prune_rel_paths': prune.c:127:
> `WARN' undeclared (first use this function) prune.c:127: (Each
> undeclared identifier is reported only once prune.c:127: for each
> function it appears in.)

OK, please try this patch. It reverts us to 6.2.1 for this file only.
It may have to be cleaned up a little. Not sure. This is against the
current source tree, which is probably the same as 6.3.2 beta.

---------------------------------------------------------------------------

*** /pg/backend/optimizer/path/prune.c Thu Apr 2 10:18:46 1998
--- /root/prune.c Thu Apr 2 11:40:32 1998
***************
*** 7,13 ****
*
*
* IDENTIFICATION
! * $Header: /usr/local/cvsroot/pgsql/src/backend/optimizer/path/prune.c,v 1.13 1998/04/02 07:27:15 vadim Exp $
*
*-------------------------------------------------------------------------
*/
--- 7,13 ----
*
*
* IDENTIFICATION
! * $Header: /usr/local/cvsroot/pgsql/src/backend/optimizer/path/prune.c,v 1.6 1997/09/08 21:45:08 momjian Exp $
*
*-------------------------------------------------------------------------
*/
***************
*** 29,50 ****
/*
* prune-joinrels--
* Removes any redundant relation entries from a list of rel nodes
! * 'rel-list'. Obviosly, the first relation can't be a duplicate.
*
* Returns the resulting list.
*
*/
! void
prune_joinrels(List *rel_list)
{
! List *i;

! /*
! * rel_list can shorten while running as duplicate relations are
! * deleted
! */
! foreach(i, rel_list)
! lnext(i) = prune_joinrel((Rel *) lfirst(i), lnext(i));
}

/*
--- 29,51 ----
/*
* prune-joinrels--
* Removes any redundant relation entries from a list of rel nodes
! * 'rel-list'.
*
* Returns the resulting list.
*
*/
! List *
prune_joinrels(List *rel_list)
{
! List *temp_list = NIL;

! if (rel_list != NIL)
! {
! temp_list = lcons(lfirst(rel_list),
! prune_joinrels(prune_joinrel((Rel *) lfirst(rel_list),
! lnext(rel_list))));
! }
! return (temp_list);
}

/*
***************
*** 62,85 ****
prune_joinrel(Rel *rel, List *other_rels)
{
List *i = NIL;
! List *result = NIL;

foreach(i, other_rels)
{
! Rel *other_rel = (Rel *) lfirst(i);
!
if (same(rel->relids, other_rel->relids))
{
rel->pathlist = add_pathlist(rel,
rel->pathlist,
other_rel->pathlist);
}
else
{
! result = nconc(result, lcons(other_rel, NIL));
}
}
! return (result);
}

/*
--- 63,89 ----
prune_joinrel(Rel *rel, List *other_rels)
{
List *i = NIL;
! List *t_list = NIL;
! List *temp_node = NIL;
! Rel *other_rel = (Rel *) NULL;

foreach(i, other_rels)
{
! other_rel = (Rel *) lfirst(i);
if (same(rel->relids, other_rel->relids))
{
rel->pathlist = add_pathlist(rel,
rel->pathlist,
other_rel->pathlist);
+ t_list = nconc(t_list, NIL); /* XXX is this right ? */
}
else
{
! temp_node = lcons(other_rel, NIL);
! t_list = nconc(t_list, temp_node);
}
}
! return (t_list);
}

/*
***************
*** 120,126 ****
rel->size = compute_joinrel_size(cheapest);
}
else
! elog(ERROR, "non JoinPath called");
}
}

--- 124,130 ----
rel->size = compute_joinrel_size(cheapest);
}
else
! elog(WARN, "non JoinPath called");
}
}

***************
*** 135,141 ****
* Returns the cheapest path.
*
*/
! Path *
prune_rel_path(Rel *rel, Path *unorderedpath)
{
Path *cheapest = set_cheapest(rel, rel->pathlist);
--- 139,145 ----
* Returns the cheapest path.
*
*/
! Path *
prune_rel_path(Rel *rel, Path *unorderedpath)
{
Path *cheapest = set_cheapest(rel, rel->pathlist);
***************
*** 166,172 ****
*
* Returns one pruned rel node list
*/
! List *
merge_joinrels(List *rel_list1, List *rel_list2)
{
List *xrel = NIL;
--- 170,176 ----
*
* Returns one pruned rel node list
*/
! List *
merge_joinrels(List *rel_list1, List *rel_list2)
{
List *xrel = NIL;
***************
*** 192,226 ****
*
* Returns a new list of rel nodes
*/
! List *
prune_oldrels(List *old_rels)
{
Rel *rel;
List *joininfo_list,
! *xjoininfo,
! *i,
! *temp_list = NIL;

! foreach(i, old_rels)
! {
! rel = (Rel *) lfirst(i);
! joininfo_list = rel->joininfo;

! if (joininfo_list == NIL)
! temp_list = lcons(rel, temp_list);
! else
! {
! foreach(xjoininfo, joininfo_list)
! {
! JInfo *joininfo = (JInfo *) lfirst(xjoininfo);

! if (!joininfo->inactive)
! {
! temp_list = lcons(rel, temp_list);
! break;
! }
! }
! }
}
! return temp_list;
}
--- 196,222 ----
*
* Returns a new list of rel nodes
*/
! List *
prune_oldrels(List *old_rels)
{
Rel *rel;
List *joininfo_list,
! *xjoininfo;

! if (old_rels == NIL)
! return (NIL);

! rel = (Rel *) lfirst(old_rels);
! joininfo_list = rel->joininfo;
! if (joininfo_list == NIL)
! return (lcons(rel, prune_oldrels(lnext(old_rels))));

! foreach(xjoininfo, joininfo_list)
! {
! JInfo *joininfo = (JInfo *) lfirst(xjoininfo);
!
! if (!joininfo->inactive)
! return (lcons(rel, prune_oldrels(lnext(old_rels))));
}
! return (prune_oldrels(lnext(old_rels)));
}

--
Bruce Momjian | 830 Blythe Avenue
maillist(at)candle(dot)pha(dot)pa(dot)us | Drexel Hill, Pennsylvania 19026
+ If your life is a hard drive, | (610) 353-9879(w)
+ Christ can be your backup. | (610) 853-3000(h)

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Boersenspielteam 1998-04-13 15:32:31 Re: [HACKERS] subselect and optimizer
Previous Message The Hermit Hacker 1998-04-13 15:05:53 Re: [HACKERS] Re: [INTERFACES] New pg_type for large object