浏览代码

HUE-3465 [editor] Cache the value samples for the autocompleter

Johan Ahlen 9 年之前
父节点
当前提交
594997e

+ 34 - 12
desktop/core/src/desktop/static/desktop/js/assist/assistHelper.js

@@ -591,23 +591,45 @@
    * @param {string} options.databaseName
    * @param {string} options.tableName
    * @param {string} [options.columnName]
+   * @param {Object} [options.editor] - Ace editor
    */
   AssistHelper.prototype.fetchTableSample = function (options) {
     var self = this;
     var url = SAMPLE_API_PREFIX + options.databaseName + '/' + options.tableName + (options.columnName ? '/' + options.columnName : '');
 
-    $.post(url, {
-      notebook: {},
-      snippet: ko.mapping.toJSON({
-        type: options.sourceType
-      }),
-    }, function (data) {
-      if (! self.successResponseIsError(data)) {
-        options.successCallback(data);
-      } else {
-        self.assistErrorCallback(options)(data);
-      }
-    }).fail(self.assistErrorCallback(options));
+    var fetchFunction = function (storeInCache) {
+      $.post(url, {
+        notebook: {},
+        snippet: ko.mapping.toJSON({
+          type: options.sourceType
+        })
+      })
+      .done(function (data) {
+        if (! self.successResponseIsError(data)) {
+          if (data.rows.length > 0) {
+            storeInCache(data);
+          }
+          options.successCallback(data);
+        } else {
+          self.assistErrorCallback(options)(data);
+        }
+      })
+      .fail(self.assistErrorCallback(options))
+      .always(function () {
+        if (typeof options.editor !== 'undefined' && options.editor !== null) {
+          options.editor.hideSpinner();
+        }
+      });
+    };
+
+    if (options.columnName) {
+      fetchCached.bind(self)($.extend({}, options, {
+        url: url,
+        fetchFunction: fetchFunction
+      }));
+    } else {
+      fetchFunction($.noop);
+    }
   };
 
 

+ 1 - 0
desktop/core/src/desktop/static/desktop/js/sqlAutocompleter.js

@@ -297,6 +297,7 @@
           databaseName: database,
           tableName: tableName,
           columnName: fields.length === 1 ? fields[0] : null,
+          editor: editor,
           successCallback: function (data) {
             if (data.status === 0 && data.headers.length === 1) {
               var values = $.map(data.rows, function (row, index) {