You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by gy...@apache.org on 2020/05/18 10:18:55 UTC

[flink] branch master updated: [FLINK-17617] Fix SQL Client autocomplete

This is an automated email from the ASF dual-hosted git repository.

gyfora pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new a17da14  [FLINK-17617] Fix SQL Client autocomplete
a17da14 is described below

commit a17da14fc00a1b13e6e8106863a3e049fbc217f5
Author: Gyula Fora <gy...@cloudera.com>
AuthorDate: Fri May 8 15:56:12 2020 +0200

    [FLINK-17617] Fix SQL Client autocomplete
    
    Closes #12084
---
 .../apache/flink/table/client/cli/SqlCompleter.java  | 20 +++++++++++++++++++-
 .../apache/flink/table/client/cli/CliClientTest.java |  4 ++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/SqlCompleter.java b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/SqlCompleter.java
index 078d94f..5dd2bc7 100644
--- a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/SqlCompleter.java
+++ b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/SqlCompleter.java
@@ -61,7 +61,7 @@ public class SqlCompleter implements Completer {
 		final String statementNormalized = statement.toUpperCase().trim();
 		for (String commandHint : COMMAND_HINTS) {
 			if (commandHint.startsWith(statementNormalized) && line.cursor() < commandHint.length()) {
-				candidates.add(createCandidate(commandHint));
+				candidates.add(createCandidate(getCompletionHint(statementNormalized, commandHint)));
 			}
 		}
 
@@ -74,6 +74,24 @@ public class SqlCompleter implements Completer {
 		}
 	}
 
+	private String getCompletionHint(String statementNormalized, String commandHint) {
+		if (statementNormalized.length() == 0) {
+			return commandHint;
+		}
+		int cursorPos = statementNormalized.length() - 1;
+		int returnStartPos;
+		if (Character.isWhitespace(commandHint.charAt(cursorPos + 1))) {
+			returnStartPos = Math.min(commandHint.length() - 1, cursorPos + 2);
+		} else {
+			returnStartPos = cursorPos;
+			while (returnStartPos > 0 && !Character.isWhitespace(commandHint.charAt(returnStartPos - 1))) {
+				returnStartPos--;
+			}
+		}
+
+		return commandHint.substring(returnStartPos);
+	}
+
 	private Candidate createCandidate(String hint) {
 		return new Candidate(AttributedString.stripAnsi(hint), hint, null, null, null, null, true);
 	}
diff --git a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliClientTest.java b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliClientTest.java
index a166e40..c785cab 100644
--- a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliClientTest.java
+++ b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliClientTest.java
@@ -99,6 +99,10 @@ public class CliClientTest extends TestLogger {
 		verifySqlCompletion("  qu", 2, Collections.singletonList("QUIT;"), Collections.singletonList("SELECT"));
 		verifySqlCompletion("set ", 3, Collections.emptyList(), Collections.singletonList("SET"));
 		verifySqlCompletion("show t ", 6, Collections.emptyList(), Collections.singletonList("SET"));
+		verifySqlCompletion("use cat", 7, Collections.singletonList("CATALOG"), Collections.singletonList("USE CATALOG"));
+		verifySqlCompletion("use ", 4, Collections.singletonList("CATALOG"), Collections.singletonList("USE CATALOG"));
+		verifySqlCompletion("use catalog", 11, Collections.emptyList(), Collections.singletonList("CATALOG"));
+
 	}
 
 	@Test