Is regression clean?

Have you looked at how the member is used using some code browsing tool like
cscope by examining it's every occurrence? PG uses simulated run time
polymorphism a lot, so any Node should examined carefully from that angle
too. Even after all of that if you think that it's not being used, you can
submit a patch to community removing that member. Somebody from community
reviewers will review and commit the patch if they find it correct and
useful.

Read http://wiki.postgresql.org/wiki/Submitting_a_Patch before submitting
the patch.

On Fri, Apr 29, 2011 at 3:22 PM, Vaibhav Kaushal <
vaibhavkaushal...@gmail.com> wrote:

> I tried all aggregates - min,max,sum,count and avg. all are working. What
> do you suggest now?
>
>
> On Fri, Apr 29, 2011 at 11:30 AM, Ashutosh Bapat <
> ashutosh.ba...@enterprisedb.com> wrote:
>
>>
>>
>> On Thu, Apr 28, 2011 at 4:21 PM, Vaibhav Kaushal <
>> vaibhavkaushal...@gmail.com> wrote:
>>
>>> Thanks a lot. I was browsing the code and was thinking this would be the
>>> most probable scenario.
>>>
>>> But, the point is that even after removing the args initialization part
>>> in the ExecInitExpr for AggrefState, the sum() function is working. I
>>> believe that is also a aggregate function! If yes, then how is it working if
>>> I dd not allow the args to be initialized. The debugger says that
>>> ExecEvalAggref was called and the results returned are true.
>>>
>>>
>> Did you check the same thing with avg, or any statistical aggregates. Sum
>> does not need all the aggregate infrastructure in place, for example
>> finalisation function. May be after removing initialization part you want to
>> run regression (or at least aggregates.sql) to see what it breaks.
>>
>>
>>> Regards,
>>> Vaibhav
>>>
>>>
>>> On Thu, Apr 28, 2011 at 2:38 PM, Ashutosh Bapat <
>>> ashutosh.ba...@enterprisedb.com> wrote:
>>>
>>>> The args in AggrefExprState, are used in the functions ExecAgg,
>>>> ExecInitAgg and their minions to evaluate the aggregates. The
>>>> ExecEvalAggref() merely retrieves the results of aggregation calculated
>>>> during ExecAgg.
>>>>
>>>>
>>>> On Tue, Apr 26, 2011 at 12:04 PM, Vaibhav Kaushal <
>>>> vaibhavkaushal...@gmail.com> wrote:
>>>>
>>>>> Hello all,
>>>>>
>>>>> While examining the executor, I was wondering what the *args part of
>>>>> AggrefExprState nodes contain. I found that the Aggref (Expr)'s  args list
>>>>> is a list of TargetEntry nodes. But the state node's args is initialized 
>>>>> in
>>>>> ExecInitExpr as:
>>>>>
>>>>> astate->args = (List *) ExecInitExpr((Expr *) aggref->args,
>>>>>                                                          parent);
>>>>>
>>>>> This would mean that the args is actually a ExprState node list with
>>>>> one single item (the ExprState node / tree). I believe it potentially
>>>>> contains the execution tree to determine the state / value of the aggref
>>>>> (sub)expression. But then in the ExecEvalAggref function I do not see the
>>>>> args coming into picture at all! I am also unable to find a call to some
>>>>> function for executing the state node created in the args list. Also, no
>>>>> value is being extracted from that node! Why is it so?
>>>>>
>>>>> For quick reference I am adding the function (may be you don't need it
>>>>> but still... its a small one):
>>>>>
>>>>> /* ----------------------------------------------------------------
>>>>>  *        ExecEvalAggref
>>>>>  *
>>>>>  *        Returns a Datum whose value is the value of the precomputed
>>>>>  *        aggregate found in the given expression context.
>>>>>  * ----------------------------------------------------------------
>>>>>  */
>>>>> static Datum
>>>>> ExecEvalAggref(AggrefExprState *aggref, ExprContext *econtext,
>>>>>                bool *isNull, ExprDoneCond *isDone)
>>>>> {
>>>>>    if (isDone)
>>>>>         *isDone = ExprSingleResult;
>>>>>
>>>>>     if (econtext->ecxt_aggvalues == NULL)        /* safety check */
>>>>>         elog(ERROR, "no aggregates in this expression context");
>>>>>
>>>>>     *isNull = econtext->ecxt_aggnulls[aggref->aggno];
>>>>>     return econtext->ecxt_aggvalues[aggref->aggno];
>>>>> }
>>>>>
>>>>>
>>>>> What is the use of args in AggrefExprState node here? Is it there just
>>>>> for some historical reason?
>>>>>
>>>>> Regards,
>>>>> Vaibhav
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Best Wishes,
>>>> Ashutosh Bapat
>>>> EntepriseDB Corporation
>>>> The Enterprise Postgres Company
>>>>
>>>>
>>>
>>
>>
>> --
>> Best Wishes,
>> Ashutosh Bapat
>> EntepriseDB Corporation
>> The Enterprise Postgres Company
>>
>>
>


-- 
Best Wishes,
Ashutosh Bapat
EntepriseDB Corporation
The Enterprise Postgres Company

Reply via email to