-
Notifications
You must be signed in to change notification settings - Fork 32
/
41-sqlite-exec-error.t
49 lines (39 loc) · 1.42 KB
/
41-sqlite-exec-error.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
use v6;
use Test;
plan 16;
use DBIish;
# Test some errors
ok not DBIish.err, "At start DBIish.err is 0";
throws-like {
DBIish.connect('SQLite');
}, X::AdHoc, 'Need database';
my $dbfile = 'exec-error';
unless DBIish.install-driver('SQLite').version {
skip-rest 'No SQLite3 library installed';
exit;
}
throws-like {
DBIish.connect('SQLite', :database</no-such/database>);
}, X::DBDish::ConnectionFailed, "Die on invalid database";
ok so DBIish.err, "Error registered";
ok (my $dbh = DBIish.connect('SQLite', dbname => $dbfile)), 'Created';
ok not $dbh.err, 'Without errors en $dbh';
ok not DBIish.err, 'Error cleared in DBIish';
lives-ok {
$dbh.do('DROP TABLE IF EXISTS with_unique');
$dbh.do('CREATE TABLE with_unique(a integer not null, b integer not null, UNIQUE(a, b))');
}, 'Can create table';
my $insert = $dbh.prepare('INSERT INTO with_unique(a, b) VALUES(?, ?)');
lives-ok { $insert.execute(1, 1) }, 'Can insert tuple the first time';
throws-like {
$insert.execute(1, 1);
}, X::DBDish::DBError, 'Cannot insert tuple the second time';
ok so $insert.err, 'Has error at $sth level';
ok (my $e = $insert.errstr), 'Error preserved';
diag $e;
ok so $dbh.err, 'Has error at $dbh level';
ok so $dbh.drv.err, 'Has error at $drv level';
ok so DBIish.err, 'Has error at $sth leval';
is DBIish.errstr, $e, 'Propagated to DBIish';
$dbh.dispose; # Close the connection
END { try unlink "$dbfile.sqlite3" };