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);
+ }
+}