Oy, just when I sent it, I realised what the problem is:

Please apply following patch to dbdimp.c

Edmund, please, apply this patch to DBD::Pg for next release.

1169c1169
<                         dest+=snprintf(dest, strlen(imp_sth->statement)
+ max_len + (statement - dest), "\\\\%03o", *val);
---
>                         dest+=snprintf(dest, strlen(imp_sth->statement)
+ max_len + (statement - dest), "\\\\%03o", *((unsigned char *)val));

On Wed, 27 Jun 2001, Alex Pilosov wrote:

> I'm one to blame for the bytea support, so :)
> 
> Something is mangling chr(128) somewhere. If you do this one with
> DBI_TRACE=2, you'll see: >INSERT INTO test VALUES ('\\37777777600')<
> 
> I'm looking what's causing it...
> ---cut---
> I'm getting core dumps when I try to use a BYTEA value with
> a byte outside 0..127.
> 
>     use DBI qw(SQL_BINARY);
>     my $dbh = DBI->connect("dbi:Pg:dbname=merlyntest", "user", "pass",
>       { RaiseError => 1 });
>     $dbh->do("CREATE TABLE test (a BYTEA)");
>     my $insert = $dbh->prepare("INSERT INTO test VALUES (?)");
>     $insert->bind_param(1, undef, SQL_BINARY); # necessary for BYTEA
> escaping
>     $insert->execute("fred"); # works fine
>     $insert->execute(pack "C*", 0..127); # works fine
>     $insert->execute(pack "C*", 128); # BOMB, core dump
> 
> (I'm cutting and pasting this from a perl debugger session, so if
> that's not quite it, forgive me.)
> 
> DBI version 1.18
> DBD::Pg version 1.00
> postgresql version 7.1.2
> Perl version 5.5.3
> 
> 
> 
> 
> 

Reply via email to