diff --git a/package.json b/package.json index d2b2f0d4d..40ce85d31 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "imagemin-pngquant": "8.0.0", "ini": "1.3.5", "is-svg": "4.2.1", - "jimp": "0.10.0", + "jimp": "0.10.1", "mime-types": "2.1.26", "multer": "1.4.2", "node-abi": "2.15.0", @@ -77,7 +77,7 @@ "yazl": "^2.5.1" }, "devDependencies": { - "electron": "9.0.0-beta.13", + "electron": "9.0.0-beta.14", "electron-builder": "22.4.1", "electron-packager": "14.2.1", "electron-rebuild": "1.10.1", diff --git a/src/entities/attribute.js b/src/entities/attribute.js index 411ed704b..b401fd27e 100644 --- a/src/entities/attribute.js +++ b/src/entities/attribute.js @@ -45,11 +45,7 @@ class Attribute extends Entity { * @returns {Promise} */ async getNote() { - if (!this.__note) { - this.__note = await repository.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.noteId]); - } - - return this.__note; + return await repository.getNote(this.noteId); } /** @@ -64,11 +60,7 @@ class Attribute extends Entity { return null; } - if (!this.__targetNote) { - this.__targetNote = await repository.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.value]); - } - - return this.__targetNote; + return await repository.getNote(this.value); } /** diff --git a/src/entities/branch.js b/src/entities/branch.js index 95edccdb5..7950526dc 100644 --- a/src/entities/branch.js +++ b/src/entities/branch.js @@ -28,9 +28,14 @@ class Branch extends Entity { // notePosition is not part of hash because it would produce a lot of updates in case of reordering static get hashedProperties() { return ["branchId", "noteId", "parentNoteId", "isDeleted", "deleteId", "prefix"]; } - /** @returns {Note|null} */ + /** @returns {Promise} */ async getNote() { - return await repository.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.noteId]); + return await repository.getNote(this.noteId); + } + + /** @returns {Promise} */ + async getParentNote() { + return await repository.getNote(this.parentNoteId); } async beforeSaving() { diff --git a/src/entities/note_revision.js b/src/entities/note_revision.js index 3220107f1..488e25885 100644 --- a/src/entities/note_revision.js +++ b/src/entities/note_revision.js @@ -48,7 +48,7 @@ class NoteRevision extends Entity { } async getNote() { - return await repository.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.noteId]); + return await repository.getNote(this.noteId); } /** @returns {boolean} true if the note has string content (not binary) */ diff --git a/src/services/cls.js b/src/services/cls.js index 44201d951..d0d3c8a17 100644 --- a/src/services/cls.js +++ b/src/services/cls.js @@ -37,6 +37,14 @@ function reset() { clsHooked.reset(); } +function getEntityFromCache(entityName, entityId) { + return namespace.get(entityName + '-' + entityId); +} + +function setEntityToCache(entityName, entityId, entity) { + return namespace.set(entityName + '-' + entityId, entity); +} + module.exports = { init, wrap, @@ -46,5 +54,7 @@ module.exports = { isEntityEventsDisabled, reset, getSyncRows, - addSyncRow + addSyncRow, + getEntityFromCache, + setEntityToCache }; \ No newline at end of file diff --git a/src/services/notes.js b/src/services/notes.js index 4a46887c8..10c113a13 100644 --- a/src/services/notes.js +++ b/src/services/notes.js @@ -544,16 +544,22 @@ async function deleteBranch(branch, deleteId, taskContext) { note.deleteId = deleteId; await note.save(); + console.log("Deleting note", note.noteId); + for (const attribute of await note.getOwnedAttributes()) { attribute.isDeleted = true; attribute.deleteId = deleteId; await attribute.save(); + + console.log("Deleting note's", note.noteId, "attribute", attribute.attributeId); } for (const relation of await note.getTargetRelations()) { relation.isDeleted = true; relation.deleteId = deleteId; await relation.save(); + + console.log("Deleting note's", note.noteId, "target relation", relation.attributeId); } return true; diff --git a/src/services/repository.js b/src/services/repository.js index 98effc1a6..75fba38c5 100644 --- a/src/services/repository.js +++ b/src/services/repository.js @@ -37,9 +37,21 @@ async function getEntity(query, params = []) { return entityConstructor.createEntityFromRow(row); } +async function getCachedEntity(entityName, entityId, query) { + let entity = cls.getEntityFromCache(entityName, entityId); + + if (!entity) { + entity = await getEntity(query, [entityId]); + + cls.setEntityToCache(entityName, entityId, entity); + } + + return entity; +} + /** @returns {Promise} */ async function getNote(noteId) { - return await getEntity("SELECT * FROM notes WHERE noteId = ?", [noteId]); + return await getCachedEntity('notes', noteId, "SELECT * FROM notes WHERE noteId = ?"); } /** @returns {Promise} */ @@ -59,17 +71,17 @@ async function getNotes(noteIds) { /** @returns {Promise} */ async function getNoteRevision(noteRevisionId) { - return await getEntity("SELECT * FROM note_revisions WHERE noteRevisionId = ?", [noteRevisionId]); + return await getCachedEntity('note_revisions', noteRevisionId, "SELECT * FROM note_revisions WHERE noteRevisionId = ?"); } /** @returns {Promise} */ async function getBranch(branchId) { - return await getEntity("SELECT * FROM branches WHERE branchId = ?", [branchId]); + return await getCachedEntity('branches', branchId, "SELECT * FROM branches WHERE branchId = ?", [branchId]); } /** @returns {Promise} */ async function getAttribute(attributeId) { - return await getEntity("SELECT * FROM attributes WHERE attributeId = ?", [attributeId]); + return await getCachedEntity('attributes', attributeId, "SELECT * FROM attributes WHERE attributeId = ?"); } /** @returns {Promise} */