The problem seems to be solved. This was a standard Ubuntu Server 8.04 with the packages installed via apt-get.
The original versions were: libdbd-mysql-perl 4.005-1 libdbi-perl 1.601-1 1. Reinstalled latest version DBI-1.613_71 2. Reinstalled latest version DBD-mysql-4.017.tar.gz Peter On Tue, 2010-08-17 at 13:46 +0100, Martin J. Evans wrote: > On 17/08/10 13:38, Peter Gordon wrote: > > I am using DBD::mysql. > > > > I have a trace dump at level 15 which shows the problem. The dump is > > 750K uncompressed or 19K compressed. How should I send it? > > > > Peter > > > > I'm not sure an attachment of that size will get through this mailing list. > If you cannot put it up on publicly accessible HTTP/FTP server mail it to me > and I'll take a look at it. If you are happy to make it public let me know > and I can put it somewhere public for you so other list members can see it. > > Martin > > > > > On Tue, 2010-08-17 at 13:11 +0100, Martin J. Evans wrote: > >> On 17/08/10 12:14, Peter Gordon wrote: > >>> On Tue, 2010-08-17 at 13:55 +0300, Peter Gordon wrote: > >>>> Sorry about that - dsylexia is setting in. > >>>> > >>>> https://bugzilla.mozilla.org/show_bug.cgi?id=481549 > >>>> > >>>> > >>>> > >>>> On Tue, 2010-08-17 at 11:44 +0100, Martin J. Evans wrote: > >>>>> On 17/08/10 10:47, Peter Gordon wrote: > >>>>>> > >>>>>> I am trying to fix a problem in Bugzilla which has been open for more > >>>>>> than a year, > >>>>> > >>>>> Bugzilla shows VERIFIED FIXED at the moment. > >>>>> > >>>>>> and which seems to be related to DBI, and I was hoping > >>>>>> that you could give me some direction in trying to solve the problem. > >>>>>> On > >>>>>> my site the problem is totally repeatable. I am using Perl 5.8.8, > >>>>>> DBI-1.613_71. > >>>>> > >>>>> What DBD and version are you using? > >>> > >>> >From the debugger: > >>> > >>> use DBI > >>> x $DBI::VERSION > >>> 0 1.614 > >>> > >>> use DBD::DBD > >>> x $DBI::DBD::VERSION > >>> 0 12.014312 > >> > >> Some confusion here, I meant which DBD are you using and which version > >> e.g., DBD::mysql, DBD::Pg etc. > >> > >>> > >>> > >>>>> > >>>>>> In short: on one line a variable is a reference to an array, and, > >>>>>> directly after a return statement, the value is no longer an array, but > >>>>>> a scalar > >>>>>> having a reference to DBI. So it looks like something is > >>>>>> changing/corrupting the Perl stack. Since Driver.xst and Perl.xsi > >>>>>> change > >>>>>> the stack it seems > >>>>>> that that are likely to be causing the problem. > >>>>> > >>>>> Strange. > >>>>> > >>>>>> The bug in Bugzilla is: > >>>>>> > >>>>>> https://bugzilla.mozilla.org/show_bug.cgi?id=481459 > >>>>> > >>>>> This bugzilla does not seem to match your description. > >>>>> > >>>>>> > >>>>>> The code that seems to be causing the problem is: > >>>>>> > >>>>>> my $objects = $dbh->selectall_arrayref($sql, {Slice=>{}}, @untainted); > >>>>>> > >>>>>> For a given $sql and a given @untainted, the $objects returned is not > >>>>>> an array but a reference to DBI::db=HASH > >>>>> > >>>>> Have you got RaiseError set? > >>>>> > >>>>> What, if anything is in $dbh->err after the problem return? > >>> There is no error defined > >> > >> oh. > >> > >>> > >>> > >>>>> > >>>>>> When I step through the code, selectall_arrayref works correctly until > >>>>>> the final return statement. Before the return statement, the type is > >>>>>> an > >>>>>> array, and directly afterwards, it is a DBI::db=HASH. > >>>>>> > >>>>>> The sql statement is: > >>>>>> > >>>>>> SELECT id,value,product_id FROM versions WHERE id IN > >>>>>> (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, > >>>>>> ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? > >>>>>> ,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, > >>>>>> ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, > >>>>>> ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, > >>>>>> ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? > >>>>>> ,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, > >>>>>> ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? > >>>>>> ,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) > >>>>>> ORDER BY id > >>>>>> > >>>>>> and the @untainted array is an equivalent number of small integers. > >>>>>> > >>>>>> For a smaller or larger number of variables selectall_arrayref is > >>>>>> working correctly. > >>>>>> > >>>>>> I changed the calling routine so that when an error was detected, the > >>>>>> code was run again. On second and consecutive times the > >>>>>> code worked correctly. > >>>>>> > >>>>>> I am prepared to debug the problem if someone could help. > >>>>>> > >>>>>> Peter > >>>>>> > >>>>>> > >>>>> > >>>>> Can you reproduce this in a small script outside of bugzilla Perl? > >>>>> > >>> I tried and haven't succeeded yet. > >>> > >>> I did something similar using the Bugzilla infrastucture, and didn't get > >>> the error. > >> > >> Unless someone else has any bright ideas I think this might be difficult > >> to track down without some way of reproducing or some tracing output. Is > >> it possible to run your failing example with DBI_TRACE enabled at some > >> high level? > >> > >>>>> I tried mimicking what it looks like you are doing (mostly guess work) > >>>>> with DBD::ODBC and the latest DBI and found no problem: > >>>>> > >>>>> use DBI; > >>>>> use strict; > >>>>> > >>>>> my $h = DBI->connect('dbi:ODBC:baugi','sa','easysoft'); > >>>>> > >>>>> eval {$h->do(q/drop table mje/);}; > >>>>> > >>>>> $h->do(q/create table mje (id integer, value varchar(200), product_id > >>>>> integer)/); > >>>>> > >>>>> my $max = 1000; > >>>>> > >>>>> $h->begin_work; > >>>>> my $s = $h->prepare(q/insert into mje values(?,?,?)/); > >>>>> foreach my $loop(1..$max) { > >>>>> $s->execute($loop, 'fred', $loop); > >>>>> } > >>>>> $h->commit; > >>>>> > >>>>> > >>>>> foreach my $loop(1..($max+1)) { # last one won't match > >>>>> my @bound; > >>>>> push @bound, $_ foreach (1..$loop); > >>>>> > >>>>> my $sql = q/select id, value, product_id from mje where id in (/ . > >>>>> join(",", (map {'?'} @bound)) . ') order by id'; > >>>>> my $x = $h->selectall_arrayref($sql, {Slice=>{}}, @bound); > >>>>> if (ref($x) ne 'ARRAY') { > >>>>> print "$loop\n"; > >>>>> } > >>>>> } > >>>>> $h->disconnect; > >>>>> > >>>>> Martin > >>>> > >>>> > >>> > >>> > >> > >> Martin > > > > > >