This repository has been archived by the owner on May 10, 2022. It is now read-only.
/
DB.pm6
70 lines (62 loc) · 1.76 KB
/
DB.pm6
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
unit class Toaster::DB;
use DBIish;
has $.db = 'toast.sqlite.db';
has $!dbh;
enum ToastStatus is export <Succ Fail Kill Unkn>;
submethod TWEAK {
my $exists = $!db.IO.e;
$!dbh = DBIish.connect: 'SQLite', :database($!db), :RaiseError;
$exists or self.deploy
}
method deploy {
$!dbh.do: 「
CREATE TABLE toast (
id INTEGER PRIMARY KEY,
rakudo TEXT NOT NULL,
rakudo_long TEXT NOT NULL,
module TEXT NOT NULL,
status TEXT NOT NULL,
time INTEGER NOT NULL,
stderr TEXT NOT NULL,
stdout TEXT NOT NULL,
exitcode TEXT NOT NULL
)
」;
self
}
method add (
Str:D $rakudo, Str:D $rakudo-long, Str:D $module,
Str:D $stderr, Str:D $stdout, Str:D $exitcode,
ToastStatus $status
) {
$!dbh.do: 「
DELETE FROM toast WHERE rakudo = ? AND rakudo_long = ? AND module = ?
」, $rakudo, $rakudo-long, $module;
$!dbh.do: 「
INSERT INTO toast (
rakudo, rakudo_long, module,
stderr, stdout, exitcode, status, time
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
」, $rakudo, $rakudo-long, $module, $stderr, $stdout, $exitcode,
~$status, time;
self
}
method all {
with $!dbh.prepare: 'SELECT * FROM toast' {
.execute;
# https://github.com/perl6/DBIish/issues/93
eager .allrows: :array-of-hash;
}
}
method module-toast ($name, $rakudo-long) {
with $!dbh.prepare:
'SELECT * FROM toast where module = ? and rakudo_long = ?' {
.execute: $name||'', $rakudo-long||'';
(eager .allrows: :array-of-hash).head || ();
}
}
method DESTROY { quietly try self.close }
method close {
$!dbh.dispose;
self
}