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;
} else {
if (*src == literal_ch && *(src-1) != '//'
&& *(src-1) != literal_ch) {
in_literal = 0;
}
}
}

ANSI standard doesn't use backslashes, it uses doubling: "...""..."
Yeah, as Rudy pointed out, however, PostgreSQL uses backslashes as well as doubling.

Take a look at dbd_preparse in DBD::Oracle.
Will do, when I'm more awake again and find the tuits...

There's also a preparse() in DBI.xs which was destined to become a
standard service offered to drivers - but isn't quite ready yet.
Hrm, yes, that could be quite handy, since dbd_preparse() seems to be one of the more complex driver functions...

Regards,

David

--
David Wheeler AIM: dwTheory
[EMAIL PROTECTED] ICQ: 15726394
http://david.wheeler.net/ Yahoo!: dew7e
Jabber: [EMAIL PROTECTED]

Reply via email to