瀏覽代碼

HUE-3407 [editor] Do not hide the multiquery counter when executing a query

Support for highlightedRange on Ace
Enrico Berti 9 年之前
父節點
當前提交
553dea9

+ 24 - 3
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -2431,9 +2431,14 @@
       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 (snippet.isSqlDialect()) {
+          if (editor.getSelectedText()){
+            var selectionRange = editor.getSelectionRange();
+            offset = Math.min(selectionRange.start.row, selectionRange.end.row);
+          }
+          if (snippet.result && snippet.result.statements_count() > 1){
+            offset = snippet.result.statement_range().start.row;
+          }
         }
         if (newErrors.length > 0) {
           newErrors.forEach(function (err, cnt) {
@@ -2903,7 +2908,23 @@
       var snippet = options.snippet;
       if (snippet.ace()) {
         var editor = snippet.ace();
+        var range = options.highlightedRange();
         editor.session.setMode(snippet.getAceMode());
+        if (range) {
+          if (editor.session.$backMarkers) {
+            for (var marker in editor.session.$backMarkers) {
+              if (editor.session.$backMarkers[marker].clazz === 'highlighted') {
+                editor.session.removeMarker(editor.session.$backMarkers[marker].id);
+              }
+            }
+          }
+          editor.session.addMarker(new AceRange(range.start.row, range.start.column, range.end.row, range.end.column), 'highlighted', 'line');
+          ace.require('ace/lib/dom').importCssString('.highlighted {\
+              background-color: #E3F7FF;\
+              position: absolute;\
+          }');
+          editor.scrollToLine(range.start.row, true, true, function () {});
+        }
       }
     }
   };

+ 30 - 0
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -37,6 +37,16 @@
     self.meta = ko.observableArray(typeof result.meta != "undefined" && result.meta != null ? result.meta : []);
     self.hasMore = ko.observable(typeof result.hasMore != "undefined" && result.hasMore != null ? result.hasMore : false);
     self.statement_id = ko.observable(typeof result.statement_id != "undefined" && result.statement_id != null ? result.statement_id : 0);
+    self.statement_range = ko.observable(typeof result.statement_range != "undefined" && result.statement_range != null ? result.statement_range : {
+      start: {
+        row: 0,
+        column: 0
+      },
+      end: {
+        row: 0,
+        column: 0
+      }
+    });
     self.statements_count = ko.observable(typeof result.statements_count != "undefined" && result.statements_count != null ? result.statements_count : 1);
     self.cleanedMeta = ko.computed(function () {
       return ko.utils.arrayFilter(self.meta(), function (item) {
@@ -535,6 +545,7 @@
 
       if (self.result.fetchedOnce()) {
         self.close();
+        self.statusForButtons('executed');
       }
 
       $.post("/notebook/api/execute", {
@@ -552,6 +563,13 @@
           if (data.handle.statement_id != null) {
             self.result.statement_id(data.handle.statement_id);
           }
+          if (data.handle.start != null && data.handle.end != null) {
+            self.result.statement_range({
+              start: data.handle.start,
+              end: data.handle.end
+            });
+          }
+
           if (data.handle.sync) {
             self.loadData(data.handle, 100);
             self.status('success');
@@ -568,11 +586,22 @@
       }).fail(function (xhr, textStatus, errorThrown) {
         $(document).trigger("error", xhr.responseText);
         self.status('failed');
+        self.statusForButtons('executed');
       });
     };
 
     self.reexecute = function () {
       self.result.handle()['statement_id'] = 0;
+      self.result.handle()['statement_range'] = {
+        start: {
+          row: 0,
+          column: 0
+        },
+        end: {
+          row: 0,
+          column: 0
+        }
+      };
       self.result.handle()['has_more_statements'] = false;
 
       self.execute();
@@ -755,6 +784,7 @@
         }
       }).fail(function (xhr, textStatus, errorThrown) {
         $(document).trigger("error", xhr.responseText);
+        self.statusForButtons('canceled');
         self.status('failed');
       });
     };

+ 2 - 1
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -667,6 +667,7 @@ ${ require.config() }
           openIt: '${ _ko("Alt or Ctrl + Click to open it") }',
           expandStar: '${ _ko("Alt or Ctrl + Click to replace with all columns") }',
           onBlur: saveTemporarySnippet,
+          highlightedRange: result.statement_range,
           aceOptions: {
             showLineNumbers: $root.editorMode,
             showGutter: $root.editorMode,
@@ -982,7 +983,7 @@ ${ require.config() }
     <a class="snippet-side-btn" data-bind="click: reexecute, visible: $root.editorMode && result.handle() && result.handle().has_more_statements, css: {'blue': $parent.history().length == 0 || $root.editorMode, 'disabled': statement() === '' }" title="${ _('Restart from the first statement') }">
       <i class="fa fa-fw fa-repeat"></i>
     </a>
-    <div class="label label-info" data-bind="attr: {'title':'${ _ko('Showing results of the statement #')}' + (result.statement_id() + 1)}, visible: $root.editorMode && result.statements_count() > 1 && status() != 'running' && status() != 'loading'">
+    <div class="label label-info" data-bind="attr: {'title':'${ _ko('Showing results of the statement #')}' + (result.statement_id() + 1)}, visible: $root.editorMode && result.statements_count() > 1">
       <span data-bind="text: result.statement_id() + 1"></span>/<span data-bind="text: result.statements_count()"></span>
     </div>
     <a class="snippet-side-btn blue" data-bind="click: cancel, visible: status() == 'running'" title="${ _('Stop the currently running statement') }">