mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-07-27 18:12:29 +08:00

git-subtree-dir: _regroup/trilium-db-compare git-subtree-mainline: 3e992736d5eb745510e1caaeeca85ef8e6e10d97 git-subtree-split: 22d59127f91a588dc5ce9555b7551e428df6a97a
89 lines
1.9 KiB
JavaScript
89 lines
1.9 KiB
JavaScript
"use strict";
|
|
|
|
async function getSingleResult(db, query, params = []) {
|
|
return await wrap(db, async db => db.get(query, ...params));
|
|
}
|
|
|
|
async function getSingleResultOrNull(db, query, params = []) {
|
|
const all = await wrap(db, async db => db.all(query, ...params));
|
|
|
|
return all.length > 0 ? all[0] : null;
|
|
}
|
|
|
|
async function getSingleValue(db, query, params = []) {
|
|
const row = await getSingleResultOrNull(db, query, params);
|
|
|
|
if (!row) {
|
|
return null;
|
|
}
|
|
|
|
return row[Object.keys(row)[0]];
|
|
}
|
|
|
|
async function getResults(db, query, params = []) {
|
|
return await wrap(db, async db => db.all(query, ...params));
|
|
}
|
|
|
|
async function getIndexed(db, column, query, params = []) {
|
|
const results = await getResults(db, query, params);
|
|
|
|
const map = {};
|
|
|
|
for (const row of results) {
|
|
map[row[column]] = row;
|
|
}
|
|
|
|
return map;
|
|
}
|
|
|
|
async function getMap(db, query, params = []) {
|
|
const map = {};
|
|
const results = await getResults(db, query, params);
|
|
|
|
for (const row of results) {
|
|
const keys = Object.keys(row);
|
|
|
|
map[row[keys[0]]] = row[keys[1]];
|
|
}
|
|
|
|
return map;
|
|
}
|
|
|
|
async function getFlattenedResults(db, key, query, params = []) {
|
|
const list = [];
|
|
const result = await getResults(db, query, params);
|
|
|
|
for (const row of result) {
|
|
list.push(row[key]);
|
|
}
|
|
|
|
return list;
|
|
}
|
|
|
|
async function execute(db, query, params = []) {
|
|
return await wrap(db, async db => db.run(query, ...params));
|
|
}
|
|
|
|
async function wrap(db, func) {
|
|
const thisError = new Error();
|
|
|
|
try {
|
|
return await func(db);
|
|
}
|
|
catch (e) {
|
|
console.error("Error executing query. Inner exception: " + e.stack + thisError.stack);
|
|
|
|
throw thisError;
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
getSingleValue,
|
|
getSingleResult,
|
|
getSingleResultOrNull,
|
|
getResults,
|
|
getIndexed,
|
|
getMap,
|
|
getFlattenedResults,
|
|
execute
|
|
}; |