Re: Allow escape in application_name

Kyotaro Horiguchi <horikyota.ntt@gmail.com>

From: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
To: masao.fujii@oss.nttdata.com
Cc: kuroda.hayato@fujitsu.com, houzj.fnst@fujitsu.com, ikedamsh@oss.nttdata.com, pgsql-hackers@lists.postgresql.org, tgl@sss.pgh.pa.us
Date: 2021-10-12T06:42:23Z
Lists: pgsql-hackers
At Tue, 12 Oct 2021 15:06:11 +0900 (JST), Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote in 
> "%4%5%6%7p" is converted to "57p".  Do we need to imitate that bug
> with this patch?

So.. I try to describe the behavior for exhaustive patterns..

current:
 A. "^-?[0-9]+.*" : returns valid padding. p goes after the last digit.
 B. "^[^0-9-].*"  : padding = 0, p doesn't advance.
 C. "^-[^0-9].*"  : padding = 0, p advances by 1 byte.
 D. "^-"          : padding = 0, p advances by 1 byte.
  (if *p == 0 then breaks)

I think the patterns covers the all possibilities.

If we code as the following:
        if (*p == '-' ? isdigit(p[1]) : isdigit(p[0]))
		{
			char *endptr;
			padding = strtol(p, &endptr, 10);
			Assert(endptr > p);
			if (*endptr == '\0')
				break;
			p = endptr;
		}
		else
          padding = 0;

  A. "^-?[0-9]+.*" : same to the current
  B. "^[^0-9-].*"  : same to the current
  C. "^-[^0-9].*"  : padding = 0, p doesn't advance.
  D. "^-"          : padding = 0, p doesn't advance.

If we wan to make the behaviors C and D same with the current, the
else clause should be like the follows, but I don't think we need to
do that.

		else
		{
          padding = 0;
		  if (*p == '-')
		    p++;
  	    }

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center



Commits

  1. postgres_fdw: Add regression test for postgres_fdw.application_name GUC.

  2. postgres_fdw: Allow postgres_fdw.application_name to include escape sequences.

  3. doc: Add note about postgres_fdw.application_name.

  4. postgres_fdw: Revert unstable tests for postgres_fdw.application_name.

  5. postgres_fdw: Allow application_name of remote connection to be set via GUC.