瀏覽代碼

HUE-9089 [editor] Propagate hasResultSet changes.

Jean-Francois Desjeans Gauthier 6 年之前
父節點
當前提交
947b820893

+ 9 - 4
desktop/core/src/desktop/js/api/apiHelper.js

@@ -1863,13 +1863,13 @@ class ApiHelper {
           if (response && response.query_status && response.query_status.status) {
           if (response && response.query_status && response.query_status.status) {
             const status = response.query_status.status;
             const status = response.query_status.status;
             if (status === 'available') {
             if (status === 'available') {
-              deferred.resolve();
+              deferred.resolve(response.query_status);
             } else if (status === 'running' || status === 'starting' || status === 'waiting') {
             } else if (status === 'running' || status === 'starting' || status === 'waiting') {
               waitTimeout = window.setTimeout(() => {
               waitTimeout = window.setTimeout(() => {
                 waitForAvailable();
                 waitForAvailable();
               }, 500);
               }, 500);
             } else {
             } else {
-              deferred.reject();
+              deferred.reject(response.query_status);
             }
             }
           }
           }
         })
         })
@@ -2427,13 +2427,18 @@ class ApiHelper {
                 compute: options.compute,
                 compute: options.compute,
                 silenceErrors: options.silenceErrors
                 silenceErrors: options.silenceErrors
               })
               })
-              .done(() => {
+              .done(resultStatus => {
+                if (resultStatus) {
+                  $.extend(true, queryResult.result, {
+                    handle: resultStatus
+                  });
+                }
                 const resultRequest = self
                 const resultRequest = self
                   .simplePost(
                   .simplePost(
                     '/notebook/api/fetch_result_data',
                     '/notebook/api/fetch_result_data',
                     {
                     {
                       notebook: notebookJson,
                       notebook: notebookJson,
-                      snippet: snippetJson,
+                      snippet: JSON.stringify(queryResult),
                       rows: options.sampleCount || 100,
                       rows: options.sampleCount || 100,
                       startOver: 'false'
                       startOver: 'false'
                     },
                     },

+ 4 - 0
desktop/core/src/desktop/js/apps/notebook/snippet.js

@@ -2297,6 +2297,10 @@ class Snippet {
 
 
               if (data.status === 0) {
               if (data.status === 0) {
                 self.status(data.query_status.status);
                 self.status(data.query_status.status);
+                if (self.result.handle() && data.query_status.has_result_set !== undefined) {
+                  self.result.handle().has_result_set = data.query_status.has_result_set;
+                  self.result.hasResultset(self.result.handle().has_result_set);
+                }
 
 
                 if (
                 if (
                   self.status() == 'running' ||
                   self.status() == 'running' ||

+ 7 - 1
desktop/libs/notebook/src/notebook/api.py

@@ -260,13 +260,19 @@ def check_status(request):
       status = 'expired'
       status = 'expired'
     else:
     else:
       status = 'failed'
       status = 'failed'
+    if response.get('query_status'):
+      has_result_set = response['query_status'].get('has_result_set')
+    else:
+      has_result_set = None
 
 
     if notebook['type'].startswith('query') or notebook.get('isManaged'):
     if notebook['type'].startswith('query') or notebook.get('isManaged'):
       nb_doc = Document2.objects.get_by_uuid(user=request.user, uuid=operation_id or notebook['uuid'])
       nb_doc = Document2.objects.get_by_uuid(user=request.user, uuid=operation_id or notebook['uuid'])
       if nb_doc.can_write(request.user):
       if nb_doc.can_write(request.user):
         nb = Notebook(document=nb_doc).get_data()
         nb = Notebook(document=nb_doc).get_data()
-        if status != nb['snippets'][0]['status']:
+        if status != nb['snippets'][0]['status'] or has_result_set != nb['snippets'][0].get('has_result_set'):
           nb['snippets'][0]['status'] = status
           nb['snippets'][0]['status'] = status
+          if has_result_set is not None:
+            nb['snippets'][0]['has_result_set'] = has_result_set
           nb_doc.update_data(nb)
           nb_doc.update_data(nb)
           nb_doc.save()
           nb_doc.save()
 
 

+ 2 - 0
desktop/libs/notebook/src/notebook/connectors/hiveserver2.py

@@ -308,6 +308,8 @@ class HS2Api(Api):
         raise QueryError(operation.errorMessage)
         raise QueryError(operation.errorMessage)
 
 
     response['status'] = 'running' if status.value in (QueryHistory.STATE.running.value, QueryHistory.STATE.submitted.value) else 'available'
     response['status'] = 'running' if status.value in (QueryHistory.STATE.running.value, QueryHistory.STATE.submitted.value) else 'available'
+    if operation.hasResultSet is not None:
+      response['has_result_set']= operation.hasResultSet # HIVE-12442 - With LLAP & HIVE_CLI_SERVICE_PROTOCOL_V8, hasResultSet can change after get_operation_status
 
 
     return response
     return response