فهرست منبع

[editor] Support partial matching of table and database names after from keyword

i.e. "select * from de" => "default". Database names are only supported by the new editor.
Johan Ahlen 9 سال پیش
والد
کامیت
edab477e0d

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

@@ -429,8 +429,13 @@
 
     if (tableNameAutoComplete || (selectBefore && !fromAfter)) {
       var dbRefMatch = beforeCursor.match(/.*from\s+([^\.\s]+).$/i);
-      if (dbRefMatch) {
+      var partialMatch = beforeCursor.match(/.*from\s+([\S]+)$/i);
+      var partialTableOrDb = null;
+      if (dbRefMatch && self.snippet.getAssistHelper().lastKnownDatabases[self.snippet.type()].indexOf(dbRefMatch[1]) > -1) {
         database = dbRefMatch[1];
+      } else if (dbRefMatch && partialMatch) {
+        partialTableOrDb = partialMatch[1].toLowerCase();
+        database = self.snippet.database();
       }
 
       self.snippet.getAssistHelper().fetchTables({
@@ -452,7 +457,14 @@
             }
             fromKeyword += " ";
           }
-          callback(self.extractFields(data, fromKeyword, false, [], dbRefMatch !== null));
+          var result = self.extractFields(data, fromKeyword, false, [], dbRefMatch !== null && partialTableOrDb === null);
+          if (partialTableOrDb !== null) {
+            callback($.grep(result, function (suggestion) {
+              return suggestion.value.indexOf(partialTableOrDb) === 0;
+            }))
+          } else {
+            callback(result);
+          }
         },
         silenceErrors: true,
         errorCallback: onFailure,

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

@@ -239,6 +239,32 @@ define([
         });
       });
 
+      it("should suggest table names after FROM with started name", function() {
+        assertAutoComplete({
+          serverResponses: {
+            "/notebook/api/autocomplete/database_one" : {
+              tables_meta: [{ name: "testTable1" }, { name: "testTable2" }]
+            }
+          },
+          beforeCursor: "SELECT * FROM tes",
+          afterCursor: "",
+          expectedSuggestions: ["testTable1", "testTable2"]
+        });
+      });
+
+      it("should suggest database names after FROM with started name", function() {
+        assertAutoComplete({
+          serverResponses: {
+            "/notebook/api/autocomplete/database_one" : {
+              tables_meta: [{ name: "testTable1" }, { name: "testTable2" }]
+            }
+          },
+          beforeCursor: "SELECT * FROM dat",
+          afterCursor: "",
+          expectedSuggestions: ["database_one.", "database_two."]
+        });
+      });
+
       it("should suggest table names after FROM with database reference", function() {
         assertAutoComplete({
           serverResponses: {