SQL: Teach the CLI to ignore empty commands (#30265)

Cause the CLI to ignore commands that are empty or consist only of
newlines. This is a fairly standard thing for SQL CLIs to do.

It looks like:
```
sql> ;
sql>
   |
   | ;
sql> exit;
Bye!
```

I think I *could* have implemented this with a `CliCommand` that throws
out empty string but it felt simpler to bake it in to the `CliRepl`.

Closes #30000
This commit is contained in:
Nik Everett 2018-05-01 13:17:24 -04:00 committed by GitHub
parent 7933f5e28e
commit abe797bd42
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 0 deletions

View File

@ -56,6 +56,11 @@ public class CliRepl {
multiLine.setLength(0); multiLine.setLength(0);
} }
// Skip empty commands
if (line.isEmpty()) {
continue;
}
// special case to handle exit // special case to handle exit
if (isExit(line)) { if (isExit(line)) {
cliTerminal.line().em("Bye!").ln(); cliTerminal.line().em("Bye!").ln();

View File

@ -38,6 +38,28 @@ public class CliReplTests extends ESTestCase {
verifyNoMoreInteractions(mockCommand, mockSession); verifyNoMoreInteractions(mockCommand, mockSession);
} }
/**
* Test that empty commands are skipped. This includes commands that are
* just new lines.
*/
public void testEmptyNotSent() {
CliTerminal cliTerminal = new TestTerminal(
";",
"",
"",
";",
"exit;"
);
CliSession mockSession = mock(CliSession.class);
CliCommand mockCommand = mock(CliCommand.class);
CliRepl cli = new CliRepl(cliTerminal, mockSession, mockCommand);
cli.execute();
verify(mockCommand, times(1)).handle(cliTerminal, mockSession, "logo");
verifyNoMoreInteractions(mockSession, mockCommand);
}
public void testFatalCliExceptionHandling() throws Exception { public void testFatalCliExceptionHandling() throws Exception {
CliTerminal cliTerminal = new TestTerminal( CliTerminal cliTerminal = new TestTerminal(