#!/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();

}