You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/08/15 08:45:13 UTC
[iotdb] branch master updated: modify deserialize function of FunctionExpression and fix tests of String UDF (#6893)
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 04ee9fa32d modify deserialize function of FunctionExpression and fix tests of String UDF (#6893)
04ee9fa32d is described below
commit 04ee9fa32d2235529f887243bbce5530d3bf5cf8
Author: Weihao Li <60...@users.noreply.github.com>
AuthorDate: Mon Aug 15 16:45:06 2022 +0800
modify deserialize function of FunctionExpression and fix tests of String UDF (#6893)
、
---
.../db/it/udf/IoTDBUDTFBuiltinFunctionIT.java | 172 ++++++++-------------
.../plan/expression/multi/FunctionExpression.java | 14 +-
.../iotdb/tsfile/utils/ReadWriteIOUtils.java | 17 ++
3 files changed, 89 insertions(+), 114 deletions(-)
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDTFBuiltinFunctionIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDTFBuiltinFunctionIT.java
index 66cb990995..8ef47e56f1 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDTFBuiltinFunctionIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDTFBuiltinFunctionIT.java
@@ -1080,155 +1080,115 @@ public class IoTDBUDTFBuiltinFunctionIT {
testTrim(statement);
testStrCmp(statement);
} catch (Exception e) {
- e.printStackTrace();
+ fail(e.getMessage());
}
}
- private void testTrim(Statement statement) {
+ private void testTrim(Statement statement) throws SQLException {
String s2;
- try (ResultSet resultSet =
- statement.executeQuery("select s2, trim(s2) " + "from root.testStringFunctions.d1")) {
- while (resultSet.next()) {
- s2 = resultSet.getString(3);
- if (s2 == null) {
- continue;
- }
- assertEquals(resultSet.getString(2).trim(), resultSet.getString(3));
+ ResultSet resultSet =
+ statement.executeQuery("select s2, trim(s2) " + "from root.testStringFunctions.d1");
+ while (resultSet.next()) {
+ s2 = resultSet.getString(3);
+ if (s2 == null) {
+ continue;
}
- } catch (SQLException e) {
- e.printStackTrace();
- fail(e.getMessage());
+ assertEquals(resultSet.getString(2).trim(), resultSet.getString(3));
}
}
- private void testStrCmp(Statement statement) {
- try (ResultSet resultSet =
+ private void testStrCmp(Statement statement) throws SQLException {
+
+ ResultSet resultSet =
statement.executeQuery(
- "select s1, s2, strcmp(s1, s2) " + "from root.testStringFunctions.d1")) {
- String s1, s2;
- while (resultSet.next()) {
- s1 = resultSet.getString(2);
- s2 = resultSet.getString(3);
- if (s1 == null || s2 == null) {
- continue;
- }
- assertEquals(s1.compareTo(s2), resultSet.getInt(4));
+ "select s1, s2, strcmp(s1, s2) " + "from root.testStringFunctions.d1");
+ String s1, s2;
+ while (resultSet.next()) {
+ s1 = resultSet.getString(2);
+ s2 = resultSet.getString(3);
+ if (s1 == null || s2 == null) {
+ continue;
}
- } catch (SQLException e) {
- e.printStackTrace();
- fail(e.getMessage());
+ assertEquals(s1.compareTo(s2), resultSet.getInt(4));
}
}
- private void testLower(Statement statement) {
- try (ResultSet resultSet =
- statement.executeQuery("select s1, lower(s1) " + "from root.testStringFunctions.d1")) {
- while (resultSet.next()) {
- assertEquals(resultSet.getString(2).toLowerCase(), resultSet.getString(3));
- }
- } catch (SQLException e) {
- e.printStackTrace();
- fail(e.getMessage());
+ private void testLower(Statement statement) throws SQLException {
+ ResultSet resultSet =
+ statement.executeQuery("select s1, lower(s1) " + "from root.testStringFunctions.d1");
+ while (resultSet.next()) {
+ assertEquals(resultSet.getString(2).toLowerCase(), resultSet.getString(3));
}
}
- private void testUpper(Statement statement) {
- try (ResultSet resultSet =
- statement.executeQuery("select s1, upper(s1) " + "from root.testStringFunctions.d1")) {
- while (resultSet.next()) {
- assertEquals(resultSet.getString(2).toUpperCase(), resultSet.getString(3));
- }
- } catch (SQLException e) {
- e.printStackTrace();
- fail(e.getMessage());
+ private void testUpper(Statement statement) throws SQLException {
+ ResultSet resultSet =
+ statement.executeQuery("select s1, upper(s1) " + "from root.testStringFunctions.d1");
+ while (resultSet.next()) {
+ assertEquals(resultSet.getString(2).toUpperCase(), resultSet.getString(3));
}
}
- private void testSubStr(Statement statement) {
- try (ResultSet resultSet =
+ private void testSubStr(Statement statement) throws SQLException {
+ ResultSet resultSet =
statement.executeQuery(
"select s1, substr(s1, \"start\"=\"3\", \"end\"=\"7\") "
- + "from root.testStringFunctions.d1")) {
- while (resultSet.next()) {
- assertEquals(resultSet.getString(2).substring(3, 7), resultSet.getString(3));
- }
- } catch (SQLException e) {
- e.printStackTrace();
- fail(e.getMessage());
+ + "from root.testStringFunctions.d1");
+ while (resultSet.next()) {
+ assertEquals(resultSet.getString(2).substring(3, 7), resultSet.getString(3));
}
}
- private void testConcat(Statement statement) {
- try (ResultSet resultSet =
+ private void testConcat(Statement statement) throws SQLException {
+ ResultSet resultSet =
statement.executeQuery(
"select s1, s2, "
+ "concat(s1, s2, \"target1\"=\"IoT\", \"target2\"=\"DB\"), "
+ "concat(s1, s2, \"target1\"=\"IoT\", \"target2\"=\"DB\", \"series_behind\"=\"true\") "
- + "from root.testStringFunctions.d1")) {
- while (resultSet.next()) {
- assertEquals(
- (resultSet.getString(2) + resultSet.getString(3) + "IoTDB").replace("null", ""),
- resultSet.getString(4));
- assertEquals(
- ("IoTDB" + (resultSet.getString(2) + resultSet.getString(3))).replace("null", ""),
- resultSet.getString(5));
- }
- } catch (SQLException e) {
- e.printStackTrace();
- fail(e.getMessage());
+ + "from root.testStringFunctions.d1");
+ while (resultSet.next()) {
+ assertEquals(
+ (resultSet.getString(2) + resultSet.getString(3) + "IoTDB").replace("null", ""),
+ resultSet.getString(4));
+ assertEquals(
+ ("IoTDB" + (resultSet.getString(2) + resultSet.getString(3))).replace("null", ""),
+ resultSet.getString(5));
}
}
- private void testEndsWith(Statement statement) {
- try (ResultSet resultSet =
+ private void testEndsWith(Statement statement) throws SQLException {
+ ResultSet resultSet =
statement.executeQuery(
- "select s1, endsWith(s1, \"target\"=\"1111\") " + "from root.testStringFunctions.d1")) {
- while (resultSet.next()) {
- assertEquals(resultSet.getString(2).endsWith("1111"), resultSet.getBoolean(3));
- }
- } catch (SQLException e) {
- e.printStackTrace();
- fail(e.getMessage());
+ "select s1, endsWith(s1, \"target\"=\"1111\") " + "from root.testStringFunctions.d1");
+ while (resultSet.next()) {
+ assertEquals(resultSet.getString(2).endsWith("1111"), resultSet.getBoolean(3));
}
}
- private void testStartsWith(Statement statement) {
- try (ResultSet resultSet =
+ private void testStartsWith(Statement statement) throws SQLException {
+ ResultSet resultSet =
statement.executeQuery(
- "select s1, startsWith(s1, \"target\"=\"1111\") "
- + "from root.testStringFunctions.d1")) {
- while (resultSet.next()) {
- assertEquals(resultSet.getString(2).startsWith("1111"), resultSet.getBoolean(3));
- }
- } catch (SQLException e) {
- e.printStackTrace();
- fail(e.getMessage());
+ "select s1, startsWith(s1, \"target\"=\"1111\") " + "from root.testStringFunctions.d1");
+ while (resultSet.next()) {
+ assertEquals(resultSet.getString(2).startsWith("1111"), resultSet.getBoolean(3));
}
}
- private void testStrLocate(Statement statement) {
- try (ResultSet resultSet =
+ private void testStrLocate(Statement statement) throws SQLException {
+ ResultSet resultSet =
statement.executeQuery(
- "select s1, locate(s1, \"target\"=\"1111\"), locate(s1, \"target\"=\"1111\", \"reverse\"=\"true\") from root.testStringFunctions.d1")) {
- while (resultSet.next()) {
- assertEquals(resultSet.getString(2).indexOf("1111"), resultSet.getInt(3));
- assertEquals(resultSet.getString(2).lastIndexOf("1111"), resultSet.getInt(4));
- }
- } catch (SQLException e) {
- e.printStackTrace();
- fail(e.getMessage());
+ "select s1, locate(s1, \"target\"=\"1111\"), locate(s1, \"target\"=\"1111\", \"reverse\"=\"true\") from root.testStringFunctions.d1");
+ while (resultSet.next()) {
+ assertEquals(resultSet.getString(2).indexOf("1111"), resultSet.getInt(3));
+ assertEquals(resultSet.getString(2).lastIndexOf("1111"), resultSet.getInt(4));
}
}
- private void testStrLength(Statement statement) {
- try (ResultSet resultSet =
- statement.executeQuery("select s1, length(s1) from root.testStringFunctions.d1")) {
- while (resultSet.next()) {
- assertEquals(resultSet.getString(2).length(), resultSet.getInt(3));
- }
- } catch (SQLException e) {
- e.printStackTrace();
- fail(e.getMessage());
+ private void testStrLength(Statement statement) throws SQLException {
+ ResultSet resultSet =
+ statement.executeQuery("select s1, length(s1) from root.testStringFunctions.d1");
+ while (resultSet.next()) {
+ assertEquals(resultSet.getString(2).length(), resultSet.getInt(3));
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java
index 2d6fad00d9..ca3a83f9b2 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java
@@ -64,7 +64,7 @@ public class FunctionExpression extends Expression {
private boolean isUserDefinedAggregationFunctionExpression;
private final String functionName;
- private final Map<String, String> functionAttributes;
+ private final LinkedHashMap<String, String> functionAttributes;
/**
* example: select udf(a, b, udf(c)) from root.sg.d;
@@ -88,7 +88,9 @@ public class FunctionExpression extends Expression {
}
public FunctionExpression(
- String functionName, Map<String, String> functionAttributes, List<Expression> expressions) {
+ String functionName,
+ LinkedHashMap<String, String> functionAttributes,
+ List<Expression> expressions) {
this.functionName = functionName;
this.functionAttributes = functionAttributes;
this.expressions = expressions;
@@ -107,11 +109,7 @@ public class FunctionExpression extends Expression {
public FunctionExpression(ByteBuffer byteBuffer) {
functionName = ReadWriteIOUtils.readString(byteBuffer);
- Map<String, String> deserializedFunctionAttributes = ReadWriteIOUtils.readMap(byteBuffer);
- functionAttributes =
- deserializedFunctionAttributes != null
- ? deserializedFunctionAttributes
- : new LinkedHashMap<>();
+ functionAttributes = ReadWriteIOUtils.readLinkedHashMap(byteBuffer);
int expressionSize = ReadWriteIOUtils.readInt(byteBuffer);
expressions = new ArrayList<>();
@@ -184,7 +182,7 @@ public class FunctionExpression extends Expression {
return functionName;
}
- public Map<String, String> getFunctionAttributes() {
+ public LinkedHashMap<String, String> getFunctionAttributes() {
return functionAttributes;
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
index dfa6be3f55..1ad3b5fbec 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
@@ -35,6 +35,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -691,6 +692,22 @@ public class ReadWriteIOUtils {
return map;
}
+ public static LinkedHashMap<String, String> readLinkedHashMap(ByteBuffer buffer) {
+ int length = readInt(buffer);
+ if (length == NO_BYTE_TO_READ) {
+ return null;
+ }
+ LinkedHashMap<String, String> map = new LinkedHashMap<>(length);
+ for (int i = 0; i < length; i++) {
+ // key
+ String key = readString(buffer);
+ // value
+ String value = readString(buffer);
+ map.put(key, value);
+ }
+ return map;
+ }
+
public static List<Map<String, String>> readMaps(ByteBuffer buffer, int totalSize) {
List<Map<String, String>> results = new ArrayList<>(totalSize);
for (int i = 0; i < totalSize; i++) {