Notes/src/routes/api/sql.js

65 lines
1.4 KiB
JavaScript
Raw Normal View History

2017-12-14 20:38:56 -05:00
"use strict";
const sql = require('../../services/sql');
2021-06-06 22:15:51 +02:00
const becca = require("../../becca/becca");
const NotFoundError = require("../../errors/not_found_error");
2017-12-14 20:38:56 -05:00
2020-06-20 12:31:38 +02:00
function getSchema() {
const tableNames = sql.getColumn(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name`);
const tables = [];
for (const tableName of tableNames) {
tables.push({
name: tableName,
2020-06-20 12:31:38 +02:00
columns: sql.getRows(`PRAGMA table_info(${tableName})`)
});
}
return tables;
}
2020-06-20 12:31:38 +02:00
function execute(req) {
2021-05-02 11:23:58 +02:00
const note = becca.getNote(req.params.noteId);
if (!note) {
throw new NotFoundError(`Note '${req.params.noteId}' was not found.`);
}
const queries = note.getContent().split("\n---");
2017-12-14 20:38:56 -05:00
try {
const results = [];
for (let query of queries) {
query = query.trim();
if (!query) {
2019-12-09 21:31:38 +01:00
continue;
}
if (query.toLowerCase().startsWith('select')) {
results.push(sql.getRows(query));
}
else {
results.push(sql.execute(query));
}
}
return {
success: true,
results
};
}
catch (e) {
return {
success: false,
error: e.message
};
}
}
2017-12-14 20:38:56 -05:00
module.exports = {
getSchema,
execute
2020-06-20 12:31:38 +02:00
};