Переглянути джерело

[notebook] Support execution of selected statements

Johan Ahlen 10 роки тому
батько
коміт
1684e850cf

+ 10 - 1
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -1660,10 +1660,15 @@ ko.bindingHandlers.aceEditor = {
 
     snippet.errors.subscribe(function(newErrors) {
       editor.clearErrors();
+      var offset = 0;
+      if (snippet.isSqlDialect() && editor.getSelectedText()) {
+        var selectionRange = editor.getSelectionRange();
+        offset = Math.min(selectionRange.start.row, selectionRange.end.row);
+      }
       if (newErrors.length > 0) {
         newErrors.forEach(function (err) {
           if (err.line !== null) {
-            editor.addError(err.message, err.line);
+            editor.addError(err.message, err.line + offset);
           }
         });
       }
@@ -1721,6 +1726,10 @@ ko.bindingHandlers.aceEditor = {
       $el.data("last-active-editor", true);
     });
 
+    editor.selection.on("changeSelection", function () {
+      snippet.selectedStatement(editor.getSelectedText());
+    });
+
     editor.on("blur", function () {
       snippet.statement_raw(editor.getValue());
     });

+ 3 - 2
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -16,7 +16,7 @@
 
 
 var SPARK_MAPPING = {
-  ignore: ["ace", "images", "autocompleter"]
+  ignore: ["ace", "images", "autocompleter", "selectedStatement"]
 }
 
 var Result = function (snippet, result) {
@@ -158,6 +158,7 @@ var Snippet = function (vm, notebook, snippet) {
   };
 
   self.statement_raw = ko.observable(typeof snippet.statement_raw != "undefined" && snippet.statement_raw != null ? snippet.statement_raw : '');
+  self.selectedStatement = ko.observable('');
   self.codemirrorSize = ko.observable(typeof snippet.codemirrorSize != "undefined" && snippet.codemirrorSize != null ? snippet.codemirrorSize : 100);
   // self.statement_raw.extend({ rateLimit: 150 }); // Should prevent lag from typing but currently send the old query when using the key shortcut
   self.status = ko.observable(typeof snippet.status != "undefined" && snippet.status != null ? snippet.status : 'loading');
@@ -230,7 +231,7 @@ var Snippet = function (vm, notebook, snippet) {
     });
   });
   self.statement = ko.computed(function () {
-    var statement = self.statement_raw();
+    var statement = self.isSqlDialect() && self.selectedStatement() ? self.selectedStatement() : self.statement_raw();
     $.each(self.variables(), function (index, variable) {
       statement = statement.replace(RegExp("([^\\\\])?\\${" + variable.name() + "}", "g"), "$1" + variable.value());
     });