sql console implementation

This commit is contained in:
azivner 2017-12-14 20:38:56 -05:00
parent 45fba6d7f8
commit 581f406a24
5 changed files with 87 additions and 1 deletions

View File

@ -0,0 +1,59 @@
"use strict";
const sqlConsole = (function() {
const dialogEl = $("#sql-console-dialog");
const queryEl = $('#sql-console-query');
const executeButton = $('#sql-console-execute');
const resultHeadEl = $('#sql-console-results thead');
const resultBodyEl = $('#sql-console-results tbody');
function showDialog() {
glob.activeDialog = dialogEl;
dialogEl.dialog({
modal: true,
width: $(window).width(),
height: $(window).height()
});
}
async function execute() {
const sqlQuery = queryEl.val();
const results = await server.post("sql/execute", {
query: sqlQuery
});
resultHeadEl.empty();
resultBodyEl.empty();
if (results.length > 0) {
const result = results[0];
const rowEl = $("<tr>");
for (const key in result) {
rowEl.append($("<th>").html(key));
}
resultHeadEl.append(rowEl);
}
for (const result of results) {
const rowEl = $("<tr>");
for (const key in result) {
rowEl.append($("<td>").html(result[key]));
}
resultBodyEl.append(rowEl);
}
}
$(document).bind('keydown', 'alt+o', showDialog);
executeButton.click(execute);
return {
showDialog
};
})();

14
routes/api/sql.js Normal file
View File

@ -0,0 +1,14 @@
"use strict";
const express = require('express');
const router = express.Router();
const auth = require('../../services/auth');
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));
});
module.exports = router;

View File

@ -21,6 +21,7 @@ const appInfoRoute = require('./api/app_info');
const exportRoute = require('./api/export');
const importRoute = require('./api/import');
const setupApiRoute = require('./api/setup');
const sqlRoute = require('./api/sql');
function register(app) {
app.use('/', indexRoute);
@ -45,6 +46,7 @@ function register(app) {
app.use('/api/export', exportRoute);
app.use('/api/import', importRoute);
app.use('/api/setup', setupApiRoute);
app.use('/api/sql', sqlRoute);
}
module.exports = {

View File

@ -1 +1 @@
module.exports = { build_date:"2017-12-13T23:36:38-05:00", build_revision: "180a7432caa0ca43986a24e7f911a64c48f8a134" };
module.exports = { build_date:"2017-12-14T20:10:49-05:00", build_revision: "45fba6d7f8a53d4ebbd48b1205442410b6f1dc46" };

View File

@ -273,6 +273,16 @@
</form>
</div>
<div id="sql-console-dialog" title="Event log" style="display: none; padding: 20px;">
<textarea style="width: 100%; height: 100px" id="sql-console-query"></textarea>
<button class="btn btn-danger" id="sql-console-execute">Execute</button>
<table id="sql-console-results" class="table table-striped" style="overflow: scroll; width: 100%;">
<thead></thead>
<tbody></tbody>
</table>
</div>
<div id="tooltip" style="display: none;"></div>
<script type="text/javascript">
@ -331,6 +341,7 @@
<script src="javascripts/dialogs/recent_changes.js"></script>
<script src="javascripts/dialogs/event_log.js"></script>
<script src="javascripts/dialogs/edit_tree_prefix.js"></script>
<script src="javascripts/dialogs/sql_console.js"></script>
<script src="javascripts/link.js"></script>
<script src="javascripts/sync.js"></script>