From e2490f99754d9d6aec3fedadd0e23886467f0348 Mon Sep 17 00:00:00 2001 From: zadam Date: Sat, 23 May 2020 23:57:59 +0200 Subject: [PATCH] faster implementation of ancestors --- src/services/search/expressions/descendant_of.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/services/search/expressions/descendant_of.js b/src/services/search/expressions/descendant_of.js index 0d7298077..51e01748a 100644 --- a/src/services/search/expressions/descendant_of.js +++ b/src/services/search/expressions/descendant_of.js @@ -2,6 +2,7 @@ const Expression = require('./expression'); const NoteSet = require('../note_set'); +const noteCache = require('../../note_cache/note_cache'); class DescendantOfExp extends Expression { constructor(subExpression) { @@ -11,19 +12,16 @@ class DescendantOfExp extends Expression { } execute(inputNoteSet, searchContext) { - const resNoteSet = new NoteSet(); + const subInputNoteSet = new NoteSet(Object.values(noteCache.notes)); + const subResNoteSet = this.subExpression.execute(subInputNoteSet, searchContext); - for (const note of inputNoteSet.notes) { - const subInputNoteSet = new NoteSet(note.ancestors); + const subTreeNoteSet = new NoteSet(); - const subResNoteSet = this.subExpression.execute(subInputNoteSet, searchContext); - - if (subResNoteSet.notes.length > 0) { - resNoteSet.add(note); - } + for (const note of subResNoteSet.notes) { + subTreeNoteSet.addAll(note.subtreeNotes); } - return resNoteSet; + return inputNoteSet.intersection(subTreeNoteSet); } }