mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 18:36:30 +01:00 
			
		
		
		
	all DB operations now wait for DB connection
This commit is contained in:
		| @@ -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'"); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user