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
> > 
> > 
> 
> 


Reply via email to