diff --git a/src/services/backend_script_api.js b/src/services/backend_script_api.js index dadc40c6a7..c457bbaf67 100644 --- a/src/services/backend_script_api.js +++ b/src/services/backend_script_api.js @@ -426,6 +426,15 @@ function BackendScriptApi(currentNote, apiParams) { * @return {{syncVersion, appVersion, buildRevision, dbVersion, dataDirectory, buildDate}|*} - object representing basic info about running Trilium version */ this.getAppInfo = () => appInfo + + /** + * This object contains "at your risk" and "no BC guarantees" objects for advanced use cases. + * + * @type {{becca: Becca}} + */ + this.__private = { + becca + } } module.exports = BackendScriptApi; diff --git a/src/services/consistency_checks.js b/src/services/consistency_checks.js index dbf4b44783..0731989c1f 100644 --- a/src/services/consistency_checks.js +++ b/src/services/consistency_checks.js @@ -367,26 +367,30 @@ class ConsistencyChecks { } }); - this.findAndFixIssues(` - SELECT notes.noteId, notes.type, notes.mime - FROM notes - JOIN note_contents USING (noteId) - WHERE isDeleted = 0 - AND isProtected = 0 - AND content IS NULL`, - ({noteId, type, mime}) => { - if (this.autoFix) { - const note = becca.getNote(noteId); - const blankContent = getBlankContent(false, type, mime); - note.setContent(blankContent); + if (sqlInit.getDbSize() < 500000) { + // querying for "content IS NULL" is expensive since content is not indexed. See e.g. https://github.com/zadam/trilium/issues/2887 - this.reloadNeeded = true; + this.findAndFixIssues(` + SELECT notes.noteId, notes.type, notes.mime + FROM notes + JOIN note_contents USING (noteId) + WHERE isDeleted = 0 + AND isProtected = 0 + AND content IS NULL`, + ({noteId, type, mime}) => { + if (this.autoFix) { + const note = becca.getNote(noteId); + const blankContent = getBlankContent(false, type, mime); + note.setContent(blankContent); - logFix(`Note ${noteId} content was set to "${blankContent}" since it was null even though it is not deleted`); - } else { - logError(`Note ${noteId} content is null even though it is not deleted`); - } - }); + this.reloadNeeded = true; + + logFix(`Note ${noteId} content was set to "${blankContent}" since it was null even though it is not deleted`); + } else { + logError(`Note ${noteId} content is null even though it is not deleted`); + } + }); + } this.findAndFixIssues(` SELECT note_revisions.noteRevisionId diff --git a/src/services/sql_init.js b/src/services/sql_init.js index 013f736b7a..66bc98fe9b 100644 --- a/src/services/sql_init.js +++ b/src/services/sql_init.js @@ -178,7 +178,11 @@ dbReady.then(() => { setInterval(() => optimize(), 10 * 60 * 60 * 1000); }); -log.info("DB size: " + sql.getValue("SELECT page_count * page_size / 1000 as size FROM pragma_page_count(), pragma_page_size()") + " KB"); +function getDbSize() { + return sql.getValue("SELECT page_count * page_size / 1000 as size FROM pragma_page_count(), pragma_page_size()"); +} + +log.info(`DB size: ${getDbSize()} KB`); module.exports = { dbReady, @@ -186,5 +190,6 @@ module.exports = { isDbInitialized, createInitialDatabase, createDatabaseForSync, - setDbAsInitialized + setDbAsInitialized, + getDbSize };