瀏覽代碼

HUE-5344 [editor] Add autocompletion of popular complete order by clauses

Johan Ahlen 9 年之前
父節點
當前提交
5e582d5
共有 1 個文件被更改,包括 30 次插入9 次删除
  1. 30 9
      desktop/core/src/desktop/static/desktop/js/sqlAutocompleter2.js

+ 30 - 9
desktop/core/src/desktop/static/desktop/js/sqlAutocompleter2.js

@@ -32,7 +32,8 @@ var SqlAutocompleter2 = (function () {
 
   // Keyword weights come from the parser
   var DEFAULT_WEIGHTS = {
-    GROUP_BY: 1300,
+    GROUP_BY: 1400,
+    ORDER_BY: 1300,
     FILTER: 1200,
     ACTIVE_JOIN: 1200,
     JOIN_CONDITION: 1100,
@@ -320,18 +321,20 @@ var SqlAutocompleter2 = (function () {
       });
     }
 
-    if (HAS_OPTIMIZER && typeof parseResult.suggestGroupBys !== 'undefined') {
-      var groupByDeferral = $.Deferred();
-      deferrals.push(groupByDeferral);
+    if (HAS_OPTIMIZER && (typeof parseResult.suggestGroupBys !== 'undefined' || typeof parseResult.suggestOrderBys !== 'undefined')) {
+
+      var tables = typeof parseResult.suggestGroupBys !== 'undefined' ? parseResult.suggestGroupBys.tables : typeof parseResult.suggestOrderBys.tables;
+      var groupAndOrderByDeferral = $.Deferred();
+      deferrals.push(groupAndOrderByDeferral);
       self.snippet.getApiHelper().fetchNavOptTopColumns({
         sourceType: self.snippet.type(),
         timeout: self.timeout,
         defaultDatabase: database,
         silenceErrors: true,
-        tables: parseResult.suggestGroupBys.tables,
+        tables: tables,
         successCallback: function (data) {
-          var prefix = parseResult.suggestGroupBys.prefix ? (parseResult.lowerCase ? parseResult.suggestGroupBys.prefix.toLowerCase() : parseResult.suggestGroupBys.prefix) + ' ' : '';
-          if (data.values.groupbyColumns) {
+          if (parseResult.suggestGroupBys && typeof data.values.groupbyColumns !== 'undefined') {
+            var prefix = parseResult.suggestGroupBys.prefix ? (parseResult.lowerCase ? parseResult.suggestGroupBys.prefix.toLowerCase() : parseResult.suggestGroupBys.prefix) + ' ' : '';
             data.values.groupbyColumns.forEach(function (col) {
               completions.push({
                 value: prefix + createNavOptIdentifier(col.tableName, col.columnName, parseResult.suggestGroupBys.tables),
@@ -341,9 +344,20 @@ var SqlAutocompleter2 = (function () {
               });
             });
           }
-          groupByDeferral.resolve();
+          if (parseResult.suggestOrderBys && typeof data.values.orderbyColumns !== 'undefined') {
+            var prefix = parseResult.suggestOrderBys.prefix ? (parseResult.lowerCase ? parseResult.suggestOrderBys.prefix.toLowerCase() : parseResult.suggestOrderBys.prefix) + ' ' : '';
+            data.values.orderbyColumns.forEach(function (col) {
+              completions.push({
+                value: prefix + createNavOptIdentifier(col.tableName, col.columnName, parseResult.suggestOrderBys.tables),
+                meta: 'order *',
+                weight: DEFAULT_WEIGHTS.ORDER_BY + Math.min(col.columnCount, 99),
+                docHTML: self.createOrderByHtml()
+              });
+            });
+          }
+          groupAndOrderByDeferral.resolve();
         },
-        errorCallback: groupByDeferral.resolve
+        errorCallback: groupAndOrderByDeferral.resolve
       });
     }
 
@@ -549,6 +563,13 @@ var SqlAutocompleter2 = (function () {
     return html;
   };
 
+  SqlAutocompleter2.prototype.createOrderByHtml = function () {
+    // TODO: Show more relevant details here
+    var html = '<div style="max-width: 600px; white-space: normal; overflow-y: auto; height: 100%; padding: 8px;"><p><span style="white-space: pre; font-family: monospace;">Popular order by</span></p>';
+    html += '<div>';
+    return html;
+  };
+
   SqlAutocompleter2.prototype.createFilterHtml = function () {
     // TODO: Show more relevant details here
     var html = '<div style="max-width: 600px; white-space: normal; overflow-y: auto; height: 100%; padding: 8px;"><p><span style="white-space: pre; font-family: monospace;">Popular filter</span></p>';