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

jark pushed a commit to branch release-1.11
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/release-1.11 by this push:
     new f391b0d  [FLINK-18055][sql-client] Fix catalog/database does not exist 
in sql client
f391b0d is described below

commit f391b0d433ed16f33018837f42c383992953a7bc
Author: godfrey he <[email protected]>
AuthorDate: Thu Jun 4 17:25:36 2020 +0800

    [FLINK-18055][sql-client] Fix catalog/database does not exist in sql client
    
    This closes #12431
---
 .../flink/table/client/cli/SqlCommandParser.java   |  5 +--
 .../flink/table/client/cli/CliClientTest.java      | 51 ++++++++++++++++++++++
 .../table/client/cli/SqlCommandParserTest.java     |  4 +-
 3 files changed, 55 insertions(+), 5 deletions(-)

diff --git 
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/SqlCommandParser.java
 
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/SqlCommandParser.java
index 5b0a88c..715f021 100644
--- 
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/SqlCommandParser.java
+++ 
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/SqlCommandParser.java
@@ -132,11 +132,10 @@ public final class SqlCommandParser {
                        cmd = SqlCommand.DROP_CATALOG;
                } else if (operation instanceof UseCatalogOperation) {
                        cmd = SqlCommand.USE_CATALOG;
-                       operands = new String[] { String.format("`%s`", 
((UseCatalogOperation) operation).getCatalogName()) };
+                       operands = new String[] { ((UseCatalogOperation) 
operation).getCatalogName() };
                } else if (operation instanceof UseDatabaseOperation) {
                        cmd = SqlCommand.USE;
-                       UseDatabaseOperation op = ((UseDatabaseOperation) 
operation);
-                       operands = new String[] { String.format("`%s`.`%s`", 
op.getCatalogName(), op.getDatabaseName()) };
+                       operands = new String[] { ((UseDatabaseOperation) 
operation).getDatabaseName() };
                } else if (operation instanceof ShowCatalogsOperation) {
                        cmd = SqlCommand.SHOW_CATALOGS;
                        operands = new String[0];
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 8a7ca75..19d91ab 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
@@ -45,6 +45,7 @@ import org.jline.terminal.impl.DumbTerminal;
 import org.junit.Test;
 
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -167,6 +168,35 @@ public class CliClientTest extends TestLogger {
        }
 
        @Test
+       public void testUseCatalog() throws Exception {
+               TestingExecutor executor = new TestingExecutorBuilder()
+                               .setUseCatalogConsumer((ignored1, catalogName) 
-> {
+                                       if (!catalogName.equals("cat")) {
+                                               throw new 
SqlExecutionException("unexpected catalog name: " + catalogName);
+                                       }
+                               })
+                               .build();
+
+               String output = testExecuteSql(executor, "use catalog cat;");
+               assertThat(executor.getNumUseCatalogCalls(), is(1));
+               assertFalse(output.contains("unexpected catalog name"));
+       }
+
+       @Test
+       public void testUseDatabase() throws Exception {
+               TestingExecutor executor = new TestingExecutorBuilder()
+                               .setUseDatabaseConsumer((ignored1, 
databaseName) -> {
+                                       if (!databaseName.equals("db")) {
+                                               throw new 
SqlExecutionException("unexpected database name: " + databaseName);
+                                       }
+                               })
+                               .build();
+               String output = testExecuteSql(executor, "use db;");
+               assertThat(executor.getNumUseDatabaseCalls(), is(1));
+               assertFalse(output.contains("unexpected database name"));
+       }
+
+       @Test
        public void testHistoryFile() throws Exception {
                final SessionContext context = new 
SessionContext("test-session", new Environment());
                final MockExecutor mockExecutor = new MockExecutor();
@@ -198,6 +228,27 @@ public class CliClientTest extends TestLogger {
 
        // 
--------------------------------------------------------------------------------------------
 
+       /**
+        * execute a sql statement and return the terminal output as string.
+        */
+       private String testExecuteSql(TestingExecutor executor, String sql) 
throws IOException {
+               InputStream inputStream = new ByteArrayInputStream((sql + 
"\n").getBytes());
+               ByteArrayOutputStream outputStream = new 
ByteArrayOutputStream(256);
+               CliClient cliClient = null;
+               SessionContext sessionContext = new 
SessionContext("test-session", new Environment());
+               String sessionId = executor.openSession(sessionContext);
+
+               try (Terminal terminal = new DumbTerminal(inputStream, 
outputStream)) {
+                       cliClient = new CliClient(terminal, sessionId, 
executor, File.createTempFile("history", "tmp").toPath());
+                       cliClient.open();
+                       return new String(outputStream.toByteArray());
+               } finally {
+                       if (cliClient != null) {
+                               cliClient.close();
+                       }
+               }
+       }
+
        private void verifyUpdateSubmission(String statement, boolean 
failExecution, boolean testFailure) throws Exception {
                final SessionContext context = new 
SessionContext("test-session", new Environment());
 
diff --git 
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/SqlCommandParserTest.java
 
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/SqlCommandParserTest.java
index c3e9250..9b7c2d0 100644
--- 
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/SqlCommandParserTest.java
+++ 
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/SqlCommandParserTest.java
@@ -134,8 +134,8 @@ public class SqlCommandParserTest {
                                // drop catalog xx
                                TestItem.validSql("drop CATALOG c1", 
SqlCommand.DROP_CATALOG, "drop CATALOG c1"),
                                // use xx
-                               TestItem.validSql("USE CATALOG catalog1;", 
SqlCommand.USE_CATALOG, "`catalog1`"),
-                               TestItem.validSql("use `default`;", 
SqlCommand.USE, "`default_catalog`.`default`"),
+                               TestItem.validSql("USE CATALOG catalog1;", 
SqlCommand.USE_CATALOG, "catalog1"),
+                               TestItem.validSql("use `default`;", 
SqlCommand.USE, "default"),
                                TestItem.invalidSql("use catalog "), // no 
catalog name
                                // create database xx
                                TestItem.validSql("create database db1;", 
SqlCommand.CREATE_DATABASE, "create database db1"),

Reply via email to