mirror of
https://github.com/zadam/trilium.git
synced 2025-10-31 18:36:30 +01:00
fix DB setup
This commit is contained in:
@@ -2,12 +2,11 @@
|
||||
|
||||
const log = require('./log');
|
||||
const cls = require('./cls');
|
||||
const Database = require('better-sqlite3');
|
||||
const dataDir = require('./data_dir');
|
||||
|
||||
let dbConnection;
|
||||
|
||||
function setDbConnection(connection) {
|
||||
dbConnection = connection;
|
||||
}
|
||||
const dbConnection = new Database(dataDir.DOCUMENT_PATH);
|
||||
dbConnection.pragma('journal_mode = WAL');
|
||||
|
||||
[`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `SIGTERM`].forEach(eventType => {
|
||||
process.on(eventType, () => {
|
||||
@@ -88,7 +87,7 @@ function rollback() {
|
||||
}
|
||||
|
||||
function getRow(query, params = []) {
|
||||
return wrap(() => stmt(query).get(params), query);
|
||||
return wrap(query, s => s.get(params));
|
||||
}
|
||||
|
||||
function getRowOrNull(query, params = []) {
|
||||
@@ -135,7 +134,11 @@ function getManyRows(query, params) {
|
||||
}
|
||||
|
||||
function getRows(query, params = []) {
|
||||
return wrap(() => stmt(query).all(params), query);
|
||||
return wrap(query, s => s.all(params));
|
||||
}
|
||||
|
||||
function iterateRows(query, params = []) {
|
||||
return stmt(query).iterate(params);
|
||||
}
|
||||
|
||||
function getMap(query, params = []) {
|
||||
@@ -171,7 +174,7 @@ function getColumn(query, params = []) {
|
||||
function execute(query, params = []) {
|
||||
startTransactionIfNecessary();
|
||||
|
||||
return wrap(() => stmt(query).run(params), query);
|
||||
return wrap(query, s => s.run(params));
|
||||
}
|
||||
|
||||
function executeWithoutTransaction(query, params = []) {
|
||||
@@ -181,57 +184,39 @@ function executeWithoutTransaction(query, params = []) {
|
||||
function executeMany(query, params) {
|
||||
startTransactionIfNecessary();
|
||||
|
||||
// essentially just alias
|
||||
getManyRows(query, params);
|
||||
}
|
||||
|
||||
function executeScript(query) {
|
||||
startTransactionIfNecessary();
|
||||
|
||||
return wrap(() => stmt.run(query), query);
|
||||
return dbConnection.exec(query);
|
||||
}
|
||||
|
||||
function wrap(func, query) {
|
||||
if (!dbConnection) {
|
||||
throw new Error("DB connection not initialized yet");
|
||||
}
|
||||
function wrap(query, func) {
|
||||
const startTimestamp = Date.now();
|
||||
|
||||
const thisError = new Error();
|
||||
const result = func(stmt(query));
|
||||
|
||||
try {
|
||||
const startTimestamp = Date.now();
|
||||
const milliseconds = Date.now() - startTimestamp;
|
||||
|
||||
const result = func(dbConnection);
|
||||
|
||||
const milliseconds = Date.now() - startTimestamp;
|
||||
if (milliseconds >= 300) {
|
||||
if (query.includes("WITH RECURSIVE")) {
|
||||
log.info(`Slow recursive query took ${milliseconds}ms.`);
|
||||
}
|
||||
else {
|
||||
log.info(`Slow query took ${milliseconds}ms: ${query}`);
|
||||
}
|
||||
if (milliseconds >= 100) {
|
||||
if (query.includes("WITH RECURSIVE")) {
|
||||
log.info(`Slow recursive query took ${milliseconds}ms.`);
|
||||
}
|
||||
else {
|
||||
log.info(`Slow query took ${milliseconds}ms: ${query}`);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
catch (e) {
|
||||
log.error("Error executing query. Inner exception: " + e.stack + thisError.stack);
|
||||
|
||||
thisError.message = e.stack;
|
||||
|
||||
throw thisError;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function startTransactionIfNecessary() {
|
||||
if (!cls.get('isTransactional')
|
||||
|| cls.get('isInTransaction')) {
|
||||
if (!cls.get('isTransactional') || dbConnection.inTransaction) {
|
||||
return;
|
||||
}
|
||||
|
||||
cls.set('isInTransaction', true);
|
||||
|
||||
beginTransaction();
|
||||
}
|
||||
|
||||
@@ -246,7 +231,7 @@ function transactional(func) {
|
||||
try {
|
||||
const ret = func();
|
||||
|
||||
if (cls.get('isInTransaction')) {
|
||||
if (dbConnection.inTransaction) {
|
||||
commit();
|
||||
|
||||
// note that sync rows sent from this action will be sent again by scheduled periodic ping
|
||||
@@ -256,7 +241,7 @@ function transactional(func) {
|
||||
return ret;
|
||||
}
|
||||
catch (e) {
|
||||
if (cls.get('isInTransaction')) {
|
||||
if (dbConnection.inTransaction) {
|
||||
rollback();
|
||||
}
|
||||
|
||||
@@ -264,22 +249,17 @@ function transactional(func) {
|
||||
}
|
||||
finally {
|
||||
cls.namespace.set('isTransactional', false);
|
||||
|
||||
if (cls.namespace.get('isInTransaction')) {
|
||||
cls.namespace.set('isInTransaction', false);
|
||||
// resolving even for rollback since this is just semaphore for allowing another write transaction to proceed
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
setDbConnection,
|
||||
insert,
|
||||
replace,
|
||||
getValue,
|
||||
getRow,
|
||||
getRowOrNull,
|
||||
getRows,
|
||||
iterateRows,
|
||||
getManyRows,
|
||||
getMap,
|
||||
getColumn,
|
||||
|
||||
Reference in New Issue
Block a user