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

bli 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 470fd2f  [FLINK-14534][table] 
FunctionCatalog.getUserDefinedFunctions() should include temp functions
470fd2f is described below

commit 470fd2f66fe1da0b640ac5154fa6562740aa25f8
Author: bowen.li <[email protected]>
AuthorDate: Fri Oct 25 14:53:31 2019 -0700

    [FLINK-14534][table] FunctionCatalog.getUserDefinedFunctions() should 
include temp functions
    
    FunctionCatalog.getUserDefinedFunctions() should include temp functions.
    
    This closes #9998.
---
 .../client/gateway/local/ExecutionContextTest.java |  4 +--
 .../client/gateway/local/LocalExecutorITCase.java  |  2 +-
 .../flink/table/catalog/FunctionCatalog.java       | 36 ++++++++++++++++------
 3 files changed, 29 insertions(+), 13 deletions(-)

diff --git 
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/gateway/local/ExecutionContextTest.java
 
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/gateway/local/ExecutionContextTest.java
index a3a9ce9..e8f1145 100644
--- 
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/gateway/local/ExecutionContextTest.java
+++ 
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/gateway/local/ExecutionContextTest.java
@@ -158,7 +158,7 @@ public class ExecutionContextTest {
        public void testFunctions() throws Exception {
                final ExecutionContext<?> context = 
createDefaultExecutionContext();
                final TableEnvironment tableEnv = 
context.createEnvironmentInstance().getTableEnvironment();
-               final String[] expected = new String[]{"scalarUDF", "tableUDF", 
"aggregateUDF"};
+               final String[] expected = new String[]{"scalarudf", "tableudf", 
"aggregateudf"};
                final String[] actual = tableEnv.listUserDefinedFunctions();
                Arrays.sort(expected);
                Arrays.sort(actual);
@@ -225,7 +225,7 @@ public class ExecutionContextTest {
                        tableEnv.listTables());
 
                assertArrayEquals(
-                       new String[]{"SourceTemporalTable", 
"ViewTemporalTable"},
+                       new String[]{"sourcetemporaltable", 
"viewtemporaltable"},
                        tableEnv.listUserDefinedFunctions());
 
                assertArrayEquals(
diff --git 
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/gateway/local/LocalExecutorITCase.java
 
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/gateway/local/LocalExecutorITCase.java
index f4c80aa..923d141 100644
--- 
a/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/gateway/local/LocalExecutorITCase.java
+++ 
b/flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/gateway/local/LocalExecutorITCase.java
@@ -223,7 +223,7 @@ public class LocalExecutorITCase extends TestLogger {
 
                final List<String> actualTables = 
executor.listUserDefinedFunctions(session);
 
-               final List<String> expectedTables = 
Arrays.asList("aggregateUDF", "tableUDF", "scalarUDF");
+               final List<String> expectedTables = 
Arrays.asList("aggregateudf", "tableudf", "scalarudf");
                assertEquals(expectedTables, actualTables);
        }
 
diff --git 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/catalog/FunctionCatalog.java
 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/catalog/FunctionCatalog.java
index 6527e9f..2b3d6dc 100644
--- 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/catalog/FunctionCatalog.java
+++ 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/catalog/FunctionCatalog.java
@@ -193,14 +193,22 @@ public class FunctionCatalog implements FunctionLookup {
                );
        }
 
+       /**
+        * Get names of all user defined functions, including temp system 
functions, temp catalog functions and catalog functions
+        * in the current catalog and current database.
+        */
        public String[] getUserDefinedFunctions() {
                return getUserDefinedFunctionNames().toArray(new String[0]);
        }
 
+       /**
+        * Get names of all functions, including temp system functions, system 
functions, temp catalog functions and catalog functions
+        * in the current catalog and current database.
+        */
        public String[] getFunctions() {
                Set<String> result = getUserDefinedFunctionNames();
 
-               // Get built-in functions
+               // add system functions
                result.addAll(moduleManager.listFunctions());
 
                return result.toArray(new String[0]);
@@ -209,20 +217,28 @@ public class FunctionCatalog implements FunctionLookup {
        private Set<String> getUserDefinedFunctionNames() {
                Set<String> result = new HashSet<>();
 
-               // Get functions in catalog
-               Catalog catalog = 
catalogManager.getCatalog(catalogManager.getCurrentCatalog()).get();
+               // add temp system functions
+               result.addAll(tempSystemFunctions.keySet());
+
+               String currentCatalog = catalogManager.getCurrentCatalog();
+               String currentDatabase = catalogManager.getCurrentDatabase();
+
+               // add temp catalog functions
+               result.addAll(tempCatalogFunctions.keySet().stream()
+                       .filter(oi -> oi.getCatalogName().equals(currentCatalog)
+                               && oi.getDatabaseName().equals(currentDatabase))
+                       .map(oi -> oi.getObjectName())
+                       .collect(Collectors.toSet())
+               );
+
+               // add catalog functions
+               Catalog catalog = 
catalogManager.getCatalog(currentCatalog).get();
                try {
-                       
result.addAll(catalog.listFunctions(catalogManager.getCurrentDatabase()));
+                       result.addAll(catalog.listFunctions(currentDatabase));
                } catch (DatabaseNotExistException e) {
                        // Ignore since there will always be a current database 
of the current catalog
                }
 
-               // Get functions registered in memory
-               result.addAll(
-                       tempSystemFunctions.values().stream()
-                               .map(FunctionDefinition::toString)
-                               .collect(Collectors.toSet()));
-
                return result;
        }
 

Reply via email to