Thread: Why assignment before return?

Why assignment before return?

From
Magnus Hagander
Date:
This code-pattern appears many times in pgstatfuncs.c:

Datum
pg_stat_get_blocks_fetched(PG_FUNCTION_ARGS)
{Oid            relid = PG_GETARG_OID(0);int64        result;PgStat_StatTabEntry *tabentry;
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)    result = 0;else    result = (int64)
(tabentry->blocks_fetched);
PG_RETURN_INT64(result);
}


Why do we assign this to "result" and then return, why not just:if ((tabentry = pgstat_fetch_stat_tabentry(relid)) ==
NULL)   PG_RETURN_INT64(0);else    PG_RETURN_INT64(tabentry->blocks_fetched); 


--
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/


Re: Why assignment before return?

From
Thom Brown
Date:
On 20 August 2010 12:46, Magnus Hagander <magnus@hagander.net> wrote:
> This code-pattern appears many times in pgstatfuncs.c:
>
> Datum
> pg_stat_get_blocks_fetched(PG_FUNCTION_ARGS)
> {
>        Oid                     relid = PG_GETARG_OID(0);
>        int64           result;
>        PgStat_StatTabEntry *tabentry;
>
>        if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
>                result = 0;
>        else
>                result = (int64) (tabentry->blocks_fetched);
>
>        PG_RETURN_INT64(result);
> }
>
>
> Why do we assign this to "result" and then return, why not just:
>        if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
>                PG_RETURN_INT64(0);
>        else
>                PG_RETURN_INT64(tabentry->blocks_fetched);
>
>
> --

And then drop the "int64        result;" declaration as a result.

--
Thom Brown
Registered Linux user: #516935


Re: Why assignment before return?

From
Tom Lane
Date:
Magnus Hagander <magnus@hagander.net> writes:
> This code-pattern appears many times in pgstatfuncs.c:
> Datum
> pg_stat_get_blocks_fetched(PG_FUNCTION_ARGS)
> {
>     Oid            relid = PG_GETARG_OID(0);
>     int64        result;
>     PgStat_StatTabEntry *tabentry;

>     if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
>         result = 0;
>     else
>         result = (int64) (tabentry->blocks_fetched);

>     PG_RETURN_INT64(result);
> }


I see nothing wrong with that style.  Reducing it as you propose
probably wouldn't change the emitted code at all, and what it would
do is reduce flexibility.  For instance, if we ever needed to add
additional operations just before the RETURN (releasing a lock on
the tabentry, perhaps) we'd just have to undo the "improvement".
        regards, tom lane


Re: Why assignment before return?

From
Magnus Hagander
Date:
On Fri, Aug 20, 2010 at 15:10, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Magnus Hagander <magnus@hagander.net> writes:
>> This code-pattern appears many times in pgstatfuncs.c:
>> Datum
>> pg_stat_get_blocks_fetched(PG_FUNCTION_ARGS)
>> {
>>       Oid                     relid = PG_GETARG_OID(0);
>>       int64           result;
>>       PgStat_StatTabEntry *tabentry;
>
>>       if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
>>               result = 0;
>>       else
>>               result = (int64) (tabentry->blocks_fetched);
>
>>       PG_RETURN_INT64(result);
>> }
>
>
> I see nothing wrong with that style.  Reducing it as you propose
> probably wouldn't change the emitted code at all, and what it would
> do is reduce flexibility.  For instance, if we ever needed to add
> additional operations just before the RETURN (releasing a lock on
> the tabentry, perhaps) we'd just have to undo the "improvement".

I'm not saying it's wrong, I'm just trying to figure out why it's
there since I wanted to add other functions and it looked.. Odd. I'll
change my new functions to look like this for consistency, but I was
curious if there was some specific reason why it was better to do it
this way.

I see your answer as "no, not really any reason, but also not worth
changing", which is fine by me :-)


--
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/


Re: Why assignment before return?

From
Tom Lane
Date:
Magnus Hagander <magnus@hagander.net> writes:
> I see your answer as "no, not really any reason, but also not worth
> changing", which is fine by me :-)

Yeah, that's a fair summary.  If it had been coded the other way
to start with, I'd also say it wasn't worth changing, at least
not until such time as we actually needed to.

In the meantime, any added functions of the same ilk should definitely
be made to look like the existing ones.
        regards, tom lane


Re: Why assignment before return?

From
Magnus Hagander
Date:
On Fri, Aug 20, 2010 at 15:27, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Magnus Hagander <magnus@hagander.net> writes:
>> I see your answer as "no, not really any reason, but also not worth
>> changing", which is fine by me :-)
>
> Yeah, that's a fair summary.  If it had been coded the other way
> to start with, I'd also say it wasn't worth changing, at least
> not until such time as we actually needed to.
>
> In the meantime, any added functions of the same ilk should definitely
> be made to look like the existing ones.

Yeah. I notice there are some functions that are not following this
pattern, but most are, so I'll adjust my patch with this.


--
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/