On Wed, Dec 11, 2002 at 09:26:38AM -0800, David Wheeler wrote: > On Wednesday, December 11, 2002, at 09:18 AM, Baldur Kristinsson wrote: > > >Here is an issue regarding DBD::Pg (I wouldn't exactly call it a bug, > >but it can be irritating nonetheless): > > > >If you try to pass a text value containing a null character as a bind > >value to a statement handle during execute(), you get the error > > > > "parser: unterminated quoted string at or near ..." > > > >There seems to be no way to escape the null byte without truncating the > >string that is being passed (I would guess this happens at the libpq > >level rather than DBD::Pg, though). > > > >If you call $dbh->quote on the value and try to insert it directly into > >the statement, the null byte is tacitly removed. > > > >This seems to me to be better behaviour than the above. So I think it's > >sensible to remove null bytes from values for other types of columns > >than BYTEA. > > Interesting. However, the null byte is by definition a string > terminator, so it makes no sense to me to include any data in a string > beyond the null byte. The behavior of quote() to tacitly strip out a > null byte is actually a bug (left over from an earlier implementation) > that should be fixed. > > I think that if you have a string with a null byte in it and you want > to put it into a field other than BYTEA, your code should be > responsible for removing it before it passes it to DBI. > > dbi-dev'ers, please correct me if I'm wrong. :-)
The driver should always try to be as transparent as possible. The general principle is "don't mes with the users data unless they've specifically asked you to (cf. ChopBlanks)". Tim.