lsyldliu commented on code in PR #20361: URL: https://github.com/apache/flink/pull/20361#discussion_r937322762
########## flink-end-to-end-tests/flink-end-to-end-tests-sql/src/test/java/org/apache/flink/table/sql/codegen/SqlUdfBaseITCase.java: ########## @@ -0,0 +1,173 @@ +package org.apache.flink.table.sql.codegen; + +import org.apache.flink.api.common.time.Deadline; +import org.apache.flink.configuration.Configuration; +import org.apache.flink.tests.util.TestUtils; +import org.apache.flink.tests.util.flink.ClusterController; +import org.apache.flink.tests.util.flink.FlinkResource; +import org.apache.flink.tests.util.flink.FlinkResourceSetup; +import org.apache.flink.tests.util.flink.LocalStandaloneFlinkResourceFactory; +import org.apache.flink.util.TestLogger; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.Duration; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.hamcrest.Matchers.arrayContainingInAnyOrder; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +/** Base class for sql udf. */ +@RunWith(Parameterized.class) +public abstract class SqlUdfBaseITCase extends TestLogger { + private static final Logger LOG = LoggerFactory.getLogger(PlannerScalaFreeITCase.class); Review Comment: ```suggestion private static final Logger LOG = LoggerFactory.getLogger(SqlITCaseBase.class); ``` ########## flink-end-to-end-tests/flink-end-to-end-tests-sql/src/test/java/org/apache/flink/table/sql/codegen/SqlUdfBaseITCase.java: ########## @@ -0,0 +1,173 @@ +package org.apache.flink.table.sql.codegen; + +import org.apache.flink.api.common.time.Deadline; +import org.apache.flink.configuration.Configuration; +import org.apache.flink.tests.util.TestUtils; +import org.apache.flink.tests.util.flink.ClusterController; +import org.apache.flink.tests.util.flink.FlinkResource; +import org.apache.flink.tests.util.flink.FlinkResourceSetup; +import org.apache.flink.tests.util.flink.LocalStandaloneFlinkResourceFactory; +import org.apache.flink.util.TestLogger; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.Duration; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.hamcrest.Matchers.arrayContainingInAnyOrder; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +/** Base class for sql udf. */ +@RunWith(Parameterized.class) +public abstract class SqlUdfBaseITCase extends TestLogger { Review Comment: This module is not only for tests sql udf, so this class name is not correct. `SqlITCaseBase` maybe more suitable. ########## flink-end-to-end-tests/flink-end-to-end-tests-sql/src/test/java/org/apache/flink/table/sql/codegen/SqlUdfBaseITCase.java: ########## @@ -0,0 +1,173 @@ +package org.apache.flink.table.sql.codegen; + +import org.apache.flink.api.common.time.Deadline; +import org.apache.flink.configuration.Configuration; +import org.apache.flink.tests.util.TestUtils; +import org.apache.flink.tests.util.flink.ClusterController; +import org.apache.flink.tests.util.flink.FlinkResource; +import org.apache.flink.tests.util.flink.FlinkResourceSetup; +import org.apache.flink.tests.util.flink.LocalStandaloneFlinkResourceFactory; +import org.apache.flink.util.TestLogger; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.Duration; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.hamcrest.Matchers.arrayContainingInAnyOrder; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +/** Base class for sql udf. */ +@RunWith(Parameterized.class) +public abstract class SqlUdfBaseITCase extends TestLogger { + private static final Logger LOG = LoggerFactory.getLogger(PlannerScalaFreeITCase.class); + + @Parameterized.Parameters(name = "executionMode") + public static Collection<String> data() { + return Arrays.asList("streaming", "batch"); + } + + @Rule public final FlinkResource flink; + + @Rule public final TemporaryFolder tmp = new TemporaryFolder(); + + private final String executionMode; + private final String sqlPath; + private final int resultSize; + private final String[] resultItems; + + private Path result; + + protected static final Path SQL_TOOL_BOX_JAR = TestUtils.getResource(".*SqlToolbox.jar"); + + public SqlUdfBaseITCase( + String executionMode, + String sqlPath, + int resultSize, + String[] resultItems, + Configuration configuration) { + this.executionMode = executionMode; + this.sqlPath = sqlPath; + this.resultSize = resultSize; + this.resultItems = resultItems; + this.flink = + new LocalStandaloneFlinkResourceFactory() + .create( + FlinkResourceSetup.builder() + .addConfiguration(configuration) + .build()); + } + + @Before + public void before() { + Path tmpPath = tmp.getRoot().toPath(); + LOG.info("The current temporary path: {}", tmpPath); + this.result = tmpPath.resolve("result"); + } + + @Test + public void testSQLUdf() throws Exception { Review Comment: Please move this test to `PlannerScalaFreeITCase`, it aims to test visibility of the planner's classes in distributed runtime, and don't change test method name. ########## flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/runtime/stream/sql/FunctionITCase.java: ########## @@ -1225,6 +1228,23 @@ public void testWithBoolNotNullTypeHint() { tEnv().executeSql("SELECT BoolEcho(x=1 and y is null) FROM SourceTable").collect()); } + @Test + public void testUsingAddJar() throws Exception { + tEnv().executeSql(String.format("ADD JAR '%s'", jarPath)); + + TableResult tableResult = tEnv().executeSql("SHOW JARS"); + assertThat( + CollectionUtil.iteratorToList(tableResult.collect()) + .equals( + Collections.singletonList( + Row.of(new Path(jarPath).getPath())))) + .isTrue(); + + testUserDefinedFunctionByUsingJar( + String.format("create function lowerUdf as '%s' LANGUAGE JAVA", udfClassName), + null); Review Comment: ditto ########## flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/runtime/batch/sql/FunctionITCase.java: ########## @@ -142,6 +147,23 @@ public void testUserDefinedTemporaryCatalogFunctionByUsingJar() throws Exception testUserDefinedFunctionByUsingJar(functionDDL, dropFunctionDDL); } + @Test + public void testUsingAddJar() throws Exception { + tEnv().executeSql(String.format("ADD JAR '%s'", jarPath)); + + TableResult tableResult = tEnv().executeSql("SHOW JARS"); + assertThat( + CollectionUtil.iteratorToList(tableResult.collect()) + .equals( + Collections.singletonList( + Row.of(new Path(jarPath).getPath())))) + .isTrue(); + + testUserDefinedFunctionByUsingJar( + String.format("create function lowerUdf as '%s' LANGUAGE JAVA", udfClassName), + null); Review Comment: why not delete the function? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@flink.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org