ability to run multiple queries (and get multiple result sets) from SQL console

This commit is contained in:
zadam 2019-12-08 11:20:44 +01:00
parent afe44a6fe8
commit fab959539a
3 changed files with 34 additions and 23 deletions

View File

@ -6,9 +6,8 @@ import utils from "../services/utils.js";
const $dialog = $("#sql-console-dialog"); const $dialog = $("#sql-console-dialog");
const $query = $('#sql-console-query'); const $query = $('#sql-console-query');
const $executeButton = $('#sql-console-execute'); const $executeButton = $('#sql-console-execute');
const $resultHead = $('#sql-console-results thead');
const $resultBody = $('#sql-console-results tbody');
const $tables = $("#sql-console-tables"); const $tables = $("#sql-console-tables");
const $resultContainer = $("#result-container");
let codeEditor; let codeEditor;
@ -45,6 +44,10 @@ async function initEditor() {
codeEditor.setOption("mode", "text/x-sqlite"); codeEditor.setOption("mode", "text/x-sqlite");
CodeMirror.autoLoadMode(codeEditor, "sql"); CodeMirror.autoLoadMode(codeEditor, "sql");
codeEditor.setValue(`SELECT title, isProtected, type, mime FROM notes WHERE noteId = 'root';
---
SELECT noteId, parentNoteId, notePosition, prefix FROM branches WHERE branchId = 'root';`);
} }
codeEditor.focus(); codeEditor.focus();
@ -70,30 +73,36 @@ async function execute() {
toastService.showMessage("Query was executed successfully."); toastService.showMessage("Query was executed successfully.");
} }
const rows = result.rows; const results = result.results;
$resultHead.empty(); $resultContainer.empty();
$resultBody.empty();
for (const rows of results) {
if (rows.length === 0) {
continue;
}
const $table = $('<table class="table table-striped">');
$resultContainer.append($table);
if (rows.length > 0) {
const result = rows[0]; const result = rows[0];
const rowEl = $("<tr>"); const $row = $("<tr>");
for (const key in result) { for (const key in result) {
rowEl.append($("<th>").html(key)); $row.append($("<th>").html(key));
} }
$resultHead.append(rowEl); $table.append($row);
}
for (const result of rows) { for (const result of rows) {
const rowEl = $("<tr>"); const $row = $("<tr>");
for (const key in result) { for (const key in result) {
rowEl.append($("<td>").html(result[key])); $row.append($("<td>").html(result[key]));
}
$table.append($row);
} }
$resultBody.append(rowEl);
} }
} }

View File

@ -17,12 +17,18 @@ async function getSchema() {
} }
async function execute(req) { async function execute(req) {
const query = req.body.query; const queries = req.body.query.split("\n---");
try { try {
const results = [];
for (const query of queries) {
results.push(await sql.getRows(query));
}
return { return {
success: true, success: true,
rows: await sql.getRows(query) results
}; };
} }
catch (e) { catch (e) {

View File

@ -19,11 +19,7 @@
<button class="btn btn-danger" id="sql-console-execute">Execute <kbd>CTRL+ENTER</kbd></button> <button class="btn btn-danger" id="sql-console-execute">Execute <kbd>CTRL+ENTER</kbd></button>
</div> </div>
<div style="width: 100%; overflow: auto;"> <!-- This is necessary for the table to be scrollable --> <div id="result-container" style="width: 100%; overflow: auto;"> <!-- This is necessary for the table to be scrollable -->
<table id="sql-console-results" class="table table-striped">
<thead></thead>
<tbody></tbody>
</table>
</div> </div>
</div> </div>
</div> </div>