diff --git cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java index aec5018..152a040 100644 --- cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java +++ cli/src/java/org/apache/hadoop/hive/cli/CliDriver.java @@ -29,9 +29,13 @@ import java.io.UnsupportedEncodingException; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Set; +import com.google.common.base.Splitter; import jline.console.ConsoleReader; import jline.console.completer.Completer; import jline.console.history.FileHistory; @@ -543,11 +547,29 @@ public int complete (String buffer, int offset, List completions) { for (int i = 0; i < vars.length; i++) { vars[i] = confs[i].varname; } - ArgumentCompleter.ArgumentDelimiter delimiter = new ArgumentCompleter.AbstractArgumentDelimiter() { + + StringsCompleter confCompleter = new StringsCompleter(vars) { @Override - public boolean isDelimiterChar(CharSequence buffer, int pos) { - char c = buffer.charAt(pos); - return c == '.'; + public int complete(final String buffer, final int cursor, final List clist) { + int result = super.complete(buffer, cursor, clist); + if (clist.size() > 10) { + Set delimited = new LinkedHashSet(); + for (CharSequence candidate : clist) { + Iterator it = Splitter.on(".").split( + candidate.subSequence(cursor, candidate.length())).iterator(); + if (it.hasNext()) { + String next = it.next(); + if (next.isEmpty()) { + next = "."; + } + candidate = buffer != null ? buffer.substring(0, cursor) + next : next; + } + delimited.add(candidate); + } + clist.clear(); + clist.addAll(delimited); + } + return result; } }; @@ -558,9 +580,7 @@ public int complete(String buffer, int cursor, List clist) { } }; - ArgumentCompleter confCompleter = new ArgumentCompleter(delimiter, setCompleter); - - ArgumentCompleter propCompleter = new ArgumentCompleter(new Completer[]{setCompleter, confCompleter}) { + ArgumentCompleter propCompleter = new ArgumentCompleter(setCompleter, confCompleter) { @Override @SuppressWarnings("unchecked") public int complete(String buffer, int offset, List completions) {