I see in quote.c::do_quote_ident():

	*cp2++ = '"';
	while (len-- > 0)
	{
		if (*cp1 == '"')
			*cp2++ = '"';
		if (*cp1 == '\\')
			*cp2++ = '\\';
		*cp2++ = *cp1++;
	}
	*cp2++ = '"';

I am confused by the backslash handling. In my tests, a backslash in a
double-quoted string does not require two backslashes:
	
	test=> create user "a\d";
	CREATE USER
	test=> select usename, length(usename) from pg_user;
	 usename  | length 
	----------+--------
	 a\d      |      3

This is because a double-quote in a double-quoted string is entered as
"", not \".

Is it adding another backslash because it assumes the result will appear
in another quoted string?

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

Wed, 27 Mar 2002 15:54:39 -0500 (EST)
Bruce Momjian <pgman@candle.pha.pa.us>
Problem with do_quote_ident()
Bruce Momjian wrote:
> I see in quote.c::do_quote_ident():
>
>    *cp2++ = '"';
>    while (len-- > 0)
>    {
>         if (*cp1 == '"')
>              *cp2++ = '"';
>         if (*cp1 == '\\')
>              *cp2++ = '\\';
>         *cp2++ = *cp1++;
>    }
>    *cp2++ = '"';
>
> I am confused by the backslash handling. In my tests, a backslash in a
> double-quoted string does not require two backslashes:
>
>    test=> create user "a\d";
>    CREATE USER
>    test=> select usename, length(usename) from pg_user;
>     usename  | length
>    ----------+--------
>     a\d      |      3
>
> This is because a double-quote in a double-quoted string is entered as
> "", not \".
>
> Is it adding another backslash because it assumes the result will appear
> in another quoted string?

    I  would  say  it is adding another backslash because it is a
    bug.  If you use quote_ident()  in  a  plpgsql  procedure  to
    build  querystrings  for  EXECUTE  (and you should do it that
    way),  then  it'll  no  handle   identifiers   that   contain
    backslashes correctly.


Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #



_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com


Wed, 27 Mar 2002 16:18:38 -0500 (EST)
Jan Wieck <janwieck@yahoo.com>
Re: Problem with do_quote_ident()