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

snuyanzin 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 e217fa15c28 [FLINK-36126][table] Qualification of current catalog and 
current database should happen during execution, not parsing (#25230)
e217fa15c28 is described below

commit e217fa15c28e18ca2ede90126b1f1048468716dc
Author: Sergey Nuyanzin <[email protected]>
AuthorDate: Wed Aug 21 21:48:42 2024 +0200

    [FLINK-36126][table] Qualification of current catalog and current database 
should happen during execution, not parsing (#25230)
---
 .../apache/flink/sql/parser/dql/SqlShowCall.java   |  1 +
 .../table/operations/AbstractShowOperation.java    |  6 ++-
 .../table/operations/ShowDatabasesOperation.java   | 11 ++--
 .../table/operations/ShowFunctionsOperation.java   |  6 +--
 .../table/operations/ShowProceduresOperation.java  | 23 +++++---
 .../table/operations/ShowTablesOperation.java      | 23 ++++----
 .../flink/table/operations/ShowViewsOperation.java | 23 ++++----
 .../converters/AbstractSqlShowConverter.java       | 30 +++--------
 .../converters/SqlShowDatabasesConverter.java      |  3 +-
 .../converters/SqlShowFunctionsConverter.java      | 21 +++-----
 .../converters/SqlShowProcedureConverter.java      | 14 ++---
 .../converters/SqlShowTablesConverter.java         | 14 ++---
 .../converters/SqlShowViewsConverter.java          | 14 ++---
 .../SqlShowToOperationConverterTest.java           | 61 ++++++++++++++++++++++
 14 files changed, 160 insertions(+), 90 deletions(-)

diff --git 
a/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCall.java
 
b/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCall.java
index 3b855812a79..d769d3a8213 100644
--- 
a/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCall.java
+++ 
b/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCall.java
@@ -30,6 +30,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 
+/** Abstract class for SHOW sql call. */
 public abstract class SqlShowCall extends SqlCall {
     private final String preposition;
     private final SqlIdentifier sqlIdentifier;
diff --git 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/AbstractShowOperation.java
 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/AbstractShowOperation.java
index 9a4984e317e..08d2bff47db 100644
--- 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/AbstractShowOperation.java
+++ 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/AbstractShowOperation.java
@@ -38,12 +38,14 @@ import static 
org.apache.flink.table.api.internal.TableResultUtils.buildStringAr
  */
 @Internal
 public abstract class AbstractShowOperation implements ShowOperation {
-    protected final String catalogName;
+    protected final @Nullable String catalogName;
     protected final @Nullable String preposition;
     protected final @Nullable ShowLikeOperator likeOp;
 
     public AbstractShowOperation(
-            String catalogName, @Nullable String preposition, @Nullable 
ShowLikeOperator likeOp) {
+            @Nullable String catalogName,
+            @Nullable String preposition,
+            @Nullable ShowLikeOperator likeOp) {
         this.catalogName = catalogName;
         this.preposition = preposition;
         this.likeOp = likeOp;
diff --git 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowDatabasesOperation.java
 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowDatabasesOperation.java
index 80bbf6cb774..55b878abfdf 100644
--- 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowDatabasesOperation.java
+++ 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowDatabasesOperation.java
@@ -38,22 +38,25 @@ import java.util.Collection;
 public class ShowDatabasesOperation extends AbstractShowOperation {
 
     public ShowDatabasesOperation(
-            String catalogName, @Nullable String preposition, @Nullable 
ShowLikeOperator likeOp) {
+            @Nullable String catalogName,
+            @Nullable String preposition,
+            @Nullable ShowLikeOperator likeOp) {
         super(catalogName, preposition, likeOp);
     }
 
-    public ShowDatabasesOperation(String catalogName, ShowLikeOperator likeOp) 
{
+    public ShowDatabasesOperation(@Nullable String catalogName, @Nullable 
ShowLikeOperator likeOp) {
         this(catalogName, null, likeOp);
     }
 
-    public ShowDatabasesOperation(String catalogName) {
+    public ShowDatabasesOperation(@Nullable String catalogName) {
         this(catalogName, null, null);
     }
 
     @Override
     protected Collection<String> retrieveDataForTableResult(Context ctx) {
         final CatalogManager catalogManager = ctx.getCatalogManager();
-        return 
catalogManager.getCatalogOrThrowException(catalogName).listDatabases();
+        final String qualifiedCatalogName = 
catalogManager.qualifyCatalog(catalogName);
+        return 
catalogManager.getCatalogOrThrowException(qualifiedCatalogName).listDatabases();
     }
 
     @Override
diff --git 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowFunctionsOperation.java
 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowFunctionsOperation.java
index 697432efc1c..aeeab6c47d3 100644
--- 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowFunctionsOperation.java
+++ 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowFunctionsOperation.java
@@ -57,7 +57,7 @@ public class ShowFunctionsOperation extends 
AbstractShowOperation {
     private final FunctionScope functionScope;
     private final @Nullable String databaseName;
 
-    public ShowFunctionsOperation(String catalogName, String databaseName) {
+    public ShowFunctionsOperation(@Nullable String catalogName, @Nullable 
String databaseName) {
         // "SHOW FUNCTIONS" default is ALL scope
         this(FunctionScope.ALL, catalogName, databaseName, null);
     }
@@ -73,8 +73,8 @@ public class ShowFunctionsOperation extends 
AbstractShowOperation {
     public ShowFunctionsOperation(
             FunctionScope functionScope,
             @Nullable String preposition,
-            String catalogName,
-            String databaseName,
+            @Nullable String catalogName,
+            @Nullable String databaseName,
             @Nullable ShowLikeOperator likeOp) {
         super(catalogName, preposition, likeOp);
         this.functionScope = functionScope;
diff --git 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowProceduresOperation.java
 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowProceduresOperation.java
index 56d56d1f45b..6a5a50c8cc5 100644
--- 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowProceduresOperation.java
+++ 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowProceduresOperation.java
@@ -41,11 +41,11 @@ import java.util.Collection;
 @Internal
 public class ShowProceduresOperation extends AbstractShowOperation {
 
-    private final String databaseName;
+    private final @Nullable String databaseName;
 
     public ShowProceduresOperation(
-            String catalogName,
-            String databaseName,
+            @Nullable String catalogName,
+            @Nullable String databaseName,
             @Nullable String preposition,
             @Nullable ShowLikeOperator likeOp) {
         super(catalogName, preposition, likeOp);
@@ -53,26 +53,33 @@ public class ShowProceduresOperation extends 
AbstractShowOperation {
     }
 
     public ShowProceduresOperation(
-            String catalogName, String databaseName, @Nullable 
ShowLikeOperator likeOp) {
+            @Nullable String catalogName,
+            @Nullable String databaseName,
+            @Nullable ShowLikeOperator likeOp) {
         this(catalogName, databaseName, null, likeOp);
     }
 
     @Override
     protected Collection<String> retrieveDataForTableResult(Context ctx) {
         final CatalogManager catalogManager = ctx.getCatalogManager();
+        final String qualifiedCatalogName = 
catalogManager.qualifyCatalog(catalogName);
+        final String qualifiedDatabaseName = 
catalogManager.qualifyDatabase(databaseName);
         try {
             if (preposition == null) {
                 // it's to show current_catalog.current_database
-                return 
catalogManager.getCatalogOrError(catalogName).listProcedures(databaseName);
+                return catalogManager
+                        .getCatalogOrError(qualifiedCatalogName)
+                        .listProcedures(qualifiedDatabaseName);
             } else {
-                Catalog catalog = 
catalogManager.getCatalogOrThrowException(catalogName);
-                return catalog.listProcedures(databaseName);
+                Catalog catalog = 
catalogManager.getCatalogOrThrowException(qualifiedCatalogName);
+                return catalog.listProcedures(qualifiedDatabaseName);
             }
         } catch (DatabaseNotExistException e) {
             throw new TableException(
                     String.format(
                             "Fail to show procedures because the Database `%s` 
to show from/in does not exist in Catalog `%s`.",
-                            databaseName, catalogName));
+                            qualifiedDatabaseName, qualifiedCatalogName),
+                    e);
         }
     }
 
diff --git 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowTablesOperation.java
 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowTablesOperation.java
index 348c9df6c21..e5de166d96c 100644
--- 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowTablesOperation.java
+++ 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowTablesOperation.java
@@ -39,11 +39,11 @@ import java.util.Set;
 @Internal
 public class ShowTablesOperation extends AbstractShowOperation {
 
-    private final String databaseName;
+    private final @Nullable String databaseName;
 
     public ShowTablesOperation(
-            String catalogName,
-            String databaseName,
+            @Nullable String catalogName,
+            @Nullable String databaseName,
             @Nullable String preposition,
             @Nullable ShowLikeOperator likeOp) {
         super(catalogName, preposition, likeOp);
@@ -51,27 +51,32 @@ public class ShowTablesOperation extends 
AbstractShowOperation {
     }
 
     public ShowTablesOperation(
-            String catalogName, String databaseName, @Nullable 
ShowLikeOperator likeOp) {
+            @Nullable String catalogName,
+            @Nullable String databaseName,
+            @Nullable ShowLikeOperator likeOp) {
         this(catalogName, databaseName, null, likeOp);
     }
 
-    public ShowTablesOperation(String catalogName, String databaseName) {
+    public ShowTablesOperation(@Nullable String catalogName, @Nullable String 
databaseName) {
         this(catalogName, databaseName, null);
     }
 
     @Override
     protected Set<String> retrieveDataForTableResult(Context ctx) {
         final CatalogManager catalogManager = ctx.getCatalogManager();
+        final String qualifiedCatalogName = 
catalogManager.qualifyCatalog(catalogName);
+        final String qualifiedDatabaseName = 
catalogManager.qualifyDatabase(databaseName);
         if (preposition == null) {
             return catalogManager.listTables();
         } else {
-            Catalog catalog = 
catalogManager.getCatalogOrThrowException(catalogName);
-            if (catalog.databaseExists(databaseName)) {
-                return catalogManager.listTables(catalogName, databaseName);
+            Catalog catalog = 
catalogManager.getCatalogOrThrowException(qualifiedCatalogName);
+            if (catalog.databaseExists(qualifiedDatabaseName)) {
+                return catalogManager.listTables(qualifiedCatalogName, 
qualifiedDatabaseName);
             } else {
                 throw new ValidationException(
                         String.format(
-                                "Database '%s'.'%s' doesn't exist.", 
catalogName, databaseName));
+                                "Database '%s'.'%s' doesn't exist.",
+                                qualifiedCatalogName, qualifiedDatabaseName));
             }
         }
     }
diff --git 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowViewsOperation.java
 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowViewsOperation.java
index 180cea511e7..f253be80615 100644
--- 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowViewsOperation.java
+++ 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowViewsOperation.java
@@ -39,11 +39,11 @@ import java.util.Set;
 @Internal
 public class ShowViewsOperation extends AbstractShowOperation {
 
-    private final String databaseName;
+    private final @Nullable String databaseName;
 
     public ShowViewsOperation(
-            String catalogName,
-            String databaseName,
+            @Nullable String catalogName,
+            @Nullable String databaseName,
             @Nullable String preposition,
             @Nullable ShowLikeOperator likeOp) {
         super(catalogName, preposition, likeOp);
@@ -51,11 +51,13 @@ public class ShowViewsOperation extends 
AbstractShowOperation {
     }
 
     public ShowViewsOperation(
-            String catalogName, String databaseName, @Nullable 
ShowLikeOperator likeOp) {
+            @Nullable String catalogName,
+            @Nullable String databaseName,
+            @Nullable ShowLikeOperator likeOp) {
         this(catalogName, databaseName, null, likeOp);
     }
 
-    public ShowViewsOperation(String catalogName, String databaseName) {
+    public ShowViewsOperation(@Nullable String catalogName, @Nullable String 
databaseName) {
         this(catalogName, databaseName, null);
     }
 
@@ -66,16 +68,19 @@ public class ShowViewsOperation extends 
AbstractShowOperation {
 
     protected Set<String> retrieveDataForTableResult(Context ctx) {
         final CatalogManager catalogManager = ctx.getCatalogManager();
+        final String qualifiedCatalogName = 
catalogManager.qualifyCatalog(catalogName);
+        final String qualifiedDatabaseName = 
catalogManager.qualifyDatabase(databaseName);
         if (preposition == null) {
             return catalogManager.listViews();
         } else {
-            Catalog catalog = 
catalogManager.getCatalogOrThrowException(catalogName);
-            if (catalog.databaseExists(databaseName)) {
-                return catalogManager.listViews(catalogName, databaseName);
+            Catalog catalog = 
catalogManager.getCatalogOrThrowException(qualifiedCatalogName);
+            if (catalog.databaseExists(qualifiedDatabaseName)) {
+                return catalogManager.listViews(qualifiedCatalogName, 
qualifiedDatabaseName);
             } else {
                 throw new ValidationException(
                         String.format(
-                                "Database '%s'.'%s' doesn't exist.", 
catalogName, databaseName));
+                                "Database '%s'.'%s' doesn't exist.",
+                                qualifiedCatalogName, qualifiedDatabaseName));
             }
         }
     }
diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/AbstractSqlShowConverter.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/AbstractSqlShowConverter.java
index 80b5d4d3613..b4e97bfea3f 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/AbstractSqlShowConverter.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/AbstractSqlShowConverter.java
@@ -29,6 +29,7 @@ import javax.annotation.Nullable;
 
 import java.util.List;
 
+/** An abstract class for SHOW converters. */
 public abstract class AbstractSqlShowConverter<T extends SqlShowCall>
         implements SqlNodeConverter<T> {
 
@@ -38,13 +39,8 @@ public abstract class AbstractSqlShowConverter<T extends 
SqlShowCall>
             final CatalogManager catalogManager = context.getCatalogManager();
             final String currentCatalogName = 
catalogManager.getCurrentCatalog();
             final String currentDatabaseName = 
catalogManager.getCurrentDatabase();
-            if (skipQualifyingDefaultCatalogAndDatabase()) {
-                return getOperationWithoutPrep(
-                        currentCatalogName, currentDatabaseName, sqlShowCall, 
likeOp);
-            }
-            final String catalogName = 
catalogManager.qualifyCatalog(currentCatalogName);
-            final String databaseName = 
catalogManager.qualifyDatabase(currentDatabaseName);
-            return getOperationWithoutPrep(catalogName, databaseName, 
sqlShowCall, likeOp);
+            return getOperationWithoutPrep(
+                    sqlShowCall, currentCatalogName, currentDatabaseName, 
likeOp);
         }
         final List<String> sqlIdentifierNameList = 
sqlShowCall.getSqlIdentifierNameList();
         if (sqlIdentifierNameList.size() > 2) {
@@ -64,14 +60,8 @@ public abstract class AbstractSqlShowConverter<T extends 
SqlShowCall>
                 sqlIdentifierNameList.size() == 1
                         ? sqlIdentifierNameList.get(0)
                         : sqlIdentifierNameList.get(1);
-        final String qualifiedCatalogName = 
catalogManager.qualifyCatalog(catalogName);
-        final String qualifiedDatabaseName = 
catalogManager.qualifyDatabase(databaseName);
         return getOperation(
-                sqlShowCall,
-                qualifiedCatalogName,
-                qualifiedDatabaseName,
-                sqlShowCall.getPreposition(),
-                likeOp);
+                sqlShowCall, catalogName, databaseName, 
sqlShowCall.getPreposition(), likeOp);
     }
 
     public ShowLikeOperator getLikeOp(SqlShowCall sqlShowCall) {
@@ -81,22 +71,18 @@ public abstract class AbstractSqlShowConverter<T extends 
SqlShowCall>
     }
 
     public abstract Operation getOperationWithoutPrep(
-            String catalogName,
-            String databaseName,
             T sqlShowCall,
+            @Nullable String catalogName,
+            @Nullable String databaseName,
             @Nullable ShowLikeOperator likeOp);
 
     public abstract Operation getOperation(
             T sqlShowCall,
-            String catalogName,
-            String databaseName,
+            @Nullable String catalogName,
+            @Nullable String databaseName,
             @Nullable String prep,
             @Nullable ShowLikeOperator likeOp);
 
     @Override
     public abstract Operation convertSqlNode(T node, ConvertContext context);
-
-    protected boolean skipQualifyingDefaultCatalogAndDatabase() {
-        return false;
-    }
 }
diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowDatabasesConverter.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowDatabasesConverter.java
index 47c1ec9a781..577d4b73bff 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowDatabasesConverter.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowDatabasesConverter.java
@@ -37,8 +37,7 @@ public class SqlShowDatabasesConverter implements 
SqlNodeConverter<SqlShowDataba
         if (sqlShowDatabases.getPreposition() == null) {
             final CatalogManager catalogManager = context.getCatalogManager();
             final String currentCatalogName = 
catalogManager.getCurrentCatalog();
-            final String qualifiedCatalogName = 
catalogManager.qualifyCatalog(currentCatalogName);
-            return new ShowDatabasesOperation(qualifiedCatalogName, likeOp);
+            return new ShowDatabasesOperation(currentCatalogName, likeOp);
         } else {
             return new ShowDatabasesOperation(
                     sqlShowDatabases.getCatalogName(), 
sqlShowDatabases.getPreposition(), likeOp);
diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowFunctionsConverter.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowFunctionsConverter.java
index 38a67992230..d220eea4bba 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowFunctionsConverter.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowFunctionsConverter.java
@@ -24,15 +24,17 @@ import 
org.apache.flink.table.operations.ShowFunctionsOperation;
 import org.apache.flink.table.operations.ShowFunctionsOperation.FunctionScope;
 import org.apache.flink.table.operations.utils.ShowLikeOperator;
 
+import javax.annotation.Nullable;
+
 /** A converter for {@link SqlShowFunctions}. */
 public class SqlShowFunctionsConverter extends 
AbstractSqlShowConverter<SqlShowFunctions> {
 
     @Override
     public Operation getOperationWithoutPrep(
-            String catalogName,
-            String databaseName,
             SqlShowFunctions sqlShowFunctions,
-            ShowLikeOperator likeOp) {
+            @Nullable String catalogName,
+            @Nullable String databaseName,
+            @Nullable ShowLikeOperator likeOp) {
         final FunctionScope functionScope = getFunctionScope(sqlShowFunctions);
         return new ShowFunctionsOperation(functionScope, catalogName, 
databaseName, likeOp);
     }
@@ -40,10 +42,10 @@ public class SqlShowFunctionsConverter extends 
AbstractSqlShowConverter<SqlShowF
     @Override
     public Operation getOperation(
             SqlShowFunctions sqlShowFunctions,
-            String catalogName,
-            String databaseName,
+            @Nullable String catalogName,
+            @Nullable String databaseName,
             String prep,
-            ShowLikeOperator likeOp) {
+            @Nullable ShowLikeOperator likeOp) {
         final FunctionScope functionScope = getFunctionScope(sqlShowFunctions);
         return new ShowFunctionsOperation(functionScope, prep, catalogName, 
databaseName, likeOp);
     }
@@ -56,11 +58,4 @@ public class SqlShowFunctionsConverter extends 
AbstractSqlShowConverter<SqlShowF
     private static FunctionScope getFunctionScope(SqlShowFunctions 
sqlShowFunctions) {
         return sqlShowFunctions.requireUser() ? FunctionScope.USER : 
FunctionScope.ALL;
     }
-
-    @Override
-    protected boolean skipQualifyingDefaultCatalogAndDatabase() {
-        // It should be supported to list functions with unset catalog
-        // for more info FLINK-33093
-        return true;
-    }
 }
diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowProcedureConverter.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowProcedureConverter.java
index 1be21057cf7..c8c6102b350 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowProcedureConverter.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowProcedureConverter.java
@@ -23,25 +23,27 @@ import org.apache.flink.table.operations.Operation;
 import org.apache.flink.table.operations.ShowProceduresOperation;
 import org.apache.flink.table.operations.utils.ShowLikeOperator;
 
+import javax.annotation.Nullable;
+
 /** A converter for {@link SqlShowProcedures}. */
 public class SqlShowProcedureConverter extends 
AbstractSqlShowConverter<SqlShowProcedures> {
 
     @Override
     public Operation getOperationWithoutPrep(
-            String catalogName,
-            String databaseName,
             SqlShowProcedures sqlShowCall,
-            ShowLikeOperator likeOp) {
+            @Nullable String catalogName,
+            @Nullable String databaseName,
+            @Nullable ShowLikeOperator likeOp) {
         return new ShowProceduresOperation(catalogName, databaseName, likeOp);
     }
 
     @Override
     public Operation getOperation(
             SqlShowProcedures sqlShowCall,
-            String catalogName,
-            String databaseName,
+            @Nullable String catalogName,
+            @Nullable String databaseName,
             String prep,
-            ShowLikeOperator likeOp) {
+            @Nullable ShowLikeOperator likeOp) {
         return new ShowProceduresOperation(catalogName, databaseName, prep, 
likeOp);
     }
 
diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowTablesConverter.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowTablesConverter.java
index fb97902d722..d252b513085 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowTablesConverter.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowTablesConverter.java
@@ -23,23 +23,25 @@ import org.apache.flink.table.operations.Operation;
 import org.apache.flink.table.operations.ShowTablesOperation;
 import org.apache.flink.table.operations.utils.ShowLikeOperator;
 
+import javax.annotation.Nullable;
+
 public class SqlShowTablesConverter extends 
AbstractSqlShowConverter<SqlShowTables> {
     @Override
     public Operation getOperationWithoutPrep(
-            String catalogName,
-            String databaseName,
             SqlShowTables sqlShowCall,
-            ShowLikeOperator likeOp) {
+            @Nullable String catalogName,
+            @Nullable String databaseName,
+            @Nullable ShowLikeOperator likeOp) {
         return new ShowTablesOperation(catalogName, databaseName, likeOp);
     }
 
     @Override
     public Operation getOperation(
             SqlShowTables sqlShowCall,
-            String catalogName,
-            String databaseName,
+            @Nullable String catalogName,
+            @Nullable String databaseName,
             String prep,
-            ShowLikeOperator likeOp) {
+            @Nullable ShowLikeOperator likeOp) {
         return new ShowTablesOperation(catalogName, databaseName, prep, 
likeOp);
     }
 
diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowViewsConverter.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowViewsConverter.java
index 67c3fed5fb0..b2f89a9a737 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowViewsConverter.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/converters/SqlShowViewsConverter.java
@@ -23,23 +23,25 @@ import org.apache.flink.table.operations.Operation;
 import org.apache.flink.table.operations.ShowViewsOperation;
 import org.apache.flink.table.operations.utils.ShowLikeOperator;
 
+import javax.annotation.Nullable;
+
 public class SqlShowViewsConverter extends 
AbstractSqlShowConverter<SqlShowViews> {
     @Override
     public Operation getOperationWithoutPrep(
-            String catalogName,
-            String databaseName,
             SqlShowViews sqlShowCall,
-            ShowLikeOperator likeOp) {
+            @Nullable String catalogName,
+            @Nullable String databaseName,
+            @Nullable ShowLikeOperator likeOp) {
         return new ShowViewsOperation(catalogName, databaseName, likeOp);
     }
 
     @Override
     public Operation getOperation(
             SqlShowViews sqlShowCall,
-            String catalogName,
-            String databaseName,
+            @Nullable String catalogName,
+            @Nullable String databaseName,
             String prep,
-            ShowLikeOperator likeOp) {
+            @Nullable ShowLikeOperator likeOp) {
         return new ShowViewsOperation(catalogName, databaseName, prep, likeOp);
     }
 
diff --git 
a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/operations/SqlShowToOperationConverterTest.java
 
b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/operations/SqlShowToOperationConverterTest.java
new file mode 100644
index 00000000000..e625df03ccd
--- /dev/null
+++ 
b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/operations/SqlShowToOperationConverterTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.planner.operations;
+
+import org.apache.flink.table.catalog.exceptions.DatabaseNotExistException;
+import org.apache.flink.table.catalog.exceptions.TableAlreadyExistException;
+import org.apache.flink.table.catalog.exceptions.TableNotExistException;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+public class SqlShowToOperationConverterTest extends 
SqlNodeToOperationConversionTestBase {
+
+    @BeforeEach
+    public void before() throws TableAlreadyExistException, 
DatabaseNotExistException {
+        // Do nothing
+        // No need to create schema, tables and etc. since the test executes 
for unset catalog and
+        // database
+    }
+
+    @AfterEach
+    public void after() throws TableNotExistException {
+        // Do nothing
+    }
+
+    @ParameterizedTest
+    @ValueSource(strings = {"SHOW TABLES", "SHOW VIEWS", "SHOW FUNCTIONS", 
"SHOW PROCEDURES"})
+    void testParseShowFunctionForUnsetCatalog(String sql) {
+        catalogManager.setCurrentCatalog(null);
+        // No exception should be thrown during parsing.
+        // Validation exception should be thrown while execution.
+        parse(sql);
+    }
+
+    @ParameterizedTest
+    @ValueSource(strings = {"SHOW TABLES", "SHOW VIEWS", "SHOW FUNCTIONS", 
"SHOW PROCEDURES"})
+    void testParseShowFunctionForUnsetDatabase(String sql) {
+        catalogManager.setCurrentDatabase(null);
+        // No exception should be thrown during parsing.
+        // Validation exception should be thrown while execution.
+        parse(sql);
+    }
+}

Reply via email to