66 lines
1.5 KiB
JavaScript

const fs = require('fs');
const pathModule = require('path');
const sqlite3 = require('sqlite3');
class DatabaseClient {
constructor({ path, busyTimeout = 5000 }) {
const dbDir = path ? pathModule.dirname(path) : null;
if (dbDir && dbDir !== '.') {
fs.mkdirSync(dbDir, { recursive: true });
}
this.db = new sqlite3.Database(path, (err) => {
if (err) {
console.error('unable to open sqlite file', err);
}
});
this.db.configure('busyTimeout', busyTimeout);
}
run(sql, params = []) {
return new Promise((resolve, reject) => {
this.db.run(sql, params, function (err) {
if (err) return reject(err);
resolve({ lastID: this.lastID, changes: this.changes });
});
});
}
get(sql, params = []) {
return new Promise((resolve, reject) => {
this.db.get(sql, params, (err, row) => {
if (err) return reject(err);
resolve(row);
});
});
}
all(sql, params = []) {
return new Promise((resolve, reject) => {
this.db.all(sql, params, (err, rows) => {
if (err) return reject(err);
resolve(rows);
});
});
}
exec(sql) {
return new Promise((resolve, reject) => {
this.db.exec(sql, (err) => {
if (err) return reject(err);
resolve();
});
});
}
close() {
return new Promise((resolve, reject) => {
this.db.close((err) => {
if (err) return reject(err);
resolve();
});
});
}
}
module.exports = DatabaseClient;