mock_add_resultset used with an array ref will return the given resultset
regardless of what the sql query is. The
documentation contains an example of how to make it return a particular resultset for a given query (see the
sql_and_resultset option). Note that the
sql can be anything, it does not have to be valid SQL. E.g. like this
$ cat 790142.pl
use strict;
use warnings;
use Test::More qw(no_plan);
use Data::Dumper;
use DBI;
my $dbh = DBI->connect('DBI:Mock:', '', '');
$dbh->{'mock_add_resultset'} = {
sql => 'QUERY_ONE',
results => [
[ 'foo', 'bar' ],
[ 'this_one', 'this_two' ],
[ 'this_three', 'this_four' ],
],
};
$dbh->{'mock_add_resultset'} = {
sql => 'QUERY_TWO',
results => [
[ 'moo', 'baah' ],
[ 'that_one', 'that_two' ],
[ 'that_three', 'that_four' ],
],
};
my $sth = $dbh->prepare('QUERY_ONE');
is_deeply( $sth->fetchrow_arrayref(), [ 'this_one', 'this_two' ] );
is_deeply( $sth->fetchrow_arrayref(), [ 'this_three', 'this_four' ] );
ok( !defined $sth->fetchrow_arrayref() ); # no more data
$sth = $dbh->prepare('QUERY_TWO');
is_deeply( $sth->fetchrow_arrayref(), [ 'that_one', 'that_two' ] );
is_deeply( $sth->fetchrow_arrayref(), [ 'that_three', 'that_four' ] );
ok( !defined $sth->fetchrow_arrayref() ); # no more data
$sth = $dbh->prepare('QUERY_THREE');
ok( !defined $sth->fetchrow_arrayref() ); # no matching query
__END__
$ perl 790142.pl
ok 1
ok 2
ok 3
ok 4
ok 5
ok 6
ok 7
1..7
$
Update: Added code sample.
--
No matter how great and destructive your problems may seem now, remember, you've probably only seen the tip of them. [1]