Przeglądaj źródła

[core] Autocomplete databases after the USE keyword

Johan Ahlen 10 lat temu
rodzic
commit
3fb1e70

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

@@ -22,7 +22,7 @@
   }
 }(this, function () {
 
-  var SQL_TERMS = /\b(FROM|TABLE|STATS|REFRESH|METADATA|DESCRIBE|ORDER BY|JOIN|ON|WHERE|SELECT|LIMIT|GROUP BY|SORT)\b/g;
+  var SQL_TERMS = /\b(FROM|TABLE|STATS|REFRESH|METADATA|DESCRIBE|ORDER BY|JOIN|ON|WHERE|SELECT|LIMIT|GROUP BY|SORT|USE)\b/g;
 
   /**
    * @param options {object}
@@ -315,6 +315,19 @@
 
     var impalaFieldRef = impalaSyntax && beforeCursor.slice(-1) === '.';
 
+    if (keywordBeforeCursor === "USE") {
+      var databases = self.snippet.getAssistHelper().availableDatabases();
+      databases.sort();
+      callback($.map(databases, function(db, idx) {
+        return {
+          value: db,
+          score: 1000 - idx,
+          meta: 'database'
+        };
+      }));
+      return;
+    }
+
     var tableNameAutoComplete = (keywordBeforeCursor === "FROM" ||
       keywordBeforeCursor === "TABLE" ||
       keywordBeforeCursor === "STATS" ||

+ 11 - 0
desktop/core/src/desktop/static/desktop/spec/sqlAutocompleterSpec.js

@@ -127,6 +127,17 @@ define([
     });
 
     describe("database awareness", function() {
+      it("should suggest databases after use", function () {
+        assistHelper.availableDatabases(["database_one", "database_two"]);
+        assertAutoComplete({
+          serverResponses: {},
+          beforeCursor: "USE ",
+          afterCursor: "",
+          expectedSuggestions: ["database_one", "database_two"]
+        });
+        assistHelper.availableDatabases(["testDb"]);
+      });
+
       it("should use a use statement before the cursor if present", function () {
         assertAutoComplete({
           serverResponses: {