Forráskód Böngészése

HUE-5406 [editor] Stay on statement of a multiquery when editing and re-executing

Romain Rigaux 8 éve
szülő
commit
d6e3148181

+ 1 - 1
desktop/core/src/desktop/templates/assist.mako

@@ -1833,7 +1833,7 @@ from notebook.conf import ENABLE_QUERY_BUILDER
     <br/>
     <ul data-bind="foreach: activeTables">
       <li>
-        <span data-bind="text: $data"></span> <i class="fa fa-info"></i>
+        <span data-bind="text: $data"></span> <i class="fa fa-info"></i> <i class="fa fa-fw fa-clock-o muted" title="02/01/2017 10:15 PM"></i>
       </i>
     </ul>
 

+ 9 - 3
desktop/libs/notebook/src/notebook/connectors/hiveserver2.py

@@ -18,6 +18,7 @@
 import base64
 import binascii
 import copy
+import hashlib
 import logging
 import re
 import StringIO
@@ -624,22 +625,27 @@ DROP TABLE IF EXISTS `%(table)s`;
     statement_id = snippet['result']['handle'].get('statement_id', 0)
     statements_count = snippet['result']['handle'].get('statements_count', 1)
 
+    statements = self._get_statements(snippet['statement'])
+
     if snippet['result']['handle'].get('has_more_statements'):
       try:
         handle = self._get_handle(snippet)
         db.close_operation(handle)  # Close all the time past multi queries
       except:
         LOG.warn('Could not close previous multiquery query')
-      statement_id += 1
+
+      previous_statement_hash = hashlib.sha224(statements[statement_id]['statement']).hexdigest()
+      if previous_statement_hash == snippet['result']['handle'].get('previous_statement_hash') or not snippet['result']['handle'].get('previous_statement_hash'):
+        statement_id += 1
     else:
       statement_id = 0
 
-    statements = self._get_statements(snippet['statement'])
 
     resp = {
       'statement_id': statement_id,
       'has_more_statements': statement_id < len(statements) - 1,
-      'statements_count': len(statements)
+      'statements_count': len(statements),
+      'previous_statement_hash': hashlib.sha224(statements[statement_id]['statement']).hexdigest()
     }
 
     if statements_count != len(statements):

+ 5 - 1
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -48,6 +48,7 @@ var EditorViewModel = (function() {
       }
     });
     self.statements_count = ko.observable(typeof result.statements_count != "undefined" && result.statements_count != null ? result.statements_count : 1);
+    self.previous_statement_hash = ko.observable(typeof result.previous_statement_hash != "undefined" && result.previous_statement_hash != null ? result.previous_statement_hash : null);
     self.cleanedMeta = ko.computed(function () {
       return ko.utils.arrayFilter(self.meta(), function (item) {
         return item.name != ''
@@ -166,7 +167,8 @@ var EditorViewModel = (function() {
       self.handle({ // Keep multiquery indexing
           has_more_statements: self.handle()['has_more_statements'],
           statement_id: self.handle()['statement_id'],
-          statements_count: self.handle()['statements_count']
+          statements_count: self.handle()['statements_count'],
+          previous_statement_hash: self.handle()['previous_statement_hash'],
       });
       self.startTime(new Date());
       self.endTime(new Date());
@@ -1045,6 +1047,7 @@ var EditorViewModel = (function() {
           if (data.handle.statements_count != null) {
             self.result.statements_count(data.handle.statements_count);
             self.result.statement_id(data.handle.statement_id);
+            self.result.previous_statement_hash(data.previous_statement_hash);
 
             if (data.handle.statements_count > 1 && data.handle.start != null && data.handle.end != null) {
               self.result.statement_range({
@@ -1076,6 +1079,7 @@ var EditorViewModel = (function() {
         column: 0
       };
       self.result.handle()['has_more_statements'] = false;
+      self.result.handle()['previous_statement_hash'] = '';
 
       self.execute();
     };