66 lines
1.5 KiB
JavaScript
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;
|