Re: :PgSQL: More Queestions
От | Jeff Urlwin |
---|---|
Тема | Re: :PgSQL: More Queestions |
Дата | |
Msg-id | OEEMJFLOJPABMFADAPIKGEEEEDAA.jurlwin@bellatlantic.net обсуждение исходный текст |
Ответ на | Re: :PgSQL: More Queestions (Tim Bunce <Tim.Bunce@pobox.com>) |
Список | pgsql-interfaces |
> > On Wed, Nov 20, 2002 at 10:30:00PM -0800, David Wheeler wrote: > > On Wednesday, November 20, 2002, at 06:53 AM, Tim Bunce wrote: > > > > >>But if I change it (as I'm seriously considering, in light of > > >>PostgreSQL 7.3's support for prepared statements), I'll probably do no > > >>parsing for comments. > > > > > >I think that would be a bad move. > > > > Yes, your last post makes very clear why. Thanks. > > > > >If it's seen the start of a string ("..." or '...') then it just > > >keeps copying the string till it finds the same type of quote > > >character to mark the end of the string. The 'fiddly bit in the > > >middle' is handling backslashes used to escape quote chars in the > > >middle of the string: "...\"..." and "...\\" (odd vs even number). > > > > Seems rather opaque. Maybe I'm just reflecting my C-newbieness, but why > > wouldn't this work as well? Borrowing a bit from DBD::ODBC here (but > > allowing for both kinds of escaping of the quote characters): > > > > if (*src == '"' || *src == '\'') { > > if (!in_literal) { > > literal_ch = *src; > > in_literal = 1; > > No need for in_literal as literal_ch can serve as a flag as well. True...I was hacking that in and overlooked it. > > > } else { > > if (*src == literal_ch && *(src-1) != '//' > > && *(src-1) != literal_ch) { > > in_literal = 0; > > } > > } > > } > > Can't distinguish between > "....\\\\" - final double quote ends the string > "...\\\\\" - final double quote is escaped and string > continues... > > If the original code isn't broken it doesn't need fixing, maybe > just commenting. I'm tempted to leave it, since nobody is complaining, at the moment...but I'll put it on the list. Jeff
В списке pgsql-interfaces по дате отправления: