未验证 提交 16e96283 编写于 作者: L Liao Lanyu 提交者: GitHub

[To rel/1.1] Override existing jar instead of deleting it when registering UDF

上级 cbc7c3fb
......@@ -32,6 +32,7 @@ import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import java.io.File;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
......@@ -54,6 +55,16 @@ public class IoTDBUDFManagementIT {
private static final String FUNCTION_TYPE_BUILTIN_UDTF = "built-in UDTF";
private static final String FUNCTION_TYPE_EXTERNAL_UDTF = "external UDTF";
private static final String UDF_LIB_PREFIX =
System.getProperty("user.dir")
+ File.separator
+ "target"
+ File.separator
+ "test-classes"
+ File.separator;
private static final String UDF_JAR_PREFIX = new File(UDF_LIB_PREFIX).toURI().toString();
@Before
public void setUp() throws Exception {
EnvFactory.getEnv().initClusterEnvironment();
......@@ -208,6 +219,35 @@ public class IoTDBUDFManagementIT {
}
}
@Test
public void testCreateFunctionWithURI() throws SQLException {
try (Connection connection = EnvFactory.getEnv().getConnection();
Statement statement = connection.createStatement()) {
statement.execute(
String.format(
"create function udf as 'org.apache.iotdb.db.query.udf.example.Adder' using URI '%s'",
UDF_JAR_PREFIX + "udf-example.jar"));
statement.execute(
String.format(
"create function udf1 as 'org.apache.iotdb.db.query.udf.example.Adder' using URI '%s'",
UDF_JAR_PREFIX + "udf-example.jar"));
try (ResultSet resultSet = statement.executeQuery("show functions")) {
int count = 0;
while (resultSet.next()) {
++count;
}
Assert.assertEquals(2 + NATIVE_FUNCTIONS_COUNT + BUILTIN_FUNCTIONS_COUNT, count);
assertEquals(3, resultSet.getMetaData().getColumnCount());
statement.execute("drop function udf");
statement.execute("drop function udf1");
} catch (Exception e) {
fail();
}
}
}
@Test
public void testCreateFunctionWithInvalidURI() {
try (Connection connection = EnvFactory.getEnv().getConnection();
......@@ -215,8 +255,8 @@ public class IoTDBUDFManagementIT {
try {
statement.execute(
String.format(
"create stateless trigger %s before insert on root.test.stateless.* as '%s' using URI '%s' with (\"name\"=\"%s\")",
"a", "org.apache.iotdb.test", "", "test"));
"create function udf as 'org.apache.iotdb.db.query.udf.example.Adder' using URI '%s'",
""));
fail();
} catch (Exception e) {
assertTrue(e.getMessage().contains("URI"));
......@@ -225,8 +265,8 @@ public class IoTDBUDFManagementIT {
try {
statement.execute(
String.format(
"create stateless trigger %s before insert on root.test.stateless.* as '%s' using URI '%s' with (\"name\"=\"%s\")",
"a", "org.apache.iotdb.test", "file:///data/udf/upload-test.jar", "test"));
"create function udf as 'org.apache.iotdb.db.query.udf.example.Adder' using URI '%s'",
"file:///data/udf/upload-test.jar"));
fail();
} catch (Exception e) {
assertTrue(e.getMessage().contains("URI"));
......
......@@ -223,11 +223,18 @@ public class ExecutableManager {
}
}
/**
* Create and save the file if the specified file does not exist, or this method will override the
* existing file.
*/
protected void saveToDir(ByteBuffer byteBuffer, String destination) throws IOException {
try {
Path path = Paths.get(destination);
Files.deleteIfExists(path);
Files.createFile(path);
if (!Files.exists(path)) {
Files.createFile(path);
}
// FileOutPutStream is not in append mode by default, so the file will be overridden if it
// already exists.
try (FileOutputStream outputStream = new FileOutputStream(destination)) {
outputStream.getChannel().write(byteBuffer);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册