Mojo-SQLite
view release on metacpan or search on metacpan
t/results.t view on Meta::CPAN
};
subtest 'Iterate' => sub {
my $results = $db->query('select * from results_test');
is_deeply $results->array, [1, 'foo'], 'right structure';
is_deeply $results->array, [2, 'bar'], 'right structure';
is $results->array, undef, 'no more results';
};
subtest 'Non-blocking query where not all results have been fetched' => sub {
my ($fail, $result);
my @promises = (
$db->query_p('select name from results_test')->then(sub {
my $results = shift;
push @$result, $results->array;
$results->finish;
}),
$db->query_p('select name from results_test')->then(sub {
my $results = shift;
push @$result, $results->array_test;
$results->finish;
}),
$db->query_p('select name from results_test')->then(sub {
my $results = shift;
push @$result, $results->array;
}),
);
Mojo::Promise->all(@promises)->catch(sub { $fail = 1 })->wait;
ok !$fail, 'no error';
is_deeply $result, [['foo'], ['foo'], ['foo']], 'right structure';
};
subtest 'Transactions' => sub {
{
my $tx = $db->begin;
$db->query("insert into results_test (name) values ('tx1')");
$db->query("insert into results_test (name) values ('tx1')");
$tx->commit;
}
is_deeply $db->query('select * from results_test where name = ?', 'tx1')
->hashes->to_array, [{id => 3, name => 'tx1'}, {id => 4, name => 'tx1'}],
'right structure';
{
my $tx = $db->begin;
$db->query("insert into results_test (name) values ('tx2')");
$db->query("insert into results_test (name) values ('tx2')");
}
is_deeply $db->query('select * from results_test where name = ?', 'tx2')
->hashes->to_array, [], 'no results';
eval {
my $tx = $db->begin;
$db->query("insert into results_test (name) values ('tx3')");
$db->query("insert into results_test (name) values ('tx3')");
$db->query('does_not_exist');
$tx->commit;
};
like $@, qr/does_not_exist/, 'right error';
is_deeply $db->query('select * from results_test where name = ?', 'tx3')
->hashes->to_array, [], 'no results';
{
my $timeout = $db->dbh->sqlite_busy_timeout // 0;
$db->dbh->sqlite_busy_timeout(100);
my $tx;
eval {
$tx = $db->begin('immediate');
$db->begin('immediate');
};
ok $@, 'transaction failed';
ok $db->dbh->err, 'database error code retained';
$db->dbh->sqlite_busy_timeout($timeout);
}
};
subtest 'Issue #2' => sub {
my $results1 = $db->query('select 1 as one');
is_deeply $results1->hashes, [{one => 1}], 'right structure';
my $results2 = $db->query('select 1 as one');
undef $results1;
is_deeply $results2->hashes, [{one => 1}], 'right structure';
}
}
done_testing();
( run in 0.916 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )