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

jark 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 6668d3b  [FLINK-21741][sql-client] Support SHOW JARS statement in SQL 
Client (#16010)
6668d3b is described below

commit 6668d3be2edaea9a775f00336abd5e2fa8929a34
Author: SteNicholas <[email protected]>
AuthorDate: Tue Jun 1 12:07:47 2021 +0800

    [FLINK-21741][sql-client] Support SHOW JARS statement in SQL Client (#16010)
---
 .../apache/flink/table/client/cli/CliClient.java   |  8 ++++
 .../flink/table/client/gateway/Executor.java       |  3 ++
 .../client/gateway/context/SessionContext.java     |  6 +++
 .../table/client/gateway/local/LocalExecutor.java  |  6 +++
 .../flink/table/client/cli/CliClientTest.java      |  5 ++
 .../flink/table/client/cli/CliResultViewTest.java  |  5 ++
 .../flink/table/client/cli/TestingExecutor.java    |  5 ++
 .../client/gateway/context/SessionContextTest.java |  2 +
 .../src/test/resources/sql/function.q              |  4 ++
 .../flink-sql-client/src/test/resources/sql/set.q  |  8 ++++
 .../src/main/codegen/data/Parser.tdd               |  4 ++
 .../src/main/codegen/includes/parserImpls.ftl      | 14 ++++++
 .../parser/hive/FlinkHiveSqlParserImplTest.java    |  5 ++
 .../src/main/codegen/data/Parser.tdd               |  4 ++
 .../src/main/codegen/includes/parserImpls.ftl      | 14 ++++++
 .../apache/flink/sql/parser/dql/SqlShowJars.java   | 56 ++++++++++++++++++++++
 .../flink/sql/parser/FlinkSqlParserImplTest.java   |  5 ++
 .../operations/command/ShowJarsOperation.java      | 30 ++++++++++++
 .../operations/SqlToOperationConverter.java        |  8 ++++
 .../table/planner/calcite/FlinkPlannerImpl.scala   |  1 +
 .../operations/SqlToOperationConverterTest.java    | 14 +++++-
 21 files changed, 205 insertions(+), 2 deletions(-)

diff --git 
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/CliClient.java
 
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/CliClient.java
index d1f5f3e..67f7f7f 100644
--- 
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/CliClient.java
+++ 
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/cli/CliClient.java
@@ -43,6 +43,7 @@ import 
org.apache.flink.table.operations.command.HelpOperation;
 import org.apache.flink.table.operations.command.QuitOperation;
 import org.apache.flink.table.operations.command.ResetOperation;
 import org.apache.flink.table.operations.command.SetOperation;
+import org.apache.flink.table.operations.command.ShowJarsOperation;
 import org.apache.flink.table.operations.ddl.AlterOperation;
 import org.apache.flink.table.operations.ddl.CreateOperation;
 import org.apache.flink.table.operations.ddl.DropOperation;
@@ -425,6 +426,9 @@ public class CliClient implements AutoCloseable {
         } else if (operation instanceof AddJarOperation) {
             // ADD JAR
             callAddJar((AddJarOperation) operation);
+        } else if (operation instanceof ShowJarsOperation) {
+            // SHOW JARS
+            callShowJars();
         } else if (operation instanceof ShowCreateTableOperation) {
             // SHOW CREATE TABLE
             callShowCreateTable((ShowCreateTableOperation) operation);
@@ -440,6 +444,10 @@ public class CliClient implements AutoCloseable {
         printInfo(CliStrings.MESSAGE_ADD_JAR_STATEMENT);
     }
 
+    private void callShowJars() {
+        executor.listJars(sessionId).forEach(jar -> 
terminal.writer().println(jar));
+    }
+
     private void callQuit() {
         printInfo(CliStrings.MESSAGE_QUIT);
         isRunning = false;
diff --git 
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/gateway/Executor.java
 
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/gateway/Executor.java
index d29d1ab..d76fe5f 100644
--- 
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/gateway/Executor.java
+++ 
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/gateway/Executor.java
@@ -142,4 +142,7 @@ public interface Executor {
 
     /** Add the JAR resource to into the classloader with specified session. */
     void addJar(String sessionId, String jarPath);
+
+    /** List the JAR resources of the classloader with specified session. */
+    List<String> listJars(String sessionId);
 }
diff --git 
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/gateway/context/SessionContext.java
 
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/gateway/context/SessionContext.java
index acaf90a..8c859b2 100644
--- 
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/gateway/context/SessionContext.java
+++ 
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/gateway/context/SessionContext.java
@@ -51,8 +51,10 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * Context describing a session, it's mainly used for user to open a new 
session in the backend. If
@@ -282,6 +284,10 @@ public class SessionContext {
         executionContext = new ExecutionContext(sessionConfiguration, 
classLoader, sessionState);
     }
 
+    public List<String> listJars() {
+        return 
dependencies.stream().map(URL::getPath).collect(Collectors.toList());
+    }
+
     // 
--------------------------------------------------------------------------------------------
     // Inner class
     // 
--------------------------------------------------------------------------------------------
diff --git 
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/gateway/local/LocalExecutor.java
 
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/gateway/local/LocalExecutor.java
index 44c8b66..784436c 100644
--- 
a/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/gateway/local/LocalExecutor.java
+++ 
b/flink-table/flink-sql-client/src/main/java/org/apache/flink/table/client/gateway/local/LocalExecutor.java
@@ -313,4 +313,10 @@ public class LocalExecutor implements Executor {
         final SessionContext context = getSessionContext(sessionId);
         context.addJar(jarUrl);
     }
+
+    @Override
+    public List<String> listJars(String sessionId) {
+        final SessionContext context = getSessionContext(sessionId);
+        return context.listJars();
+    }
 }
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 f2680b9..79b73fa 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
@@ -523,5 +523,10 @@ public class CliClientTest extends TestLogger {
         public void addJar(String sessionId, String jarUrl) {
             throw new UnsupportedOperationException("Not implemented.");
         }
+
+        @Override
+        public List<String> listJars(String sessionId) {
+            throw new UnsupportedOperationException("Not implemented.");
+        }
     }
 }
diff --git 
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliResultViewTest.java
 
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliResultViewTest.java
index ef406d1..44569c9 100644
--- 
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliResultViewTest.java
+++ 
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/CliResultViewTest.java
@@ -231,6 +231,11 @@ public class CliResultViewTest {
         public void addJar(String sessionId, String jarUrl) {
             throw new UnsupportedOperationException("Not implemented.");
         }
+
+        @Override
+        public List<String> listJars(String sessionId) {
+            throw new UnsupportedOperationException("Not implemented.");
+        }
     }
 
     private static final class TestingCliResultView implements Runnable {
diff --git 
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/TestingExecutor.java
 
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/TestingExecutor.java
index ec01c67..44ff121 100644
--- 
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/TestingExecutor.java
+++ 
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/cli/TestingExecutor.java
@@ -73,6 +73,11 @@ class TestingExecutor implements Executor {
     }
 
     @Override
+    public List<String> listJars(String sessionId) {
+        throw new UnsupportedOperationException("Not implemented.");
+    }
+
+    @Override
     public TypedResult<List<Row>> retrieveResultChanges(String sessionId, 
String resultId)
             throws SqlExecutionException {
         return resultChanges
diff --git 
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/gateway/context/SessionContextTest.java
 
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/gateway/context/SessionContextTest.java
index 42158d1..faa06e4 100644
--- 
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/gateway/context/SessionContextTest.java
+++ 
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/gateway/context/SessionContextTest.java
@@ -261,11 +261,13 @@ public class SessionContextTest {
 
     private void validateAddJar(String jarPath) throws IOException {
         sessionContext.addJar(jarPath);
+        assertEquals(Collections.singletonList(udfJar.getPath()), 
sessionContext.listJars());
         assertEquals(
                 Collections.singletonList(udfJar.toURI().toURL().toString()),
                 getConfiguration().get(JARS));
         // reset to the default
         sessionContext.reset();
+        assertEquals(Collections.singletonList(udfJar.getPath()), 
sessionContext.listJars());
         assertEquals(
                 Collections.singletonList(udfJar.toURI().toURL().toString()),
                 getConfiguration().get(JARS));
diff --git a/flink-table/flink-sql-client/src/test/resources/sql/function.q 
b/flink-table/flink-sql-client/src/test/resources/sql/function.q
index 6711694..549af52 100644
--- a/flink-table/flink-sql-client/src/test/resources/sql/function.q
+++ b/flink-table/flink-sql-client/src/test/resources/sql/function.q
@@ -19,6 +19,10 @@ ADD JAR '$VAR_UDF_JAR_PATH';
 [INFO] The specified jar is added into session classloader.
 !info
 
+SHOW JARS;
+$VAR_UDF_JAR_PATH
+!ok
+
 # this also tests user classloader because the LowerUDF is in user jar
 create function func1 as 'LowerUDF' LANGUAGE JAVA;
 [INFO] Execute statement succeed.
diff --git a/flink-table/flink-sql-client/src/test/resources/sql/set.q 
b/flink-table/flink-sql-client/src/test/resources/sql/set.q
index 5f6fb7c..bd62c29 100644
--- a/flink-table/flink-sql-client/src/test/resources/sql/set.q
+++ b/flink-table/flink-sql-client/src/test/resources/sql/set.q
@@ -176,6 +176,10 @@ ADD JAR '$VAR_UDF_JAR_PATH';
 [INFO] The specified jar is added into session classloader.
 !info
 
+SHOW JARS;
+$VAR_UDF_JAR_PATH
+!ok
+
 set;
 execution.attached=true
 execution.savepoint.ignore-unclaimed-state=false
@@ -191,6 +195,10 @@ reset;
 [INFO] All session properties have been set to their default values.
 !info
 
+SHOW JARS;
+$VAR_UDF_JAR_PATH
+!ok
+
 SET sql-client.execution.result-mode=tableau;
 [INFO] Session property has been set.
 !info
diff --git a/flink-table/flink-sql-parser-hive/src/main/codegen/data/Parser.tdd 
b/flink-table/flink-sql-parser-hive/src/main/codegen/data/Parser.tdd
index 8e2b62a..8476da7 100644
--- a/flink-table/flink-sql-parser-hive/src/main/codegen/data/Parser.tdd
+++ b/flink-table/flink-sql-parser-hive/src/main/codegen/data/Parser.tdd
@@ -86,6 +86,7 @@
     "org.apache.flink.sql.parser.dql.SqlShowDatabases"
     "org.apache.flink.sql.parser.dql.SqlShowCurrentDatabase"
     "org.apache.flink.sql.parser.dql.SqlShowFunctions"
+    "org.apache.flink.sql.parser.dql.SqlShowJars"
     "org.apache.flink.sql.parser.dql.SqlShowModules"
     "org.apache.flink.sql.parser.dql.SqlShowTables"
     "org.apache.flink.sql.parser.dql.SqlShowPartitions"
@@ -130,6 +131,7 @@
     "INPUTFORMAT"
     "ITEMS"
     "JAR"
+    "JARS"
     "KEYS"
     "LINES"
     "LOAD"
@@ -272,6 +274,7 @@
     "ISOLATION"
     "ISOYEAR"
     "JAR"
+    "JARS"
     "JAVA"
     "JSON"
     "K"
@@ -543,6 +546,7 @@
     "SqlUseModules()"
     "SqlRichExplain()"
     "SqlAddJar()"
+    "SqlShowJars()"
   ]
 
   # List of methods for parsing custom literals.
diff --git 
a/flink-table/flink-sql-parser-hive/src/main/codegen/includes/parserImpls.ftl 
b/flink-table/flink-sql-parser-hive/src/main/codegen/includes/parserImpls.ftl
index 53d7ecc..37c4a70 100644
--- 
a/flink-table/flink-sql-parser-hive/src/main/codegen/includes/parserImpls.ftl
+++ 
b/flink-table/flink-sql-parser-hive/src/main/codegen/includes/parserImpls.ftl
@@ -1642,3 +1642,17 @@ SqlAddJar SqlAddJar() :
         return new SqlAddJar(getPos(), jarPath);
     }
 }
+
+/**
+* Parses a show jars statement.
+* SHOW JARS;
+*/
+SqlShowJars SqlShowJars() :
+{
+}
+{
+    <SHOW> <JARS>
+    {
+        return new SqlShowJars(getPos());
+    }
+}
diff --git 
a/flink-table/flink-sql-parser-hive/src/test/java/org/apache/flink/sql/parser/hive/FlinkHiveSqlParserImplTest.java
 
b/flink-table/flink-sql-parser-hive/src/test/java/org/apache/flink/sql/parser/hive/FlinkHiveSqlParserImplTest.java
index 89f3451..08cceed 100644
--- 
a/flink-table/flink-sql-parser-hive/src/test/java/org/apache/flink/sql/parser/hive/FlinkHiveSqlParserImplTest.java
+++ 
b/flink-table/flink-sql-parser-hive/src/test/java/org/apache/flink/sql/parser/hive/FlinkHiveSqlParserImplTest.java
@@ -467,6 +467,11 @@ public class FlinkHiveSqlParserImplTest extends 
SqlParserTest {
     }
 
     @Test
+    public void testShowJars() {
+        sql("show jars").ok("SHOW JARS");
+    }
+
+    @Test
     public void testLoadModule() {
         sql("load module hive").ok("LOAD MODULE `HIVE`");
 
diff --git a/flink-table/flink-sql-parser/src/main/codegen/data/Parser.tdd 
b/flink-table/flink-sql-parser/src/main/codegen/data/Parser.tdd
index f7f7c6b..fcb5bed 100644
--- a/flink-table/flink-sql-parser/src/main/codegen/data/Parser.tdd
+++ b/flink-table/flink-sql-parser/src/main/codegen/data/Parser.tdd
@@ -71,6 +71,7 @@
     "org.apache.flink.sql.parser.dql.SqlShowDatabases"
     "org.apache.flink.sql.parser.dql.SqlShowCurrentDatabase"
     "org.apache.flink.sql.parser.dql.SqlShowFunctions"
+    "org.apache.flink.sql.parser.dql.SqlShowJars"
     "org.apache.flink.sql.parser.dql.SqlShowModules"
     "org.apache.flink.sql.parser.dql.SqlShowTables"
     "org.apache.flink.sql.parser.dql.SqlShowCreateTable"
@@ -105,6 +106,7 @@
     "FUNCTIONS"
     "IF"
     "JAR"
+    "JARS"
     "LOAD"
     "METADATA"
     "MODULES"
@@ -241,6 +243,7 @@
     "ISOLATION"
     "ISOYEAR"
     "JAR"
+    "JARS"
     "JAVA"
     "JSON"
     "K"
@@ -494,6 +497,7 @@
     "SqlUseModules()"
     "SqlRichExplain()"
     "SqlAddJar()"
+    "SqlShowJars()"
     "SqlSet()"
     "SqlReset()"
   ]
diff --git 
a/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl 
b/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
index e17c92c..4be7ded 100644
--- a/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
+++ b/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
@@ -1665,6 +1665,20 @@ SqlAddJar SqlAddJar() :
     }
 }
 
+/**
+* Parses a show jars statement.
+* SHOW JARS;
+*/
+SqlShowJars SqlShowJars() :
+{
+}
+{
+    <SHOW> <JARS>
+    {
+        return new SqlShowJars(getPos());
+    }
+}
+
 /*
 * Parses a SET statement:
 * SET ['key' = 'value'];
diff --git 
a/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowJars.java
 
b/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowJars.java
new file mode 100644
index 0000000..8aac3d0
--- /dev/null
+++ 
b/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowJars.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.flink.sql.parser.dql;
+
+import org.apache.calcite.sql.SqlCall;
+import org.apache.calcite.sql.SqlKind;
+import org.apache.calcite.sql.SqlNode;
+import org.apache.calcite.sql.SqlOperator;
+import org.apache.calcite.sql.SqlSpecialOperator;
+import org.apache.calcite.sql.SqlWriter;
+import org.apache.calcite.sql.parser.SqlParserPos;
+
+import java.util.Collections;
+import java.util.List;
+
+/** SHOW JARS sql call. */
+public class SqlShowJars extends SqlCall {
+
+    public static final SqlSpecialOperator OPERATOR =
+            new SqlSpecialOperator("SHOW JARS", SqlKind.OTHER);
+
+    public SqlShowJars(SqlParserPos pos) {
+        super(pos);
+    }
+
+    @Override
+    public SqlOperator getOperator() {
+        return OPERATOR;
+    }
+
+    @Override
+    public List<SqlNode> getOperandList() {
+        return Collections.emptyList();
+    }
+
+    @Override
+    public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {
+        writer.keyword("SHOW JARS");
+    }
+}
diff --git 
a/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java
 
b/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java
index 8ae6d50..48bbf9f 100644
--- 
a/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java
+++ 
b/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java
@@ -1344,6 +1344,11 @@ public class FlinkSqlParserImplTest extends 
SqlParserTest {
     }
 
     @Test
+    public void testShowJars() {
+        sql("show jars").ok("SHOW JARS");
+    }
+
+    @Test
     public void testSetReset() {
         sql("SET").ok("SET");
         sql("SET 'test-key' = 'test-value'").ok("SET 'test-key' = 
'test-value'");
diff --git 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/command/ShowJarsOperation.java
 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/command/ShowJarsOperation.java
new file mode 100644
index 0000000..d0995c2
--- /dev/null
+++ 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/command/ShowJarsOperation.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.flink.table.operations.command;
+
+import org.apache.flink.table.operations.ShowOperation;
+
+/** Operation to describe a SHOW JARS statement. */
+public class ShowJarsOperation implements ShowOperation {
+
+    @Override
+    public String asSummaryString() {
+        return "SHOW JARS";
+    }
+}
diff --git 
a/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/operations/SqlToOperationConverter.java
 
b/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/operations/SqlToOperationConverter.java
index 3cf2e96..56ec0be 100644
--- 
a/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/operations/SqlToOperationConverter.java
+++ 
b/flink-table/flink-table-planner-blink/src/main/java/org/apache/flink/table/planner/operations/SqlToOperationConverter.java
@@ -64,6 +64,7 @@ import org.apache.flink.sql.parser.dql.SqlShowCurrentCatalog;
 import org.apache.flink.sql.parser.dql.SqlShowCurrentDatabase;
 import org.apache.flink.sql.parser.dql.SqlShowDatabases;
 import org.apache.flink.sql.parser.dql.SqlShowFunctions;
+import org.apache.flink.sql.parser.dql.SqlShowJars;
 import org.apache.flink.sql.parser.dql.SqlShowModules;
 import org.apache.flink.sql.parser.dql.SqlShowPartitions;
 import org.apache.flink.sql.parser.dql.SqlShowTables;
@@ -116,6 +117,7 @@ import 
org.apache.flink.table.operations.UseModulesOperation;
 import org.apache.flink.table.operations.command.AddJarOperation;
 import org.apache.flink.table.operations.command.ResetOperation;
 import org.apache.flink.table.operations.command.SetOperation;
+import org.apache.flink.table.operations.command.ShowJarsOperation;
 import org.apache.flink.table.operations.ddl.AddPartitionsOperation;
 import org.apache.flink.table.operations.ddl.AlterCatalogFunctionOperation;
 import org.apache.flink.table.operations.ddl.AlterDatabaseOperation;
@@ -279,6 +281,8 @@ public class SqlToOperationConverter {
             return 
Optional.of(converter.convertDescribeTable((SqlRichDescribeTable) validated));
         } else if (validated instanceof SqlAddJar) {
             return Optional.of(converter.convertAddJar((SqlAddJar) validated));
+        } else if (validated instanceof SqlShowJars) {
+            return Optional.of(converter.convertShowJars((SqlShowJars) 
validated));
         } else if (validated instanceof RichSqlInsert) {
             return Optional.of(converter.convertSqlInsert((RichSqlInsert) 
validated));
         } else if (validated instanceof SqlBeginStatementSet) {
@@ -974,6 +978,10 @@ public class SqlToOperationConverter {
         return new AddJarOperation(sqlAddJar.getPath());
     }
 
+    private Operation convertShowJars(SqlShowJars sqlShowJars) {
+        return new ShowJarsOperation();
+    }
+
     /** Convert UNLOAD MODULE statement. */
     private Operation convertUnloadModule(SqlUnloadModule sqlUnloadModule) {
         String moduleName = sqlUnloadModule.moduleName();
diff --git 
a/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/calcite/FlinkPlannerImpl.scala
 
b/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/calcite/FlinkPlannerImpl.scala
index 6df9e90..b17eeaf 100644
--- 
a/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/calcite/FlinkPlannerImpl.scala
+++ 
b/flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/calcite/FlinkPlannerImpl.scala
@@ -130,6 +130,7 @@ class FlinkPlannerImpl(
         || sqlNode.isInstanceOf[SqlShowCurrentDatabase]
         || sqlNode.isInstanceOf[SqlShowTables]
         || sqlNode.isInstanceOf[SqlShowFunctions]
+        || sqlNode.isInstanceOf[SqlShowJars]
         || sqlNode.isInstanceOf[SqlShowModules]
         || sqlNode.isInstanceOf[SqlShowViews]
         || sqlNode.isInstanceOf[SqlShowPartitions]
diff --git 
a/flink-table/flink-table-planner-blink/src/test/java/org/apache/flink/table/planner/operations/SqlToOperationConverterTest.java
 
b/flink-table/flink-table-planner-blink/src/test/java/org/apache/flink/table/planner/operations/SqlToOperationConverterTest.java
index 038625c..88ab060 100644
--- 
a/flink-table/flink-table-planner-blink/src/test/java/org/apache/flink/table/planner/operations/SqlToOperationConverterTest.java
+++ 
b/flink-table/flink-table-planner-blink/src/test/java/org/apache/flink/table/planner/operations/SqlToOperationConverterTest.java
@@ -62,6 +62,7 @@ import org.apache.flink.table.operations.UseModulesOperation;
 import org.apache.flink.table.operations.command.AddJarOperation;
 import org.apache.flink.table.operations.command.ResetOperation;
 import org.apache.flink.table.operations.command.SetOperation;
+import org.apache.flink.table.operations.command.ShowJarsOperation;
 import org.apache.flink.table.operations.ddl.AlterDatabaseOperation;
 import org.apache.flink.table.operations.ddl.AlterTableAddConstraintOperation;
 import org.apache.flink.table.operations.ddl.AlterTableDropConstraintOperation;
@@ -1354,7 +1355,7 @@ public class SqlToOperationConverterTest {
     }
 
     @Test
-    public void testAddJars() {
+    public void testAddJar() {
         List<String> jarPaths =
                 Arrays.asList(
                         "./test.\njar",
@@ -1364,11 +1365,20 @@ public class SqlToOperationConverterTest {
                         "test\\ jar.jar",
                         "oss://path/helloworld.go");
         for (String path : jarPaths) {
-            validateJarPath(path, "  ADD   JAR   '%s'");
+            validateJarPath(path, "ADD JAR '%s'");
         }
     }
 
     @Test
+    public void testShowJars() {
+        final String sql = "SHOW JARS";
+        Operation operation = parse(sql, SqlDialect.DEFAULT);
+        assert operation instanceof ShowJarsOperation;
+        final ShowJarsOperation showModulesOperation = (ShowJarsOperation) 
operation;
+        assertEquals("SHOW JARS", showModulesOperation.asSummaryString());
+    }
+
+    @Test
     public void testSet() {
         Operation operation1 = parse("SET", SqlDialect.DEFAULT);
         assertTrue(operation1 instanceof SetOperation);

Reply via email to