It would be nice to also get coverage of the nano + DBI::PurePerl case.
Tim.
On Fri, May 07, 2010 at 02:18:46PM +0200, Jens Rehsack wrote:
> Hi,
>
> as requested, I'd like to allow tests against SQL::Statement for those
> DBD's which support it, too.
> If no one has objections, I'd like to commit attached patch.
>
> Best regards,
> Jens
> Index: lib/DBI/DBD.pm
> ===================================================================
> --- lib/DBI/DBD.pm (revision 13946)
> +++ lib/DBI/DBD.pm (working copy)
> @@ -3320,20 +3320,25 @@
> if @_;
> _inst_checks();
>
> + my %test_variants;
> +
> # decide what needs doing
>
> # do whatever needs doing
> if ($dbd_attr->{create_pp_tests}) {
> # XXX need to convert this to work within the generated Makefile
> # so 'make' creates them and 'make clean' deletes them
> - my %test_variants = (
> + %test_variants = (
> p => { name => "DBI::PurePerl",
> + match => qr/^\d/,
> add => [ '$ENV{DBI_PUREPERL} = 2' ],
> },
> g => { name => "DBD::Gofer",
> + match => qr/^\d/,
> add => [ q{$ENV{DBI_AUTOPROXY} =
> 'dbi:Gofer:transport=null;policy=pedantic'} ],
> },
> xgp => { name => "PurePerl & Gofer",
> + match => qr/^\d/,
> add => [ q{$ENV{DBI_PUREPERL} = 2; $ENV{DBI_AUTOPROXY}
> = 'dbi:Gofer:transport=null;policy=pedantic'} ],
> },
> # mx => { name => "DBD::Multiplex",
> @@ -3344,7 +3349,17 @@
> # add => [ q{local $ENV{DBI_AUTOPROXY} =
> 'dbi:Proxy:XXX';} ],
> # }
> );
> + }
>
> + if ($dbd_attr->{create_nano_tests}) {
> + $test_variants{n} = {
> + name => "DBI::SQL::Nano",
> + match => qr/^(50dbm|85gofer)\.t$/,
> + add => [ q{$ENV{DBI_SQL_NANO} = 1; # force use of DBI::SQL::Nano} ],
> + };
> + }
> +
> + if( 0 != scalar keys %test_variants ) {
> opendir DIR, 't' or die "Can't read 't' directory: $!";
> my @tests = grep { /\.t$/ } readdir DIR;
> closedir DIR;
> @@ -3353,7 +3368,7 @@
> printf "Creating test wrappers for $v_info->{name}:\n";
>
> foreach my $test (sort @tests) {
> - next if $test !~ /^\d/;
> + next if $test !~ $v_info->{match};
> my $usethr = ($test =~ /(\d+|\b)thr/ && $] >= 5.008 &&
> $Config{useithreads});
> my $v_test = "t/zv${v_type}_$test";
> my $v_perl = ($test =~ /taint/) ? "perl -wT" : "perl -w";
> Index: Makefile.PL
> ===================================================================
> --- Makefile.PL (revision 13946)
> +++ Makefile.PL (working copy)
> @@ -159,6 +159,7 @@
> WriteMakefile(
> dbd_edit_mm_attribs(\%opts, {
> create_pp_tests => 1,
> + create_nano_tests => 1,
> })
> );
> # WriteMakefile call is last thing executed
> Index: t/85gofer.t
> ===================================================================
> --- t/85gofer.t (revision 13946)
> +++ t/85gofer.t (working copy)
> @@ -22,7 +22,8 @@
>
> # 0=SQL::Statement if avail, 1=DBI::SQL::Nano
> # next line forces use of Nano rather than default behaviour
> -$ENV{DBI_SQL_NANO}=1;
> +# $ENV{DBI_SQL_NANO}=1;
> +# This is done in zvn_50dbm.t
>
> GetOptions(
> 'c|count=i' => \(my $opt_count = (-t STDOUT ? 100 : 0)),
> Index: t/50dbm.t
> ===================================================================
> --- t/50dbm.t (revision 13946)
> +++ t/50dbm.t (working copy)
> @@ -21,7 +21,8 @@
>
> # 0=SQL::Statement if avail, 1=DBI::SQL::Nano
> # next line forces use of Nano rather than default behaviour
> - $ENV{DBI_SQL_NANO}=1;
> + # $ENV{DBI_SQL_NANO}=1;
> + # This is done in zvn_50dbm.t
>
> push @mldbm_types, '';
> if (eval { require 'MLDBM.pm'; }) {
> @@ -155,14 +156,15 @@
> 5 => '15',
> } if $mldbm;
>
> - print " $sql\n";
> + print " $sql ...";
> $sql =~ s/\s*;\s*(?:#(.*))//;
> my $comment = $1;
>
> my $sth = $dbh->prepare($sql) or die $dbh->errstr;
> my @bind;
> @bind = split /,/, $comment if $sth->{NUM_OF_PARAMS};
> - $sth->execute(@bind);
> + my $n = $sth->execute(@bind);
> + print " $n\n";
> die $sth->errstr if $sth->err and $sql !~ /DROP/;
>
> next unless $sql =~ /SELECT/;
> @@ -187,8 +189,8 @@
> INSERT INTO fruit VALUES (3, NULL );
> INSERT INTO fruit VALUES (4,'to delete' );
> INSERT INTO fruit VALUES (?,?); #5,via placeholders
> +DELETE FROM fruit WHERE dVal='to delete';
> UPDATE fruit SET dVal='apples' WHERE dKey=2;
> -DELETE FROM fruit WHERE dVal='to delete';
> SELECT * FROM fruit;
> DROP TABLE fruit;
>