Selaa lähdekoodia

HUE-5577 [editor] Add functions, identifiers and common table expressions to the new autocomplete dropdown

Johan Ahlen 9 vuotta sitten
vanhempi
commit
0e7331c

+ 58 - 5
desktop/core/src/desktop/static/desktop/js/sqlAutocompleter3.js

@@ -78,18 +78,21 @@ var SqlAutocompleter3 = (function () {
     self.editor = options.editor;
 
     self.keywords = ko.observableArray();
-    self.loadingKeywords = ko.observable(false);
-
+    self.identifiers = ko.observableArray();
+    self.commonTableExpressions = ko.observableArray();
+    self.functions = ko.observableArray();
     self.tables = ko.observableArray();
-    self.loadingTables = ko.observable(false);
-
     self.columns = ko.observableArray();
+
+    self.loadingKeywords = ko.observable(false);
+    self.loadingFunctions = ko.observable(false);
+    self.loadingTables = ko.observable(false);
     self.loadingColumns = ko.observable(false);
 
     self.filter = ko.observable();
 
     self.filtered = ko.pureComputed(function () {
-      var result = self.keywords().concat(self.tables(), self.columns());
+      var result = self.keywords().concat(self.identifiers(), self.commonTableExpressions(), self.functions(), self.tables(), self.columns());
 
       if (self.filter()) {
         var lowerCaseFilter = self.filter().toLowerCase();
@@ -159,6 +162,9 @@ var SqlAutocompleter3 = (function () {
     self.defaultDatabase = parseResult.useDatabase || self.snippet.database();
     self.parseResult = parseResult;
     self.keywords([]);
+    self.identifiers([]);
+    self.commonTableExpressions([]);
+    self.functions([]);
     self.tables([]);
     self.columns([]);
     self.loadingKeywords(false);
@@ -170,6 +176,9 @@ var SqlAutocompleter3 = (function () {
     var allDbsDeferral = self.loadDatabases();
 
     self.handleKeywords(colRefDeferral);
+    self.handleIdentifiers();
+    self.handleCommonTableExpressions();
+    self.handleFunctions(colRefDeferral);
     self.handleTables(allDbsDeferral);
     self.handleColumns(colRefDeferral);
   };
@@ -216,6 +225,50 @@ var SqlAutocompleter3 = (function () {
     }
   };
 
+  Suggestions.prototype.handleIdentifiers = function () {
+    var self = this;
+    if (self.parseResult.suggestIdentifiers) {
+      var identifierSuggestions = [];
+      self.parseResult.suggestIdentifiers.forEach(function (identifier) {
+        identifierSuggestions.push({ value: identifier.name, meta: identifier.type, weight: DEFAULT_WEIGHTS.IDENTIFIER });
+      });
+      self.identifiers(identifierSuggestions);
+    }
+  };
+
+  Suggestions.prototype.handleCommonTableExpressions = function () {
+    var self = this;
+    if (self.parseResult.suggestCommonTableExpressions) {
+      var commonTableExpressionSuggestions = [];
+      self.parseResult.suggestCommonTableExpressions.forEach(function (expression) {
+        var prefix = expression.prependQuestionMark ? '? ' : '';
+        if (expression.prependFrom) {
+          prefix += self.parseResult.lowerCase ? 'from ' : 'FROM ';
+        }
+        commonTableExpressionSuggestions.push({value: prefix + expression.name, meta: AutocompleterGlobals.i18n.meta.commonTableExpression, weight: DEFAULT_WEIGHTS.CTE });
+      });
+      self.commonTableExpressions(commonTableExpressionSuggestions);
+    }
+  };
+
+  Suggestions.prototype.handleFunctions = function (colRefDeferral) {
+    var self = this;
+    if (self.parseResult.suggestFunctions) {
+      var functionSuggestions = [];
+      if (self.parseResult.suggestFunctions.types && self.parseResult.suggestFunctions.types[0] === 'COLREF') {
+        self.loadingFunctions(true);
+        colRefDeferral.done(function (colRef) {
+          SqlFunctions.suggestFunctions(self.snippet.type(), [colRef.type.toUpperCase()], self.parseResult.suggestAggregateFunctions || false, self.parseResult.suggestAnalyticFunctions || false, functionSuggestions, DEFAULT_WEIGHTS.UDF);
+          self.functions(functionSuggestions);
+          self.loadingFunctions(false);
+        });
+      } else {
+        SqlFunctions.suggestFunctions(self.snippet.type(), self.parseResult.suggestFunctions.types || ['T'], self.parseResult.suggestAggregateFunctions || false, self.parseResult.suggestAnalyticFunctions || false, functionSuggestions, DEFAULT_WEIGHTS.UDF);
+        self.functions(functionSuggestions);
+      }
+    }
+  };
+
   Suggestions.prototype.handleTables = function (allDbsDeferral, colRefDeferral) {
     var self = this;
     if (self.parseResult.suggestTables) {

+ 2 - 1
desktop/core/src/desktop/templates/common_header_footer_components.mako

@@ -95,7 +95,8 @@ from metadata.conf import has_optimizer, OPTIMIZER
           keyword: '${ _('keyword') }',
           table: '${ _('table') }',
           view: '${ _('view') }',
-          virtual: '${ _('virtual') }'
+          virtual: '${ _('virtual') }',
+          commonTableExpression:  '${ _('cte') }'
         }
       }
     };