From 2f2969b2a1fa080a7555f2dfb7ec8b933f0421fe Mon Sep 17 00:00:00 2001 From: azivner Date: Fri, 17 Nov 2017 19:09:51 -0500 Subject: [PATCH] all DB operations now wait for DB connection --- services/sql.js | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/services/sql.js b/services/sql.js index 305b84f53..34e3c91ad 100644 --- a/services/sql.js +++ b/services/sql.js @@ -1,10 +1,15 @@ "use strict"; -const db = require('sqlite'); const utils = require('./utils'); const log = require('./log'); const dataDir = require('./data_dir'); +const dbReady = (() => { + const db = require('sqlite'); + + return db.open(dataDir.DOCUMENT_PATH, {Promise}).then(() => db); +})(); + async function insert(table_name, rec, replace = false) { const keys = Object.keys(rec); if (keys.length === 0) { @@ -27,23 +32,23 @@ async function replace(table_name, rec) { } async function beginTransaction() { - return await db.run("BEGIN"); + return await wrap(async db => db.run("BEGIN")); } async function commit() { - return await db.run("COMMIT"); + return await wrap(async db => db.run("COMMIT")); } async function rollback() { - return await db.run("ROLLBACK"); + return await wrap(async db => db.run("ROLLBACK")); } async function getSingleResult(query, params = []) { - return await wrap(async () => db.get(query, ...params)); + return await wrap(async db => db.get(query, ...params)); } async function getSingleResultOrNull(query, params = []) { - const all = await wrap(async () => db.all(query, ...params)); + const all = await wrap(async db => db.all(query, ...params)); return all.length > 0 ? all[0] : null; } @@ -59,7 +64,7 @@ async function getSingleValue(query, params = []) { } async function getResults(query, params = []) { - return await wrap(async () => db.all(query, ...params)); + return await wrap(async db => db.all(query, ...params)); } async function getMap(query, params = []) { @@ -87,11 +92,11 @@ async function getFlattenedResults(key, query, params = []) { } async function execute(query, params = []) { - return await wrap(async () => db.run(query, ...params)); + return await wrap(async db => db.run(query, ...params)); } async function executeScript(query) { - return await wrap(async () => db.exec(query)); + return await wrap(async db => db.exec(query)); } async function remove(tableName, noteId) { @@ -117,15 +122,15 @@ async function deleteRecentAudits(category, browserId, noteId) { } async function wrap(func) { - const error = new Error(); + const db = await dbReady; try { - return await func(); + return await func(db); } catch (e) { - log.error("Error executing transaction, executing rollback. Inner exception: " + e.stack + error.stack); + log.error("Error executing query. Inner exception: " + e.stack + error.stack); - throw e; + throw new Error(); } } @@ -149,8 +154,6 @@ async function doInTransaction(func) { } } -const dbReady = db.open(dataDir.DOCUMENT_PATH, { Promise }); - dbReady .then(async () => { const tableResults = await getResults("SELECT name FROM sqlite_master WHERE type='table' AND name='notes'");