diff --git a/public/javascripts/dialogs/sql_console.js b/public/javascripts/dialogs/sql_console.js
index 0f4792bde..171b57d57 100644
--- a/public/javascripts/dialogs/sql_console.js
+++ b/public/javascripts/dialogs/sql_console.js
@@ -20,15 +20,22 @@ const sqlConsole = (function() {
async function execute() {
const sqlQuery = queryEl.val();
- const results = await server.post("sql/execute", {
+ const result = await server.post("sql/execute", {
query: sqlQuery
});
+ if (!result.success) {
+ showError(result.error);
+ return;
+ }
+
+ const rows = result.rows;
+
resultHeadEl.empty();
resultBodyEl.empty();
- if (results.length > 0) {
- const result = results[0];
+ if (rows.length > 0) {
+ const result = rows[0];
const rowEl = $("
");
for (const key in result) {
@@ -38,7 +45,7 @@ const sqlConsole = (function() {
resultHeadEl.append(rowEl);
}
- for (const result of results) {
+ for (const result of rows) {
const rowEl = $("
");
for (const key in result) {
diff --git a/routes/api/sql.js b/routes/api/sql.js
index b4c735fd7..9aab0a140 100644
--- a/routes/api/sql.js
+++ b/routes/api/sql.js
@@ -8,7 +8,18 @@ const sql = require('../../services/sql');
router.post('/execute', auth.checkApiAuth, async (req, res, next) => {
const query = req.body.query;
- res.send(await sql.getResults(query));
+ try {
+ res.send({
+ success: true,
+ rows: await sql.getResults(query)
+ });
+ }
+ catch (e) {
+ res.send({
+ success: false,
+ error: e.message
+ });
+ }
});
module.exports = router;
\ No newline at end of file
diff --git a/services/sql.js b/services/sql.js
index f24c17726..03686a0dd 100644
--- a/services/sql.js
+++ b/services/sql.js
@@ -192,6 +192,8 @@ async function wrap(func) {
catch (e) {
log.error("Error executing query. Inner exception: " + e.stack + thisError.stack);
+ thisError.message = e.stack;
+
throw thisError;
}
}