#!/usr/bin/perl -w use strict; use DBI; # configuration parameters my $server1 = "127.0.0.1:10001"; my $server2 = "127.0.0.1:10002"; my $dbname = "test"; my $user = "root"; my $pass = "XYZ"; my $cnt = 1000; my $filename = "/home/frazer/tmp/firefoxlogo.jpg"; Main:{ my $dbh1 = DBI->connect("DBI:mysql:$dbname;".$server1, $user, $pass, { RaiseError => 1 }) or die( "Couldn't connect to database:" . DBI->errstr() ); my $dbh2 = DBI->connect("DBI:mysql:$dbname;".$server2, $user, $pass, { RaiseError => 1 }) or die( "Couldn't connect to database:" . DBI->errstr() ); $dbh1->do("CREATE TABLE IF NOT EXISTS blobtest(id INT4, data LONGBLOB, PRIMARY KEY (id)) ENGINE=NDBCLUSTER;") or $dbh1->errstr(); $dbh1->do("TRUNCATE blobtest") or $dbh1->errstr(); my $insert_statement= $dbh1->prepare( "INSERT INTO blobtest(id, data) VALUES(?,?)" ) or die $!; my $delete_statement= $dbh2->prepare( "DELETE FROM blobtest where id=?" ) or die $!; open(my $fh, $filename) or die $!; my $blob_data; read( $fh, $blob_data, -s $fh ); for ( my $i = 1; $i <= $cnt; $i++ ) { $insert_statement->execute($i, $blob_data) or die $!; my $select = "SELECT id, ISNULL(data), data FROM blobtest WHERE id=$i"; my $res = $dbh2->selectall_arrayref($select) or die( $dbh2->errstr() ); if ( $#{$res} >= 0 && $res->[0]->[0] == $i && $res->[0]->[1] == 0 ) { print $i." "." OK, last inserted row has non null blob value\n"; } elsif ( $#{$res} == -1 || $res->[0]->[0] != $i ) { print( $i." "." Failed, there's no row with id=".$i."\n" ); } elsif ( $#{$res} == -1 || $res->[0]->[0] != $i || $res->[0]->[1] == 1 ) { print( $i." "." Failed, last inserted row has blob with the null value\n" ); } else { print( $i." "." WTF?\n"); } $delete_statement->execute($i) or die $!; } $dbh1->disconnect(); $dbh2->disconnect(); }