Re: Problem with do_quote_ident()
От | Jan Wieck |
---|---|
Тема | Re: Problem with do_quote_ident() |
Дата | |
Msg-id | 200203272118.g2RLIc227802@saturn.janwieck.net обсуждение исходный текст |
Ответ на | Problem with do_quote_ident() (Bruce Momjian <pgman@candle.pha.pa.us>) |
Список | pgsql-hackers |
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
В списке pgsql-hackers по дате отправления: