From 4cfb5b0a7c9e1c7737e89ce98ce9a2dedbde25aa Mon Sep 17 00:00:00 2001 From: Jaewoong Jung Date: Thu, 18 Dec 2014 00:02:20 -0800 Subject: [PATCH 1/2] Updates tsql history behavior. --- .../java/org/apache/tajo/cli/tsql/TajoCli.java | 14 +++++++++----- .../org/apache/tajo/cli/tsql/TajoFileHistory.java | 8 +++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java b/tajo-client/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java index 6c5006e220..fe9a005915 100644 --- a/tajo-client/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java +++ b/tajo-client/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java @@ -338,6 +338,8 @@ private void initHistory() { String historyPath = HOME_DIR + File.separator + HISTORY_FILE; if ((new File(HOME_DIR)).exists()) { history = new TajoFileHistory(new File(historyPath)); + history.setAutoTrim(false); + history.setIgnoreDuplicates(false); reader.setHistory(history); } else { System.err.println(ERROR_PREFIX + "home directory : '" + HOME_DIR +"' does not exist."); @@ -391,6 +393,7 @@ public int runShell() throws Exception { String line; String currentPrompt = context.getCurrentDatabase(); int exitCode; + ParsingState latestState = SimpleParser.START_STATE; sout.write("Try \\? for help.\n"); @@ -407,14 +410,15 @@ public int runShell() throws Exception { } else { List parsedResults = parser.parseLines(line); - if (parsedResults.size() > 0) { - for (ParsedResult parsed : parsedResults) { - history.addStatement(parsed.getHistoryStatement() + (parsed.getType() == STATEMENT ? ";" : "")); - } + if (latestState != ParsingState.TOK_START && parsedResults.size() > 0) { + // Add multi-line statements to history in addition to individual lines. + ParsedResult parsed = parsedResults.get(0); + history.add(parsed.getHistoryStatement() + (parsed.getType() == STATEMENT ? ";" : "")); } exitCode = executeParsedResults(parsedResults); - currentPrompt = updatePrompt(parser.getState()); + latestState = parser.getState(); + currentPrompt = updatePrompt(latestState); // if at least one failed if (exitCode != 0) { diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/tsql/TajoFileHistory.java b/tajo-client/src/main/java/org/apache/tajo/cli/tsql/TajoFileHistory.java index ec0275c3c7..9b1a5b8592 100644 --- a/tajo-client/src/main/java/org/apache/tajo/cli/tsql/TajoFileHistory.java +++ b/tajo-client/src/main/java/org/apache/tajo/cli/tsql/TajoFileHistory.java @@ -29,11 +29,9 @@ public TajoFileHistory(File file) throws IOException { super(file); } + @Override public void add(CharSequence item) { - // skip add - } - - public void addStatement(String item) { - internalAdd(item); + // TODO: Filter out the quit command. Users wouldn't want it in the history. + super.add(item); } } From 8065e563c70b9c5f3be3603cd90119385f8ba44a Mon Sep 17 00:00:00 2001 From: Jaewoong Jung Date: Thu, 1 Jan 2015 15:45:31 -0800 Subject: [PATCH 2/2] Don't store exit command in history --- .../main/java/org/apache/tajo/cli/tsql/TajoFileHistory.java | 6 +++++- .../java/org/apache/tajo/cli/tsql/commands/ExitCommand.java | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/tsql/TajoFileHistory.java b/tajo-client/src/main/java/org/apache/tajo/cli/tsql/TajoFileHistory.java index 9b1a5b8592..c780a776f8 100644 --- a/tajo-client/src/main/java/org/apache/tajo/cli/tsql/TajoFileHistory.java +++ b/tajo-client/src/main/java/org/apache/tajo/cli/tsql/TajoFileHistory.java @@ -19,6 +19,7 @@ package org.apache.tajo.cli.tsql; import jline.console.history.FileHistory; +import org.apache.tajo.cli.tsql.commands.ExitCommand; import java.io.File; import java.io.IOException; @@ -31,7 +32,10 @@ public TajoFileHistory(File file) throws IOException { @Override public void add(CharSequence item) { - // TODO: Filter out the quit command. Users wouldn't want it in the history. + // Don't store an exit command. Most users wouldn't want it. + if (item.equals(ExitCommand.COMMAND_STRING)) { + return; + } super.add(item); } } diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/tsql/commands/ExitCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/tsql/commands/ExitCommand.java index 499e92ae56..d882b2f54d 100644 --- a/tajo-client/src/main/java/org/apache/tajo/cli/tsql/commands/ExitCommand.java +++ b/tajo-client/src/main/java/org/apache/tajo/cli/tsql/commands/ExitCommand.java @@ -22,13 +22,16 @@ public class ExitCommand extends TajoShellCommand { + // Sharing the exit command string publicly to filter it out from the command history. + public static final String COMMAND_STRING = "\\q"; + public ExitCommand(TajoCli.TajoCliContext context) { super(context); } @Override public String getCommand() { - return "\\q"; + return COMMAND_STRING; } @Override