Re: [HACKERS] copyObject() ? again - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: [HACKERS] copyObject() ? again
Date
Msg-id 199907070203.WAA29819@candle.pha.pa.us
Whole thread Raw
In response to Re: [HACKERS] copyObject() ? again  (Vadim Mikheev <vadim@krs.ru>)
List pgsql-hackers
Just sending this over to you in case it is helpful in the future.

> Tom Lane wrote:
> > 
> > More generally, however, I think that the very existence of the subPlan
> > list is a bug.  It violates the notion that "pointer equality shouldn't
> > matter" because the subPlan list *must* contain pointers to the actual
> > member objects of a plan node's other substructure.
> > 
> > Moreover the subPlan list isn't even buying us much --- it wouldn't be
> > that expensive to scan the substructure directly for plan-type nodes
> > when necessary, exactly as SS_pull_subplan does.  Arguably this would
> > take less time than is expended on memory allocation to build the
> > explicit subPlan list.  So I suggest getting rid of the subPlan list
> > entirely, rather than hacking on copyfuncs.
> 
> First, I apologize for any inconveniences in my implementation
> of subselect. I agreed that current handling of subPlan lists
> is bad, but parent plan need in this list for some initializations
> and SUBPLAN_EXPR expressions inside parent plan also need in 
> corresponding subPlan nodes (to execute them).
> 
> Well, this could be good solution:
> 
> 1. Implement TopPlan node (upmost plan, we told about this and
>    seems that Jan wanted implement it).
> 2. Construct list of _all_ subPlan inside planner and
>    put this list into TopPlan node.
> 3. Put into Plan->subPlan list of _indices_ of subPlans used
>    in this Plan (indices in TopPlan->subPlan list).
> 4. Use indices in SUBPLAN_EXPR, istead of subPlan pointers.
> 5. Add to EState and ExprContext pointer to TopPlan->subPlan
>    list (to enable index --> node conversion in
>    ExecSubPlan() & ExecInitSubPlan()).
>    
> Unfortunately, I missed this solution year ago -:(
> And more of that, I have no time to implement this now, sorry.
> 
> > Plans also have an "initPlan" list that seems to have the same kind of
> > problem.  I don't really understand the difference between initPlans
> 
> No problems here. As you see this list is just copied in copyfuncs
> and this is ok.
> 
> > and subPlans --- plannodes.h says
> >     List       *initPlan;        /* Init Plan nodes (un-correlated expr
> >                                  * subselects) */
> >     List       *subPlan;        /* Other SubPlan nodes */
> > which doesn't convey a whole lot to my mind.  Does anyone understand
> > why this distinction is made?  Is it really necessary?
> 
> Uncorrelated expression subqueries are processed differently
> from all other subqueries.
> 
> Vadim
> 
> 


--  Bruce Momjian                        |  http://www.op.net/~candle maillist@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] Oops, I seem to have changed UNION's behavior
Next
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] RE: [GENERAL] Transaction logging