Обсуждение: Problem with do_quote_ident()
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 USERtest=> 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, Pennsylvania19026
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