Re: What would AggrefExprState nodes' args contain?

Lists: pgsql-hackers
From: Vaibhav Kaushal <vaibhavkaushal123(at)gmail(dot)com>
To: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: What would AggrefExprState nodes' args contain?
Date: 2011-04-26 06:34:20
Message-ID: BANLkTi=bZ93oj5iq5YS1Qf77cL68mwbmsg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

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


From: Ashutosh Bapat <ashutosh(dot)bapat(at)enterprisedb(dot)com>
To: Vaibhav Kaushal <vaibhavkaushal123(at)gmail(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: What would AggrefExprState nodes' args contain?
Date: 2011-04-28 09:08:25
Message-ID: BANLkTikdbsgbzNWePFpiZqZ6SKP5nnBMGA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

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 <
vaibhavkaushal123(at)gmail(dot)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


From: Vaibhav Kaushal <vaibhavkaushal123(at)gmail(dot)com>
To: Ashutosh Bapat <ashutosh(dot)bapat(at)enterprisedb(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: What would AggrefExprState nodes' args contain?
Date: 2011-04-28 10:51:52
Message-ID: BANLkTin+jGJX=SebUXZOMgp_q-wM+_bPzw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

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.

Regards,
Vaibhav

On Thu, Apr 28, 2011 at 2:38 PM, Ashutosh Bapat <
ashutosh(dot)bapat(at)enterprisedb(dot)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 <
> vaibhavkaushal123(at)gmail(dot)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
>
>


From: Ashutosh Bapat <ashutosh(dot)bapat(at)enterprisedb(dot)com>
To: Vaibhav Kaushal <vaibhavkaushal123(at)gmail(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: What would AggrefExprState nodes' args contain?
Date: 2011-04-29 06:00:54
Message-ID: BANLkTin_0c_c=OKtZhzQL3GhTpY5KmKbCA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Thu, Apr 28, 2011 at 4:21 PM, Vaibhav Kaushal <
vaibhavkaushal123(at)gmail(dot)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(dot)bapat(at)enterprisedb(dot)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 <
>> vaibhavkaushal123(at)gmail(dot)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


From: Vaibhav Kaushal <vaibhavkaushal123(at)gmail(dot)com>
To: Ashutosh Bapat <ashutosh(dot)bapat(at)enterprisedb(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: What would AggrefExprState nodes' args contain?
Date: 2011-04-29 09:52:07
Message-ID: BANLkTiki3qUZ0-G8oY=yRPN2hJeuKfD_Ow@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

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(dot)bapat(at)enterprisedb(dot)com> wrote:

>
>
> On Thu, Apr 28, 2011 at 4:21 PM, Vaibhav Kaushal <
> vaibhavkaushal123(at)gmail(dot)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(dot)bapat(at)enterprisedb(dot)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 <
>>> vaibhavkaushal123(at)gmail(dot)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
>
>


From: Ashutosh Bapat <ashutosh(dot)bapat(at)enterprisedb(dot)com>
To: Vaibhav Kaushal <vaibhavkaushal123(at)gmail(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: What would AggrefExprState nodes' args contain?
Date: 2011-04-29 10:01:05
Message-ID: BANLkTin9+D9bUB1YqtM4g1vcTDUxK_2MSw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

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 <
vaibhavkaushal123(at)gmail(dot)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(dot)bapat(at)enterprisedb(dot)com> wrote:
>
>>
>>
>> On Thu, Apr 28, 2011 at 4:21 PM, Vaibhav Kaushal <
>> vaibhavkaushal123(at)gmail(dot)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(dot)bapat(at)enterprisedb(dot)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 <
>>>> vaibhavkaushal123(at)gmail(dot)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


From: Vaibhav Kaushal <vaibhavkaushal123(at)gmail(dot)com>
To: Ashutosh Bapat <ashutosh(dot)bapat(at)enterprisedb(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: What would AggrefExprState nodes' args contain?
Date: 2011-04-29 10:19:17
Message-ID: BANLkTikWjxGwORTRbvrWjr2yBnNmTda0GA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

I have a small db which I am using to test it. Moreover I am new to the
terms. What would you mean by 'regression'?

Also, I am using eclipse for browsing the code. It resolves all references
and function calls, declarations, definitions etc.

Regards,
Vaibhav

On Fri, Apr 29, 2011 at 3:31 PM, Ashutosh Bapat <
ashutosh(dot)bapat(at)enterprisedb(dot)com> wrote:

> 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 <
> vaibhavkaushal123(at)gmail(dot)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(dot)bapat(at)enterprisedb(dot)com> wrote:
>>
>>>
>>>
>>> On Thu, Apr 28, 2011 at 4:21 PM, Vaibhav Kaushal <
>>> vaibhavkaushal123(at)gmail(dot)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(dot)bapat(at)enterprisedb(dot)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 <
>>>>> vaibhavkaushal123(at)gmail(dot)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
>
>


From: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
To: Vaibhav Kaushal <vaibhavkaushal123(at)gmail(dot)com>
Cc: Ashutosh Bapat <ashutosh(dot)bapat(at)enterprisedb(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: What would AggrefExprState nodes' args contain?
Date: 2011-04-29 10:54:35
Message-ID: 4DBA98EB.8010906@enterprisedb.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On 29.04.2011 13:19, Vaibhav Kaushal wrote:
> I have a small db which I am using to test it. Moreover I am new to the
> terms. What would you mean by 'regression'?

"make check"

--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com


From: Vaibhav Kaushal <vaibhavkaushal123(at)gmail(dot)com>
To: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Ashutosh Bapat <ashutosh(dot)bapat(at)enterprisedb(dot)com>
Subject: Re: What would AggrefExprState nodes' args contain?
Date: 2011-04-29 20:57:19
Message-ID: BANLkTi=NejBacBpoYe9icMzNGm0y82-1wQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Thanks heikki.

@ashu: i am in final year undergrad at bangalore under vtu. I know the term
regression. Just did not know how to do that. Heikki reminded me skmething i
tried out while compiling binutils...make check. Will look into that.

Thanks for the help so far both of you. :)
On 29 Apr 2011 16:24, "Heikki Linnakangas" <
heikki(dot)linnakangas(at)enterprisedb(dot)com> wrote:
> On 29.04.2011 13:19, Vaibhav Kaushal wrote:
>> I have a small db which I am using to test it. Moreover I am new to the
>> terms. What would you mean by 'regression'?
>
> "make check"
>
> --
> Heikki Linnakangas
> EnterpriseDB http://www.enterprisedb.com