all DB operations now wait for DB connection

This commit is contained in:
azivner 2017-11-17 19:09:51 -05:00
parent c4a9aaa52d
commit 2f2969b2a1

View File

@ -1,10 +1,15 @@
"use strict"; "use strict";
const db = require('sqlite');
const utils = require('./utils'); const utils = require('./utils');
const log = require('./log'); const log = require('./log');
const dataDir = require('./data_dir'); 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) { async function insert(table_name, rec, replace = false) {
const keys = Object.keys(rec); const keys = Object.keys(rec);
if (keys.length === 0) { if (keys.length === 0) {
@ -27,23 +32,23 @@ async function replace(table_name, rec) {
} }
async function beginTransaction() { async function beginTransaction() {
return await db.run("BEGIN"); return await wrap(async db => db.run("BEGIN"));
} }
async function commit() { async function commit() {
return await db.run("COMMIT"); return await wrap(async db => db.run("COMMIT"));
} }
async function rollback() { async function rollback() {
return await db.run("ROLLBACK"); return await wrap(async db => db.run("ROLLBACK"));
} }
async function getSingleResult(query, params = []) { 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 = []) { 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; return all.length > 0 ? all[0] : null;
} }
@ -59,7 +64,7 @@ async function getSingleValue(query, params = []) {
} }
async function getResults(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 = []) { async function getMap(query, params = []) {
@ -87,11 +92,11 @@ async function getFlattenedResults(key, query, params = []) {
} }
async function execute(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) { async function executeScript(query) {
return await wrap(async () => db.exec(query)); return await wrap(async db => db.exec(query));
} }
async function remove(tableName, noteId) { async function remove(tableName, noteId) {
@ -117,15 +122,15 @@ async function deleteRecentAudits(category, browserId, noteId) {
} }
async function wrap(func) { async function wrap(func) {
const error = new Error(); const db = await dbReady;
try { try {
return await func(); return await func(db);
} }
catch (e) { 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 dbReady
.then(async () => { .then(async () => {
const tableResults = await getResults("SELECT name FROM sqlite_master WHERE type='table' AND name='notes'"); const tableResults = await getResults("SELECT name FROM sqlite_master WHERE type='table' AND name='notes'");