use strict; use warnings; use Test::More; use Data::Dumper; use DBI qw(:sql_types); use ExtUtils::Installed; my %modules = map { $_ => 1 } qw (DBI DBD::mysql); my $instmod = ExtUtils::Installed->new(); foreach my $m ($instmod->modules()) { diag "$m: " . $instmod->version($m) . "\n" if $modules{$m}; } my $dbh = undef; sub delete_all { my $sth = $dbh->prepare(q{delete from foo}) or die "prepare failed"; my $retval = $sth->execute() or die "execute failed"; return 1; } sub insert_range { my ($n, $i) = @_; my $sth = $dbh->prepare(q{insert into foo values (?)}) or die "prepare failed"; my $count = 0; foreach my $j (1 .. $i) { my $retval = $sth->execute($n + $j) or die "execute failed"; $count++; } return $count; } sub dynamic_sql { my $n = shift; my $sth = $dbh->prepare(qq{select i from foo where i=$n}) or die "prepare failed"; my $retval = $sth->execute() or die "execute failed"; my $count = 0; $count++ while (my $row = $sth->fetchrow_arrayref()); return $count; } sub bindparams_no_sql_type { my $n = shift; my $sth = $dbh->prepare(q{select i from foo where i=?}) or die "prepare failed"; $sth->bind_param(1, $n); my $retval = $sth->execute() or die "execute failed"; my $count = 0; $count++ while (my $row = $sth->fetchrow_arrayref()); return $count; } sub bindparams_sql_type { my $n = shift; my $sth = $dbh->prepare(q{select i from foo where i=?}) or die "prepare failed"; $sth->bind_param(1, $n, { TYPE => SQL_INTEGER }); my $retval = $sth->execute() or die "execute failed"; my $count = 0; $count++ while (my $row = $sth->fetchrow_arrayref()); return $count; } # ------ main ------ my @args = qw (DBI:mysql:test foo bar); $dbh = DBI->connect(@args) or die "connect failed"; my @data = (); my $start = 6700000000000000000; my $range = 1000; plan tests => 2 + 3 * $range; # ------ tests ------ cmp_ok(delete_all(), q{==}, 1, q{Expect delete_all to return 1}); cmp_ok(insert_range($start, $range), q[==], $range, qq[Expect $range insert(s)]); for (1 .. $range) { my $i = $start + $_; cmp_ok(dynamic_sql($i), q{==}, 1, qq{Expect 1 row from dynamic_sql($i)}); cmp_ok(bindparams_sql_type($i), q{==}, 1, qq{Expect 1 row from bindparams_sql_type($i)}); cmp_ok(bindparams_no_sql_type($i), q{==}, 1, qq{Expect 1 row from bindparams_no_sql_type($i)}); } __END__