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;
LEAVE { .finish with $conn };
$conn.begin;
$conn.execute('PRAGMA foreign_keys=true');
my $result = $code($conn) with $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
}
}
}