Elian Doran 10319065ee Add '_regroup/trilium-db-compare/' from commit '22d59127f91a588dc5ce9555b7551e428df6a97a'
git-subtree-dir: _regroup/trilium-db-compare
git-subtree-mainline: 3e992736d5eb745510e1caaeeca85ef8e6e10d97
git-subtree-split: 22d59127f91a588dc5ce9555b7551e428df6a97a
2025-05-03 03:29:42 +03:00

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
};