aboutsummaryrefslogtreecommitdiff
path: root/lib/App/MediaControl/DB.rakumod
blob: b5771bbe0d4ea0c467d325e79a8468ccc180909d (plain)
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
use v6.d;
use DB::SQLite;
 
class App::MediaControl::DB {
    has DB::SQLite $.pool is required;
 
    method !db(Callable $code{
        my $conn = self.pool.db;
        # we need an explicit LEAVE block because on 2021.10, `will 
        # leave { .finish }` kills precomp 
        LEAVE { .finish with $conn };
        $conn.begin;
        $conn.execute('PRAGMA foreign_keys=true');
        my $result = $code($connwith $conn;
        $conn.commit;
        return $result;
    }
 
    method ensure-schema() {
        return if self!db: { .query(
            'SELECT 1 FROM sqlite_schema WHERE type=? AND tbl_name=?',
            'table''files',
        ).value.defined };
 
        self!db: { .execute(q:to/END/); 
        CREATE TABLE files (
            id INTEGER PRIMARY KEY,
            parent_id INTEGER NULL REFERENCES files(id),
            is_dir BOOLEAN NOT NULL,
            name TEXT NOT NULL,
            matpath TEXT NOT NULL,
            watched_time INTEGER NULL
        )
        END
        }
    }
}