fix for clones & optimizations

This commit is contained in:
azivner 2018-04-16 23:34:56 -04:00
parent b4005a7ffe
commit 85a9748291
3 changed files with 14 additions and 11 deletions

View File

@ -36,20 +36,20 @@ class NoteShort {
return await this.treeCache.getBranches(branchIds); return await this.treeCache.getBranches(branchIds);
} }
async __getNotes(noteIds) { getParentNoteIds() {
if (!noteIds) { return this.treeCache.parents[this.noteId] || [];
return [];
}
return this.treeCache.getNotes(noteIds);
} }
async getParentNotes() { async getParentNotes() {
return this.__getNotes(this.treeCache.parents[this.noteId]); return await this.treeCache.getNotes(this.getParentNoteIds());
}
getChildNoteIds() {
return this.treeCache.children[this.noteId] || [];
} }
async getChildNotes() { async getChildNotes() {
return this.__getNotes(this.treeCache.children[this.noteId]); return await this.treeCache.getNotes(this.getChildNoteIds());
} }
get toString() { get toString() {

View File

@ -94,7 +94,7 @@ async function getExtraClasses(note) {
extraClasses.push("protected"); extraClasses.push("protected");
} }
if ((await note.getParentNotes()).length > 1) { if (note.getParentNoteIds().length > 1) {
extraClasses.push("multiple-parents"); extraClasses.push("multiple-parents");
} }

View File

@ -19,12 +19,15 @@ async function getNotes(noteIds) {
async function getRelations(noteIds) { async function getRelations(noteIds) {
const questionMarks = noteIds.map(() => "?").join(","); const questionMarks = noteIds.map(() => "?").join(",");
const doubledNoteIds = noteIds.concat(noteIds);
return await sql.getRows(`SELECT branchId, noteId AS 'childNoteId', parentNoteId FROM branches WHERE isDeleted = 0 return await sql.getRows(`SELECT branchId, noteId AS 'childNoteId', parentNoteId FROM branches WHERE isDeleted = 0
AND parentNoteId IN (${questionMarks})`, noteIds); AND (parentNoteId IN (${questionMarks}) OR noteId IN (${questionMarks}))`, doubledNoteIds);
} }
async function getTree() { async function getTree() {
// we fetch all branches of notes, even if that particular branch isn't visible
// this allows us to e.g. detect and properly display clones
const branches = await sql.getRows(` const branches = await sql.getRows(`
WITH RECURSIVE WITH RECURSIVE
tree(branchId, noteId, isExpanded) AS ( tree(branchId, noteId, isExpanded) AS (
@ -34,7 +37,7 @@ async function getTree() {
JOIN tree ON branches.parentNoteId = tree.noteId JOIN tree ON branches.parentNoteId = tree.noteId
WHERE tree.isExpanded = 1 AND branches.isDeleted = 0 WHERE tree.isExpanded = 1 AND branches.isDeleted = 0
) )
SELECT branches.* FROM tree JOIN branches USING(branchId);`); SELECT branches.* FROM tree JOIN branches USING(noteId)`);
const noteIds = branches.map(b => b.noteId); const noteIds = branches.map(b => b.noteId);