Re: Remove post-increment in function quote_identifier of pg_upgrade - Mailing list pgsql-hackers

From Justin Pryzby
Subject Re: Remove post-increment in function quote_identifier of pg_upgrade
Date
Msg-id 20210429143714.GJ27406@telsasoft.com
Whole thread Raw
In response to Remove post-increment in function quote_identifier of pg_upgrade  (Vaibhav Dalvi <vaibhav.dalvi@enterprisedb.com>)
Responses Re: Remove post-increment in function quote_identifier of pg_upgrade  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
On Thu, Apr 29, 2021 at 06:35:28PM +0530, Vaibhav Dalvi wrote:
> Hi,
> 
> The function quote_identifier has extra post-increment operation as
> highlighted below,
> 
> char *
> quote_identifier(const char *s)
> {
>    char   *result = pg_malloc(strlen(s) * 2 + 3);
>    char   *r = result;
> 
>    *r++ = '"';
>    while (*s)
>    {
>       if (*s == '"')
>       *r++ = *s;
>       *r++ = *s;
>       s++;
>    }
>    *r++ = '"';
>    **r++ = '\0';*
> 
>    return result;
> }
> 
> I think *r = '\0' is enough here. Per precedence table the precedence of
> postfix increment operator is higher. The above statement increments 'r'
> pointer address but returns the original un-incremented pointer address,
> which is then dereferenced. Correct me if I am wrong here.
> 
> If my understanding is correct then '++' is not needed in the
> above highlighted statement which is leading to overhead.

I don't think the integer increment during pg_upgrade is a meaningful overhead.
You could check the compiler's assembly output it may be the same even without
the ++.

I'd suggest to leave it as it's currently written, since the idiom on every
other line is *r++ = ..., it'd be strange to write it differently here, and
could end up being confusing or copied+pasted somewhere else.

> Find an attached patch which does the same. This can be backported till v96.

In any case, think it would not be backpatched, since it's essentially
cosmetic.

> diff --git a/src/bin/pg_upgrade/util.c b/src/bin/pg_upgrade/util.c
> index fc20472..dc000d0 100644
> --- a/src/bin/pg_upgrade/util.c
> +++ b/src/bin/pg_upgrade/util.c
> @@ -198,7 +198,7 @@ quote_identifier(const char *s)
>          s++;
>      }
>      *r++ = '"';
> -    *r++ = '\0';
> +    *r = '\0';
>  
>      return result;
>  }



pgsql-hackers by date:

Previous
From: Alvaro Herrera
Date:
Subject: Re: Unresolved repliaction hang and stop problem.
Next
From: silvio brandani
Date:
Subject: Re: tool to migrate database