bug in DBD::MySQL on Ubuntu / Sarge

Martin Waite <[email protected]>
Newsgroups gmane.comp.db.mysql.perl
Message-ID <[email protected]>
Hi,

I have come across a problem in DBD::MySQL while porting code from Woody
to Sarge and Ubuntu (both hoary and breezy).

The following script creates a simple test table and attempts to perform
6 updates.  The first 3 updates work correctly, but in the final 3
updates, the key is erroneously taken as NULL:

#! /usr/bin/perl5 -w

use strict;
use DBI;

my $dbh = DBI->connect( "dbi:mysql:test:host=chadwick:port=3306", 
			'testuser', 'test', {RaiseError=>1, PrintError=>0} );


$dbh->do( "drop table if exists update_bug" );
$dbh->do( "create table update_bug( k int not null primary key, status int not null )" );

my $v = '4000930012345671';

$dbh->do( "update update_bug set status = 5 where k = ?", undef, substr( $v, -11 ) );  # OK
$dbh->do( "update update_bug set status = 5 where k = ?", undef, substr( $v, -11 ) );  # OK

cancel( $v );  # OK
cancel( $v );  # bug - k is NULL
cancel( $v );  # bug - k is NULL
cancel( $v );  # bug - k is NULL

sub cancel {
  my ( $dcref ) = @_;
  print  "DCREF: $dcref\n";
  $dbh->do( "update update_bug set status = 5 where k = ?", undef, substr( $dcref, -11 ) );
}

  

In the Query log of the 4.1.11 database we're connecting to, we see:

060526 14:24:52    4605 Connect     testuser@chadwick on test
                   4605 Query       SET AUTOCOMMIT=1
                   4605 Query       drop table if exists update_bug
                   4605 Query       create table update_bug( k int not null primary key, status int not null )
                   4605 Query       update update_bug set status = 5 where k = '30012345671'
                   4605 Query       update update_bug set status = 5 where k = '30012345671'
                   4605 Query       update update_bug set status = 5 where k = '30012345671'
                   4605 Query       update update_bug set status = 5 where k = NULL
                   4605 Query       update update_bug set status = 5 where k = NULL
                   4605 Query       update update_bug set status = 5 where k = NULL
                   4605 Quit

  

The problem seems to be related to the fact that a substring expression
is passed as an argument to DBI::do, but only when the DBI::do is called
within a subroutine.

I'm stumped here.  Is this a bug in Perl or DBD::MySQL, or just the
versions on Sarge and Ubuntu ?

regards,
Martin




-- 
MySQL Perl Mailing List
For list archives: http://lists.mysql.com/perl
To unsubscribe:    http://lists.mysql.com/[email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.