Notes/src/share/shaca/shaca_loader.js

65 lines
1.8 KiB
JavaScript
Raw Normal View History

2021-10-16 22:13:34 +02:00
"use strict";
2021-10-17 14:44:59 +02:00
const sql = require('../sql');
2021-10-16 22:13:34 +02:00
const shaca = require('./shaca.js');
2021-10-17 14:44:59 +02:00
const log = require('../../services/log');
2021-10-16 22:13:34 +02:00
const Note = require('./entities/note');
const Branch = require('./entities/branch');
const Attribute = require('./entities/attribute');
2021-10-17 14:44:59 +02:00
const shareRoot = require('../share_root');
2021-10-16 22:13:34 +02:00
function load() {
const start = Date.now();
shaca.reset();
// using raw query and passing arrays to avoid allocating new objects
2021-10-17 14:44:59 +02:00
const noteIds = sql.getColumn(`
WITH RECURSIVE
tree(noteId) AS (
SELECT ?
UNION
SELECT branches.noteId FROM branches
JOIN tree ON branches.parentNoteId = tree.noteId
WHERE branches.isDeleted = 0
)
SELECT noteId FROM tree`, [shareRoot.SHARE_ROOT_NOTE_ID]);
2021-10-16 22:13:34 +02:00
2021-10-17 14:44:59 +02:00
if (noteIds.length === 0) {
shaca.loaded = true;
2021-10-16 22:13:34 +02:00
return;
}
2021-10-17 14:44:59 +02:00
const noteIdStr = noteIds.map(noteId => `'${noteId}'`).join(",");
2021-10-16 22:13:34 +02:00
2021-12-06 22:53:17 +01:00
for (const row of sql.getRawRows(`SELECT noteId, title, type, mime, utcDateModified FROM notes WHERE isDeleted = 0 AND noteId IN (${noteIdStr})`)) {
2021-10-17 14:44:59 +02:00
new Note(row);
2021-10-16 22:13:34 +02:00
}
2021-12-06 22:53:17 +01:00
for (const row of sql.getRawRows(`SELECT branchId, noteId, parentNoteId, prefix, isExpanded, utcDateModified FROM branches WHERE isDeleted = 0 AND noteId IN (${noteIdStr}) ORDER BY notePosition`)) {
2021-10-17 14:44:59 +02:00
new Branch(row);
2021-10-16 22:13:34 +02:00
}
2021-10-17 14:44:59 +02:00
// TODO: add filter for allowed attributes
for (const row of sql.getRawRows(`SELECT attributeId, noteId, type, name, value, isInheritable, position, utcDateModified FROM attributes WHERE isDeleted = 0 AND noteId IN (${noteIdStr})`, [])) {
new Attribute(row);
2021-10-16 22:13:34 +02:00
}
2021-10-17 14:44:59 +02:00
shaca.loaded = true;
2021-10-16 22:13:34 +02:00
2021-10-17 14:44:59 +02:00
log.info(`Shaca load took ${Date.now() - start}ms`);
2021-10-16 22:13:34 +02:00
}
2021-10-17 14:44:59 +02:00
function ensureLoad() {
if (!shaca.loaded) {
load();
2021-10-16 22:13:34 +02:00
}
}
module.exports = {
load,
2021-10-17 14:44:59 +02:00
ensureLoad
2021-10-16 22:13:34 +02:00
};