瀏覽代碼

HUE-5587 [editor] Add databases to the autocomplete dropdown

Johan Ahlen 9 年之前
父節點
當前提交
ceac01a

+ 28 - 1
desktop/core/src/desktop/static/desktop/js/sqlAutocompleter3.js

@@ -82,12 +82,14 @@ var SqlAutocompleter3 = (function () {
     self.columnAliases = ko.observableArray();
     self.commonTableExpressions = ko.observableArray();
     self.functions = ko.observableArray();
+    self.databases = ko.observableArray();
     self.tables = ko.observableArray();
     self.columns = ko.observableArray();
     self.values = ko.observableArray();
 
     self.loadingKeywords = ko.observable(false);
     self.loadingFunctions = ko.observable(false);
+    self.loadingDatabases = ko.observable(false);
     self.loadingTables = ko.observable(false);
     self.loadingColumns = ko.observable(false);
     self.loadingValues = ko.observable(false);
@@ -95,7 +97,8 @@ var SqlAutocompleter3 = (function () {
     self.filter = ko.observable();
 
     self.filtered = ko.pureComputed(function () {
-      var result = self.keywords().concat(self.identifiers(), self.columnAliases(), self.commonTableExpressions(), self.functions(), self.tables(), self.columns(), self.values());
+      var result = self.keywords().concat(self.identifiers(), self.columnAliases(), self.commonTableExpressions(),
+          self.functions(), self.databases(), self.tables(), self.columns(), self.values());
 
       if (self.filter()) {
         var lowerCaseFilter = self.filter().toLowerCase();
@@ -170,11 +173,14 @@ var SqlAutocompleter3 = (function () {
     self.columnAliases([]);
     self.commonTableExpressions([]);
     self.functions([]);
+    self.databases([]);
     self.tables([]);
     self.columns([]);
     self.values([]);
 
     self.loadingKeywords(false);
+    self.loadingFunctions(false);
+    self.loadingDatabases(false);
     self.loadingTables(false);
     self.loadingColumns(false);
     self.loadingValues(false);
@@ -189,6 +195,7 @@ var SqlAutocompleter3 = (function () {
     self.handleColumnAliases();
     self.handleCommonTableExpressions();
     self.handleFunctions(colRefDeferral);
+    self.handleDatabases(allDbsDeferral);
     self.handleTables(allDbsDeferral);
     self.handleColumns(colRefDeferral);
     self.handleValues(colRefDeferral);
@@ -335,6 +342,26 @@ var SqlAutocompleter3 = (function () {
     }
   };
 
+  Suggestions.prototype.handleDatabases = function (allDbsDeferral) {
+    var self = this;
+    var suggestDatabases = self.parseResult.suggestDatabases;
+    if (suggestDatabases) {
+      var prefix = suggestDatabases.prependQuestionMark ? '? ' : '';
+      if (suggestDatabases.prependFrom) {
+        prefix += self.parseResult.lowerCase ? 'from ' : 'FROM ';
+      }
+      var databaseSuggestions = [];
+      self.loadingDatabases(true);
+      allDbsDeferral.done(function (dbs) {
+        dbs.forEach(function (db) {
+          databaseSuggestions.push({ value: prefix + self.backTickIfNeeded(db) + (suggestDatabases.appendDot ? '.' : ''), meta: AutocompleterGlobals.i18n.meta.database, weight: DEFAULT_WEIGHTS.DATABASE })
+        });
+        self.databases(databaseSuggestions);
+        self.loadingDatabases(false);
+      });
+    }
+  };
+
   Suggestions.prototype.handleTables = function (allDbsDeferral, colRefDeferral) {
     var self = this;
     if (self.parseResult.suggestTables) {

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

@@ -95,6 +95,7 @@ from metadata.conf import has_optimizer, OPTIMIZER
         meta: {
           alias:  '${ _('alias') }',
           commonTableExpression:  '${ _('cte') }',
+          database:  '${ _('database') }',
           keyword: '${ _('keyword') }',
           table: '${ _('table') }',
           value: '${ _('value') }',