diff --git a/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoQueries.js b/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoQueries.js
index 40dd72e483..051fdedcfe 100644
--- a/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoQueries.js
+++ b/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoQueries.js
@@ -53,8 +53,10 @@
var queries = [];
this.each(function(query) {
+ console.log(query.attributes);
queries.push({
value: query.attributes.value,
+ parameter: query.attributes.parameter,
name: query.attributes.name
});
});
@@ -100,6 +102,7 @@
processData: false,
success: function() {
window.progressView.hide();
+ arangoHelper.arangoNotification("Queries successfully imported.");
callback();
},
error: function() {
diff --git a/js/apps/system/_admin/aardvark/APP/frontend/js/templates/queryView.ejs b/js/apps/system/_admin/aardvark/APP/frontend/js/templates/queryView.ejs
index 8e48083046..cb49a05702 100644
--- a/js/apps/system/_admin/aardvark/APP/frontend/js/templates/queryView.ejs
+++ b/js/apps/system/_admin/aardvark/APP/frontend/js/templates/queryView.ejs
@@ -32,6 +32,10 @@
diff --git a/js/apps/system/_admin/aardvark/APP/frontend/js/views/queryView.js b/js/apps/system/_admin/aardvark/APP/frontend/js/views/queryView.js
index 3472a23413..388565fec2 100644
--- a/js/apps/system/_admin/aardvark/APP/frontend/js/views/queryView.js
+++ b/js/apps/system/_admin/aardvark/APP/frontend/js/views/queryView.js
@@ -21,7 +21,6 @@
"click #result-switch": "switchTab",
"click #query-switch": "switchTab",
'click #customs-switch': "switchTab",
-// 'click #explain-switch': "switchTab",
'click #submitQueryButton': 'submitQuery',
'click #explainQueryButton': 'explainQuery',
'click #commentText': 'commentText',
@@ -87,6 +86,9 @@
_.each(this.tableDescription.rows, function(k) {
k.thirdRow = '
';
+ if (k.hasOwnProperty('parameter')) {
+ delete k.parameter;
+ }
});
// escape all columns but the third (which contains HTML)
@@ -96,9 +98,12 @@
},
editCustomQuery: function(e) {
- var queryName = $(e.target).parent().children().first().text();
- var inputEditor = ace.edit("aqlEditor");
+ var queryName = $(e.target).parent().children().first().text(),
+ inputEditor = ace.edit("aqlEditor"),
+ varsEditor = ace.edit("varsEditor");
inputEditor.setValue(this.getCustomQueryValueByName(queryName));
+ varsEditor.setValue(this.getCustomQueryParameterByName(queryName));
+ this.deselect(varsEditor);
this.deselect(inputEditor);
$('#querySelect').val(queryName);
this.switchTab("query-switch");
@@ -147,9 +152,11 @@
},
clearInput: function () {
- var inputEditor = ace.edit("aqlEditor");
- this.setCachedQuery(inputEditor.getValue());
+ var inputEditor = ace.edit("aqlEditor"),
+ varsEditor = ace.edit("varsEditor");
+ this.setCachedQuery(inputEditor.getValue(), varsEditor.getValue());
inputEditor.setValue('');
+ varsEditor.setValue('');
},
smallOutput: function () {
@@ -176,7 +183,6 @@
customQueries: [],
-
tableDescription: {
id: "arangoQueryTable",
titles: ["Name", "Content", ""],
@@ -220,17 +226,34 @@
multiSelectAction: "forEach"
});
+ var varsEditor = ace.edit("varsEditor");
+ varsEditor.getSession().setMode("ace/mode/aql");
+ varsEditor.setFontSize("13px");
+ varsEditor.commands.addCommand({
+ name: "togglecomment",
+ bindKey: {win: "Ctrl-Shift-C", linux: "Ctrl-Shift-C", mac: "Command-Shift-C"},
+ exec: function (editor) {
+ editor.toggleCommentLines();
+ },
+ multiSelectAction: "forEach"
+ });
+
//get cached query if available
- var query = this.getCachedQuery();
- if (query !== null && query !== undefined && query !== "") {
- inputEditor.setValue(query);
+ var queryObject = this.getCachedQuery();
+ if (queryObject !== null && queryObject !== undefined && queryObject !== "") {
+ inputEditor.setValue(queryObject.query);
+ if (queryObject.parameter === '' || queryObject === undefined) {
+ varsEditor.setValue('{}');
+ }
+ else {
+ varsEditor.setValue(queryObject.parameter);
+ }
}
- inputEditor.getSession().selection.on('changeCursor', function () {
- var inputEditor = ace.edit("aqlEditor");
- var session = inputEditor.getSession();
- var cursor = inputEditor.getCursorPosition();
- var token = session.getTokenAt(cursor.row, cursor.column);
+ var changedFunction = function() {
+ var session = inputEditor.getSession(),
+ cursor = inputEditor.getCursorPosition(),
+ token = session.getTokenAt(cursor.row, cursor.column);
if (token) {
if (token.type === "comment") {
$("#commentText i")
@@ -245,8 +268,17 @@
}
}
//cache query in localstorage
- self.setCachedQuery(inputEditor.getValue());
+ self.setCachedQuery(inputEditor.getValue(), varsEditor.getValue());
+ };
+
+ inputEditor.getSession().selection.on('changeCursor', function () {
+ changedFunction();
});
+
+ varsEditor.getSession().selection.on('changeCursor', function () {
+ changedFunction();
+ });
+
$('#queryOutput').resizable({
handles: "s",
ghost: true,
@@ -258,12 +290,13 @@
}
});
- arangoHelper.fixTooltips(".queryTooltips, .icon_arangodb", "top");
+ arangoHelper.fixTooltips(".vars-editor-header i, .queryTooltips, .icon_arangodb", "top");
$('#aqlEditor .ace_text-input').focus();
var windowHeight = $(window).height() - 295;
- $('#aqlEditor').height(windowHeight - 19);
+ $('#aqlEditor').height(windowHeight - 100 - 29);
+ $('#varsEditor').height(100);
$('#queryOutput').height(windowHeight);
inputEditor.resize();
@@ -271,6 +304,7 @@
this.initTabArray();
this.renderSelectboxes();
+ this.deselect(varsEditor);
this.deselect(outputEditor);
this.deselect(inputEditor);
@@ -294,9 +328,13 @@
}
},
- setCachedQuery: function(query) {
- if(typeof(Storage) !== "undefined") {
- localStorage.setItem("cachedQuery", JSON.stringify(query));
+ setCachedQuery: function(query, vars) {
+ if (typeof(Storage) !== "undefined") {
+ var myObject = {
+ query: query,
+ parameter: vars
+ };
+ localStorage.setItem("cachedQuery", JSON.stringify(myObject));
}
},
@@ -345,7 +383,7 @@
exportCustomQueries: function () {
var name, toExport = {}, exportArray = [];
_.each(this.customQueries, function(value, key) {
- exportArray.push({name: value.name, value: value.value});
+ exportArray.push({name: value.name, value: value.value, parameter: value.parameter});
});
toExport = {
"extra": {
@@ -446,7 +484,8 @@
this.collection.each(function(model) {
self.customQueries.push({
name: model.get("name"),
- value: model.get("value")
+ value: model.get("value"),
+ parameter: model.get("parameter")
});
});
},
@@ -457,8 +496,10 @@
//update queries first, before writing
this.refreshAQL();
- var inputEditor = ace.edit("aqlEditor");
- var saveName = $('#new-query-name').val();
+ var inputEditor = ace.edit("aqlEditor"),
+ varsEditor = ace.edit("varsEditor"),
+ saveName = $('#new-query-name').val(),
+ bindVars = varsEditor.getValue();
if ($('#new-query-name').hasClass('invalid-input')) {
return;
@@ -469,9 +510,9 @@
return;
}
- var content = inputEditor.getValue();
+ var content = inputEditor.getValue(),
//check for already existing entry
- var quit = false;
+ quit = false;
$.each(this.customQueries, function (k, v) {
if (v.name === saveName) {
v.value = content;
@@ -482,14 +523,21 @@
if (quit === true) {
//Heiko: Form-Validator - name already taken
- window.modalView.hide();
- return;
+ // Update model and save
+ this.collection.findWhere({name: saveName}).set("value", content);
+ }
+ else {
+ if (bindVars === '' || bindVars === undefined) {
+ bindVars = '{}';
+ }
+
+ this.collection.add({
+ name: saveName,
+ parameter: bindVars,
+ value: content
+ });
}
- this.collection.add({
- name: saveName,
- value: content
- });
this.collection.saveCollectionQueries();
window.modalView.hide();
@@ -518,13 +566,11 @@
},
getCustomQueryValueByName: function (qName) {
- var returnVal;
- $.each(this.customQueries, function (k, v) {
- if (qName === v.name) {
- returnVal = v.value;
- }
- });
- return returnVal;
+ return this.collection.findWhere({name: qName}).get("value");
+ },
+
+ getCustomQueryParameterByName: function (qName) {
+ return this.collection.findWhere({name: qName}).get("parameter");
},
refreshAQL: function(select) {
@@ -540,7 +586,8 @@
},
importSelected: function (e) {
- var inputEditor = ace.edit("aqlEditor");
+ var inputEditor = ace.edit("aqlEditor"),
+ varsEditor = ace.edit("varsEditor");
$.each(this.queries, function (k, v) {
if ($('#' + e.currentTarget.id).val() === v.name) {
inputEditor.setValue(v.value);
@@ -549,6 +596,16 @@
$.each(this.customQueries, function (k, v) {
if ($('#' + e.currentTarget.id).val() === v.name) {
inputEditor.setValue(v.value);
+
+ if (v.hasOwnProperty('parameter')) {
+ if (v.parameter === '' || v.parameter === undefined) {
+ v.parameter = '{}';
+ }
+ varsEditor.setValue(v.parameter);
+ }
+ else {
+ varsEditor.setValue('{}');
+ }
}
});
@@ -610,6 +667,7 @@
readQueryData: function() {
var inputEditor = ace.edit("aqlEditor");
+ var varsEditor = ace.edit("varsEditor");
var selectedText = inputEditor.session.getTextRange(inputEditor.getSelectionRange());
var sizeBox = $('#querySize');
var data = {
@@ -617,6 +675,17 @@
batchSize: parseInt(sizeBox.val(), 10),
id: "currentFrontendQuery"
};
+
+ var bindVars = varsEditor.getValue();
+ try {
+ var params = JSON.parse(bindVars);
+ if (Object.keys(params).length !== 0) {
+ data.bindVars = params;
+ }
+ }
+ catch (e) {
+ arangoHelper.arangoError("Query error", "Could not use bind parameters.");
+ }
return JSON.stringify(data);
},
@@ -848,7 +917,6 @@
error: function (errObj) {
var res = errObj.responseJSON;
// Display ErrorMessage
- console.log("Error:", res.errorMessage);
}
});
*/
@@ -931,7 +999,7 @@
try {
var temp = JSON.parse(data.responseText);
outputEditor.setValue('[' + temp.errorNum + '] ' + temp.errorMessage);
- arangoHelper.arangoError("Query error", temp.errorNum, temp.errorMessage);
+ //arangoHelper.arangoError("Query error", temp.errorMessage);
}
catch (e) {
outputEditor.setValue('ERROR');
diff --git a/js/apps/system/_admin/aardvark/APP/frontend/scss/_queryView.scss b/js/apps/system/_admin/aardvark/APP/frontend/scss/_queryView.scss
index 044c9699d4..d9cceab187 100644
--- a/js/apps/system/_admin/aardvark/APP/frontend/scss/_queryView.scss
+++ b/js/apps/system/_admin/aardvark/APP/frontend/scss/_queryView.scss
@@ -68,7 +68,31 @@ toolbar {
@extend %toolbar;
}
-.aql-editor {
+.vars-editor-header {
+ border-top: 1px solid $c-content-border;
+ margin-top: -5px;
+ padding-left: 5px;
+
+ i {
+ border-radius: 2px;
+ color: $c-darker-grey;
+ height: 15px;
+ margin-left: 5px;
+ padding-left: 3px;
+ padding-top: 1px;
+ width: 15px;
+ }
+
+ i:hover {
+ background-color: $c-positive;
+ color: $c-white;
+ cursor: pointer;
+ }
+
+}
+
+.aql-editor,
+.vars-editor {
@extend %toolbar;
border-color: $c-editor-toolbar;
border-left: 0 !important;
@@ -376,7 +400,8 @@ toolbar {
width: 25px;
}
- span:hover {
+ span:hover,
+ .vars-editor-header i {
background-color: $c-positive;
color: $c-white;
}
@@ -391,6 +416,7 @@ toolbar {
}
.fa {
+ color: $c-darker-grey;
margin-left: 1px;
margin-top: 2px;
@@ -400,6 +426,7 @@ toolbar {
}
.icon_arangodb {
+ color: $c-darker-grey;
font-size: 14pt;
&:first-child {