You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2022/04/29 19:13:28 UTC
[iotdb] branch master updated: [IOTDB-2993] Support IN, LIKE, and REGEXP expressions in Transform Operator (#5739)
This is an automated email from the ASF dual-hosted git repository.
rong 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 5b045e4864 [IOTDB-2993] Support IN, LIKE, and REGEXP expressions in Transform Operator (#5739)
5b045e4864 is described below
commit 5b045e4864de7c08b1ff9b80adab7bdfeb54b504
Author: Steve Yurong Su <ro...@apache.org>
AuthorDate: Sat Apr 30 03:13:23 2022 +0800
[IOTDB-2993] Support IN, LIKE, and REGEXP expressions in Transform Operator (#5739)
---
.../iotdb/db/integration/IoTDBNestedQueryIT.java | 25 ++++
.../expression/binary/AdditionExpression.java | 4 +-
.../query/expression/binary/BinaryExpression.java | 2 +-
.../expression/binary/DivisionExpression.java | 4 +-
.../query/expression/binary/EqualToExpression.java | 4 +-
.../expression/binary/GreaterEqualExpression.java | 4 +-
.../expression/binary/GreaterThanExpression.java | 4 +-
.../expression/binary/LessEqualExpression.java | 4 +-
.../expression/binary/LessThanExpression.java | 4 +-
.../expression/binary/LogicAndExpression.java | 4 +-
.../query/expression/binary/LogicOrExpression.java | 4 +-
.../query/expression/binary/ModuloExpression.java | 4 +-
.../binary/MultiplicationExpression.java | 4 +-
.../expression/binary/NonEqualExpression.java | 4 +-
.../expression/binary/SubtractionExpression.java | 4 +-
.../query/expression/multi/FunctionExpression.java | 8 +-
.../db/query/expression/unary/LikeExpression.java | 80 ++++++++++-
.../query/expression/unary/LogicNotExpression.java | 2 +-
.../query/expression/unary/NegationExpression.java | 2 +-
.../query/expression/unary/RegularExpression.java | 5 +-
.../transformer/ArithmeticNegationTransformer.java | 80 -----------
.../db/query/udf/core/transformer/Transformer.java | 2 +-
.../core/transformer/TransparentTransformer.java | 93 -------------
.../ArithmeticAdditionTransformer.java | 2 +-
.../{ => binary}/ArithmeticBinaryTransformer.java | 2 +-
.../ArithmeticDivisionTransformer.java | 2 +-
.../{ => binary}/ArithmeticModuloTransformer.java | 2 +-
.../ArithmeticMultiplicationTransformer.java | 2 +-
.../ArithmeticSubtractionTransformer.java | 2 +-
.../{ => binary}/BinaryTransformer.java | 3 +-
.../{ => binary}/CompareBinaryTransformer.java | 2 +-
.../{ => binary}/CompareEqualToTransformer.java | 2 +-
.../CompareGreaterEqualTransformer.java | 2 +-
.../CompareGreaterThanTransformer.java | 2 +-
.../{ => binary}/CompareLessEqualTransformer.java | 2 +-
.../{ => binary}/CompareLessThanTransformer.java | 2 +-
.../{ => binary}/CompareNonEqualTransformer.java | 2 +-
.../{ => binary}/LogicAndTransformer.java | 2 +-
.../{ => binary}/LogicBinaryTransformer.java | 2 +-
.../{ => binary}/LogicOrTransformer.java | 2 +-
.../{ => multi}/UDFQueryRowTransformer.java | 2 +-
.../{ => multi}/UDFQueryRowWindowTransformer.java | 2 +-
.../{ => multi}/UDFQueryTransformer.java | 3 +-
.../ArithmeticNegationTransformer.java} | 36 +++--
.../udf/core/transformer/unary/InTransformer.java | 149 +++++++++++++++++++++
.../LogicNotTransformer.java} | 25 ++--
.../RegularTransformer.java} | 35 +++--
.../transformer/unary/TransparentTransformer.java | 70 ++++++++++
.../UnaryTransformer.java} | 34 ++---
49 files changed, 458 insertions(+), 284 deletions(-)
diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBNestedQueryIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBNestedQueryIT.java
index 317f7dfd1e..dbf69fbe81 100644
--- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBNestedQueryIT.java
+++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBNestedQueryIT.java
@@ -34,6 +34,7 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
@@ -584,4 +585,28 @@ public class IoTDBNestedQueryIT {
Assert.fail(e.getMessage());
}
}
+
+ @Test
+ @Ignore
+ public void testRegularLikeInExpressions() {
+ try (Connection connection =
+ DriverManager.getConnection(
+ Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement()) {
+ String query =
+ "SELECT ((CAST(s1, 'type'='TEXT') LIKE '_') REGEXP '*') IN ('4', '2', '3') "
+ + "FROM root.vehicle.d1";
+ try (ResultSet rs = statement.executeQuery(query)) {
+ for (int i = 2; i <= 4; i++) {
+ Assert.assertTrue(rs.next());
+ Assert.assertEquals(i, rs.getLong(1));
+ Assert.assertEquals(i, rs.getLong(2));
+ }
+ Assert.assertFalse(rs.next());
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ Assert.fail(e.getMessage());
+ }
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
index a4ba44b3c7..6ec5ce8399 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticAdditionTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.ArithmeticAdditionTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.ArithmeticBinaryTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
index c535d97faa..d4765287b8 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
@@ -35,8 +35,8 @@ import org.apache.iotdb.db.query.udf.core.layer.RawQueryInputLayer;
import org.apache.iotdb.db.query.udf.core.layer.SingleInputColumnMultiReferenceIntermediateLayer;
import org.apache.iotdb.db.query.udf.core.layer.SingleInputColumnSingleReferenceIntermediateLayer;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.BinaryTransformer;
import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.BinaryTransformer;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import java.io.IOException;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
index b73e156a07..5ba106f459 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticDivisionTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.ArithmeticBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.ArithmeticDivisionTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/EqualToExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/EqualToExpression.java
index 5edc7e8ae8..aa85becd07 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/EqualToExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/EqualToExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.CompareBinaryTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.CompareEqualToTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.CompareBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.CompareEqualToTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterEqualExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterEqualExpression.java
index 2e7594d403..0364212ac8 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterEqualExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterEqualExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.CompareBinaryTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.CompareGreaterEqualTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.CompareBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.CompareGreaterEqualTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterThanExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterThanExpression.java
index 14f2e4321d..56589b5e10 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterThanExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterThanExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.CompareBinaryTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.CompareGreaterThanTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.CompareBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.CompareGreaterThanTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessEqualExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessEqualExpression.java
index 0368c02290..599a05f67b 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessEqualExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessEqualExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.CompareBinaryTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.CompareLessEqualTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.CompareBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.CompareLessEqualTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessThanExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessThanExpression.java
index 2a05a80c4a..1852771e8e 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessThanExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessThanExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.CompareBinaryTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.CompareLessThanTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.CompareBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.CompareLessThanTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicAndExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicAndExpression.java
index a7f905ad1f..35f19c258b 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicAndExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicAndExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.LogicAndTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.LogicBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.LogicAndTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.LogicBinaryTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicOrExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicOrExpression.java
index e0a7e1437d..ee0609ae16 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicOrExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicOrExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.LogicBinaryTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.LogicOrTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.LogicBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.LogicOrTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
index 44d7d01b02..e43f23f3c5 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticModuloTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.ArithmeticBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.ArithmeticModuloTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
index 1a52b209c8..d5b15dc55d 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticMultiplicationTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.ArithmeticBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.ArithmeticMultiplicationTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/NonEqualExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/NonEqualExpression.java
index 3169ed1834..6c9337fa57 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/NonEqualExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/NonEqualExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.CompareBinaryTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.CompareNonEqualTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.CompareBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.CompareNonEqualTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
index b2a0fd6151..3e31ad9039 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
@@ -22,8 +22,8 @@ package org.apache.iotdb.db.query.expression.binary;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticSubtractionTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.ArithmeticBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.binary.ArithmeticSubtractionTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/multi/FunctionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/multi/FunctionExpression.java
index 972260083d..64dd38df40 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/multi/FunctionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/multi/FunctionExpression.java
@@ -42,10 +42,10 @@ import org.apache.iotdb.db.query.udf.core.layer.RawQueryInputLayer;
import org.apache.iotdb.db.query.udf.core.layer.SingleInputColumnMultiReferenceIntermediateLayer;
import org.apache.iotdb.db.query.udf.core.layer.SingleInputColumnSingleReferenceIntermediateLayer;
import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
-import org.apache.iotdb.db.query.udf.core.transformer.TransparentTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.UDFQueryRowTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.UDFQueryRowWindowTransformer;
-import org.apache.iotdb.db.query.udf.core.transformer.UDFQueryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.multi.UDFQueryRowTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.multi.UDFQueryRowWindowTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.multi.UDFQueryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.unary.TransparentTransformer;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LikeExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LikeExpression.java
index a023ad3cfc..ede6283ce5 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LikeExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LikeExpression.java
@@ -23,27 +23,93 @@ import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
+import org.apache.iotdb.db.query.udf.core.transformer.unary.RegularTransformer;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import java.nio.ByteBuffer;
+import java.util.regex.Pattern;
public class LikeExpression extends UnaryExpression {
- private final String pattern;
+ private final String patternString;
+ private final Pattern pattern;
- public LikeExpression(Expression expression, String pattern) {
+ public LikeExpression(Expression expression, String patternString) {
super(expression);
+ this.patternString = patternString;
+ pattern = compile();
+ }
+
+ public LikeExpression(Expression expression, String patternString, Pattern pattern) {
+ super(expression);
+ this.patternString = patternString;
this.pattern = pattern;
}
public LikeExpression(ByteBuffer byteBuffer) {
super(Expression.deserialize(byteBuffer));
- pattern = ReadWriteIOUtils.readString(byteBuffer);
+ patternString = ReadWriteIOUtils.readString(byteBuffer);
+ pattern = compile();
+ }
+
+ /**
+ * The main idea of this part comes from
+ * https://codereview.stackexchange.com/questions/36861/convert-sql-like-to-regex/36864
+ */
+ private Pattern compile() {
+ String unescapeValue = unescapeString(patternString);
+ String specialRegexString = ".^$*+?{}[]|()";
+ StringBuilder patternBuilder = new StringBuilder();
+ patternBuilder.append("^");
+ for (int i = 0; i < unescapeValue.length(); i++) {
+ String ch = String.valueOf(unescapeValue.charAt(i));
+ if (specialRegexString.contains(ch)) {
+ ch = "\\" + unescapeValue.charAt(i);
+ }
+ if (i == 0
+ || !"\\".equals(String.valueOf(unescapeValue.charAt(i - 1)))
+ || i >= 2
+ && "\\\\"
+ .equals(
+ patternBuilder.substring(
+ patternBuilder.length() - 2, patternBuilder.length()))) {
+ patternBuilder.append(ch.replace("%", ".*?").replace("_", "."));
+ } else {
+ patternBuilder.append(ch);
+ }
+ }
+ patternBuilder.append("$");
+ return Pattern.compile(patternBuilder.toString());
+ }
+
+ /**
+ * This Method is for un-escaping strings except '\' before special string '%', '_', '\', because
+ * we need to use '\' to judge whether to replace this to regexp string
+ */
+ private String unescapeString(String value) {
+ StringBuilder stringBuilder = new StringBuilder();
+ for (int i = 0; i < value.length(); i++) {
+ String ch = String.valueOf(value.charAt(i));
+ if ("\\".equals(ch)) {
+ if (i < value.length() - 1) {
+ String nextChar = String.valueOf(value.charAt(i + 1));
+ if ("%".equals(nextChar) || "_".equals(nextChar) || "\\".equals(nextChar)) {
+ stringBuilder.append(ch);
+ }
+ if ("\\".equals(nextChar)) {
+ i++;
+ }
+ }
+ } else {
+ stringBuilder.append(ch);
+ }
+ }
+ return stringBuilder.toString();
}
@Override
protected String getExpressionStringInternal() {
- return expression + " LIKE " + pattern;
+ return expression + " LIKE '" + pattern + "'";
}
@Override
@@ -53,17 +119,17 @@ public class LikeExpression extends UnaryExpression {
@Override
protected Transformer constructTransformer(LayerPointReader pointReader) {
- throw new UnsupportedOperationException();
+ return new RegularTransformer(pointReader, pattern);
}
@Override
protected Expression constructExpression(Expression childExpression) {
- return new LikeExpression(childExpression, pattern);
+ return new LikeExpression(childExpression, patternString, pattern);
}
@Override
protected void serialize(ByteBuffer byteBuffer) {
super.serialize(byteBuffer);
- ReadWriteIOUtils.write(pattern, byteBuffer);
+ ReadWriteIOUtils.write(patternString, byteBuffer);
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LogicNotExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LogicNotExpression.java
index 97a7c5ceb7..2c22a52841 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LogicNotExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LogicNotExpression.java
@@ -25,8 +25,8 @@ import org.apache.iotdb.db.query.expression.leaf.ConstantOperand;
import org.apache.iotdb.db.query.expression.leaf.TimeSeriesOperand;
import org.apache.iotdb.db.query.expression.multi.FunctionExpression;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.LogicNotTransformer;
import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
+import org.apache.iotdb.db.query.udf.core.transformer.unary.LogicNotTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
index 5aaed35f55..8e12a85a57 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
@@ -25,8 +25,8 @@ import org.apache.iotdb.db.query.expression.leaf.ConstantOperand;
import org.apache.iotdb.db.query.expression.leaf.TimeSeriesOperand;
import org.apache.iotdb.db.query.expression.multi.FunctionExpression;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticNegationTransformer;
import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
+import org.apache.iotdb.db.query.udf.core.transformer.unary.ArithmeticNegationTransformer;
import java.nio.ByteBuffer;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
index f2e74d597a..0c990731bd 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ExpressionType;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
+import org.apache.iotdb.db.query.udf.core.transformer.unary.RegularTransformer;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import org.apache.commons.lang3.Validate;
@@ -55,7 +56,7 @@ public class RegularExpression extends UnaryExpression {
@Override
protected Transformer constructTransformer(LayerPointReader pointReader) {
- throw new UnsupportedOperationException();
+ return new RegularTransformer(pointReader, pattern);
}
@Override
@@ -65,7 +66,7 @@ public class RegularExpression extends UnaryExpression {
@Override
protected String getExpressionStringInternal() {
- return expression + " REGEXP " + patternString;
+ return expression + " REGEXP '" + patternString + "'";
}
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticNegationTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticNegationTransformer.java
deleted file mode 100644
index 1fa710b208..0000000000
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticNegationTransformer.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.iotdb.db.query.udf.core.transformer;
-
-import org.apache.iotdb.db.exception.query.QueryProcessException;
-import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-
-import java.io.IOException;
-
-public class ArithmeticNegationTransformer extends Transformer {
-
- private final LayerPointReader layerPointReader;
-
- public ArithmeticNegationTransformer(LayerPointReader layerPointReader) {
- this.layerPointReader = layerPointReader;
- }
-
- @Override
- public boolean isConstantPointReader() {
- return layerPointReader.isConstantPointReader();
- }
-
- @Override
- protected boolean cacheValue() throws QueryProcessException, IOException {
- if (!layerPointReader.next()) {
- return false;
- }
- // Constant doesn't have currentTime(), it will be determined by the other part in
- // BinaryTransformer
- if (!isConstantPointReader()) {
- cachedTime = layerPointReader.currentTime();
- }
- if (layerPointReader.isCurrentNull()) {
- currentNull = true;
- } else {
- switch (layerPointReader.getDataType()) {
- case INT32:
- cachedInt = -layerPointReader.currentInt();
- break;
- case INT64:
- cachedLong = -layerPointReader.currentLong();
- break;
- case FLOAT:
- cachedFloat = -layerPointReader.currentFloat();
- break;
- case DOUBLE:
- cachedDouble = -layerPointReader.currentDouble();
- break;
- default:
- throw new QueryProcessException(
- "Unsupported data type: " + layerPointReader.getDataType().toString());
- }
- }
- layerPointReader.readyForNext();
- return true;
- }
-
- @Override
- public TSDataType getDataType() {
- return layerPointReader.getDataType();
- }
-}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/Transformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/Transformer.java
index 258360973a..a666924a5c 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/Transformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/Transformer.java
@@ -55,7 +55,7 @@ public abstract class Transformer implements LayerPointReader {
protected abstract boolean cacheValue() throws QueryProcessException, IOException;
@Override
- public void readyForNext() {
+ public final void readyForNext() {
hasCachedValue = false;
currentNull = false;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/TransparentTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/TransparentTransformer.java
deleted file mode 100644
index 650565de91..0000000000
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/TransparentTransformer.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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.iotdb.db.query.udf.core.transformer;
-
-import org.apache.iotdb.db.exception.query.QueryProcessException;
-import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-
-import java.io.IOException;
-
-/**
- * this is a special transformer which outputs data just as input without any modification.
- *
- * <p>i.e. it's just the function f(x) = x.
- *
- * <p>It's mainly used for a UDF with aggregation query as its parameters.
- */
-public class TransparentTransformer extends Transformer {
-
- private final LayerPointReader reader;
-
- public TransparentTransformer(LayerPointReader reader) {
- super();
- this.reader = reader;
- }
-
- @Override
- public boolean isConstantPointReader() {
- return false;
- }
-
- @Override
- public TSDataType getDataType() {
- return reader.getDataType();
- }
-
- @Override
- protected boolean cacheValue() throws QueryProcessException, IOException {
- if (!reader.next()) {
- return false;
- }
- if (reader.isCurrentNull()) {
- currentNull = true;
- } else {
- switch (reader.getDataType()) {
- case BOOLEAN:
- cachedBoolean = reader.currentBoolean();
- break;
- case DOUBLE:
- cachedDouble = reader.currentDouble();
- break;
- case FLOAT:
- cachedFloat = reader.currentFloat();
- break;
- case INT32:
- cachedInt = reader.currentInt();
- break;
- case INT64:
- cachedLong = reader.currentLong();
- break;
- case TEXT:
- cachedBinary = reader.currentBinary();
- break;
- default:
- throw new QueryProcessException("unsupported data type: " + reader.getDataType());
- }
- }
- cachedTime = reader.currentTime();
- return true;
- }
-
- @Override
- public void readyForNext() {
- super.readyForNext();
- reader.readyForNext();
- }
-}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticAdditionTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticAdditionTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticAdditionTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticAdditionTransformer.java
index a433ab55b1..4d9a2fbba5 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticAdditionTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticAdditionTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticBinaryTransformer.java
similarity index 95%
copy from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java
copy to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticBinaryTransformer.java
index 0b22c8feae..4df0b51acf 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticBinaryTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticDivisionTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticDivisionTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticDivisionTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticDivisionTransformer.java
index b8d91d0a7f..03acdd89e8 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticDivisionTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticDivisionTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticModuloTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticModuloTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticModuloTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticModuloTransformer.java
index 603d9941f3..bb6a2ccb17 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticModuloTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticModuloTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticMultiplicationTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticMultiplicationTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticMultiplicationTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticMultiplicationTransformer.java
index 4153bbf1d6..33482f63c1 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticMultiplicationTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticMultiplicationTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticSubtractionTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticSubtractionTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticSubtractionTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticSubtractionTransformer.java
index ddc6e60a6f..4472a40282 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticSubtractionTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/ArithmeticSubtractionTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/BinaryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/BinaryTransformer.java
similarity index 97%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/BinaryTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/BinaryTransformer.java
index 658270e867..a7b6fc3700 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/BinaryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/BinaryTransformer.java
@@ -17,10 +17,11 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import java.io.IOException;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareBinaryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareBinaryTransformer.java
similarity index 95%
copy from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareBinaryTransformer.java
copy to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareBinaryTransformer.java
index 4b5c3fed21..c14e884a7d 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareBinaryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareBinaryTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareEqualToTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareEqualToTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareEqualToTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareEqualToTransformer.java
index 024d38cc69..4370db3f7d 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareEqualToTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareEqualToTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareGreaterEqualTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterEqualTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareGreaterEqualTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterEqualTransformer.java
index 7fddac6665..e6fa1cdbe2 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareGreaterEqualTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterEqualTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareGreaterThanTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterThanTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareGreaterThanTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterThanTransformer.java
index fadd835167..5cac5cb273 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareGreaterThanTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareGreaterThanTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareLessEqualTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessEqualTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareLessEqualTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessEqualTransformer.java
index c5653dd7a7..6dde245ac9 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareLessEqualTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessEqualTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareLessThanTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessThanTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareLessThanTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessThanTransformer.java
index 2082e13ded..d4e91e59ef 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareLessThanTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareLessThanTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareNonEqualTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareNonEqualTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareNonEqualTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareNonEqualTransformer.java
index c5742def5e..203c113f26 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareNonEqualTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/CompareNonEqualTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/LogicAndTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicAndTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/LogicAndTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicAndTransformer.java
index 887d419cf0..dd44e29408 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/LogicAndTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicAndTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/LogicBinaryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicBinaryTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/LogicBinaryTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicBinaryTransformer.java
index 3b12e2df5a..a18549dabb 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/LogicBinaryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicBinaryTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/LogicOrTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicOrTransformer.java
similarity index 95%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/LogicOrTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicOrTransformer.java
index 3786936f67..e9250ea53e 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/LogicOrTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/binary/LogicOrTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.binary;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/UDFQueryRowTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/multi/UDFQueryRowTransformer.java
similarity index 96%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/UDFQueryRowTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/multi/UDFQueryRowTransformer.java
index 2b9250c11a..354a102736 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/UDFQueryRowTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/multi/UDFQueryRowTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.multi;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.query.udf.core.executor.UDTFExecutor;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/UDFQueryRowWindowTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/multi/UDFQueryRowWindowTransformer.java
similarity index 96%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/UDFQueryRowWindowTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/multi/UDFQueryRowWindowTransformer.java
index b06796d519..1f810694e2 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/UDFQueryRowWindowTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/multi/UDFQueryRowWindowTransformer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.multi;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.query.udf.core.executor.UDTFExecutor;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/UDFQueryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/multi/UDFQueryTransformer.java
similarity index 96%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/UDFQueryTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/multi/UDFQueryTransformer.java
index f714a4e329..c48ec13cee 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/UDFQueryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/multi/UDFQueryTransformer.java
@@ -17,11 +17,12 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.multi;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.query.udf.core.executor.UDTFExecutor;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/ArithmeticNegationTransformer.java
similarity index 50%
copy from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java
copy to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/ArithmeticNegationTransformer.java
index 0b22c8feae..983c8ab238 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/ArithmeticNegationTransformer.java
@@ -17,25 +17,43 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.unary;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-public abstract class ArithmeticBinaryTransformer extends BinaryTransformer {
+import java.io.IOException;
- protected ArithmeticBinaryTransformer(
- LayerPointReader leftPointReader, LayerPointReader rightPointReader) {
- super(leftPointReader, rightPointReader);
+public class ArithmeticNegationTransformer extends UnaryTransformer {
+
+ public ArithmeticNegationTransformer(LayerPointReader layerPointReader) {
+ super(layerPointReader);
}
@Override
- protected TransformerType getTransformerType() {
- return TransformerType.Arithmetic;
+ public TSDataType getDataType() {
+ return layerPointReader.getDataType();
}
@Override
- public TSDataType getDataType() {
- return TSDataType.DOUBLE;
+ protected void transformAndCache() throws QueryProcessException, IOException {
+ switch (layerPointReader.getDataType()) {
+ case INT32:
+ cachedInt = -layerPointReader.currentInt();
+ break;
+ case INT64:
+ cachedLong = -layerPointReader.currentLong();
+ break;
+ case FLOAT:
+ cachedFloat = -layerPointReader.currentFloat();
+ break;
+ case DOUBLE:
+ cachedDouble = -layerPointReader.currentDouble();
+ break;
+ default:
+ throw new QueryProcessException(
+ "Unsupported data type: " + layerPointReader.getDataType().toString());
+ }
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/InTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/InTransformer.java
new file mode 100644
index 0000000000..46d59c0701
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/InTransformer.java
@@ -0,0 +1,149 @@
+/*
+ * 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.iotdb.db.query.udf.core.transformer.unary;
+
+import org.apache.iotdb.db.exception.query.QueryProcessException;
+import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.utils.Binary;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
+
+public class InTransformer extends UnaryTransformer {
+
+ private final TSDataType dataType;
+
+ private Set<Integer> intSet;
+ private Set<Long> longSet;
+ private Set<Float> floatSet;
+ private Set<Double> doubleSet;
+ private Set<Boolean> booleanSet;
+ private Set<String> stringSet;
+
+ public InTransformer(LayerPointReader layerPointReader, Set<String> values) {
+ super(layerPointReader);
+ dataType = layerPointReader.getDataType();
+ initTypedSet(values);
+ }
+
+ private void initTypedSet(Set<String> values) {
+ switch (dataType) {
+ case INT32:
+ intSet = new HashSet<>();
+ for (String value : values) {
+ intSet.add(Integer.valueOf(value));
+ }
+ break;
+ case INT64:
+ longSet = new HashSet<>();
+ for (String value : values) {
+ longSet.add(Long.valueOf(value));
+ }
+ break;
+ case FLOAT:
+ floatSet = new HashSet<>();
+ for (String value : values) {
+ floatSet.add(Float.valueOf(value));
+ }
+ break;
+ case DOUBLE:
+ doubleSet = new HashSet<>();
+ for (String value : values) {
+ doubleSet.add(Double.valueOf(value));
+ }
+ break;
+ case BOOLEAN:
+ booleanSet = new HashSet<>();
+ for (String value : values) {
+ booleanSet.add(Boolean.valueOf(value));
+ }
+ break;
+ case TEXT:
+ stringSet = values;
+ break;
+ default:
+ throw new UnsupportedOperationException(
+ "unsupported data type: " + layerPointReader.getDataType());
+ }
+ }
+
+ @Override
+ public TSDataType getDataType() {
+ return dataType;
+ }
+
+ @Override
+ protected void transformAndCache() throws QueryProcessException, IOException {
+ switch (dataType) {
+ case INT32:
+ int intValue = layerPointReader.currentInt();
+ if (intSet.contains(intValue)) {
+ cachedInt = intValue;
+ } else {
+ currentNull = true;
+ }
+ break;
+ case INT64:
+ long longValue = layerPointReader.currentLong();
+ if (longSet.contains(longValue)) {
+ cachedLong = longValue;
+ } else {
+ currentNull = true;
+ }
+ break;
+ case FLOAT:
+ float floatValue = layerPointReader.currentFloat();
+ if (floatSet.contains(floatValue)) {
+ cachedFloat = floatValue;
+ } else {
+ currentNull = true;
+ }
+ break;
+ case DOUBLE:
+ double doubleValue = layerPointReader.currentDouble();
+ if (doubleSet.contains(doubleValue)) {
+ cachedDouble = doubleValue;
+ } else {
+ currentNull = true;
+ }
+ break;
+ case BOOLEAN:
+ boolean booleanValue = layerPointReader.currentBoolean();
+ if (booleanSet.contains(booleanValue)) {
+ cachedBoolean = booleanValue;
+ } else {
+ currentNull = true;
+ }
+ break;
+ case TEXT:
+ Binary binaryValue = layerPointReader.currentBinary();
+ if (stringSet.contains(binaryValue.getStringValue())) {
+ cachedBinary = binaryValue;
+ } else {
+ currentNull = true;
+ }
+ break;
+ default:
+ throw new QueryProcessException("unsupported data type: " + layerPointReader.getDataType());
+ }
+ }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareBinaryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/LogicNotTransformer.java
similarity index 62%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareBinaryTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/LogicNotTransformer.java
index 4b5c3fed21..1bf9499c29 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/CompareBinaryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/LogicNotTransformer.java
@@ -17,25 +17,32 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.unary;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-public abstract class CompareBinaryTransformer extends BinaryTransformer {
+import java.io.IOException;
- protected CompareBinaryTransformer(
- LayerPointReader leftPointReader, LayerPointReader rightPointReader) {
- super(leftPointReader, rightPointReader);
- }
+public class LogicNotTransformer extends UnaryTransformer {
- @Override
- protected TransformerType getTransformerType() {
- return TransformerType.Comparative;
+ public LogicNotTransformer(LayerPointReader layerPointReader) {
+ super(layerPointReader);
}
@Override
public TSDataType getDataType() {
return TSDataType.BOOLEAN;
}
+
+ @Override
+ protected void transformAndCache() throws QueryProcessException, IOException {
+ if (layerPointReader.getDataType() != TSDataType.BOOLEAN) {
+ throw new QueryProcessException(
+ "Unsupported data type: " + layerPointReader.getDataType().toString());
+ }
+
+ cachedBoolean = !layerPointReader.currentBoolean();
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/RegularTransformer.java
similarity index 51%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/RegularTransformer.java
index 0b22c8feae..cceb55b9cd 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/RegularTransformer.java
@@ -17,25 +17,42 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.unary;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.utils.Binary;
-public abstract class ArithmeticBinaryTransformer extends BinaryTransformer {
+import java.io.IOException;
+import java.util.regex.Pattern;
- protected ArithmeticBinaryTransformer(
- LayerPointReader leftPointReader, LayerPointReader rightPointReader) {
- super(leftPointReader, rightPointReader);
+public class RegularTransformer extends UnaryTransformer {
+
+ private final Pattern pattern;
+
+ public RegularTransformer(LayerPointReader layerPointReader, Pattern pattern) {
+ super(layerPointReader);
+ this.pattern = pattern;
}
@Override
- protected TransformerType getTransformerType() {
- return TransformerType.Arithmetic;
+ public TSDataType getDataType() {
+ return TSDataType.TEXT;
}
@Override
- public TSDataType getDataType() {
- return TSDataType.DOUBLE;
+ protected void transformAndCache() throws QueryProcessException, IOException {
+ if (layerPointReader.getDataType() != TSDataType.TEXT) {
+ throw new QueryProcessException(
+ "Unsupported data type: " + layerPointReader.getDataType().toString());
+ }
+
+ Binary binary = layerPointReader.currentBinary();
+ if (pattern.matcher(binary.getStringValue()).find()) {
+ cachedBinary = binary;
+ } else {
+ currentNull = true;
+ }
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/TransparentTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/TransparentTransformer.java
new file mode 100644
index 0000000000..24cae21f52
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/TransparentTransformer.java
@@ -0,0 +1,70 @@
+/*
+ * 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.iotdb.db.query.udf.core.transformer.unary;
+
+import org.apache.iotdb.db.exception.query.QueryProcessException;
+import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+
+import java.io.IOException;
+
+/**
+ * this is a special transformer which outputs data just as input without any modification.
+ *
+ * <p>i.e. it's just the function f(x) = x.
+ *
+ * <p>It's mainly used for a UDF with aggregation query as its parameters.
+ */
+public class TransparentTransformer extends UnaryTransformer {
+
+ public TransparentTransformer(LayerPointReader layerPointReader) {
+ super(layerPointReader);
+ }
+
+ @Override
+ public TSDataType getDataType() {
+ return layerPointReader.getDataType();
+ }
+
+ @Override
+ protected void transformAndCache() throws QueryProcessException, IOException {
+ switch (layerPointReader.getDataType()) {
+ case BOOLEAN:
+ cachedBoolean = layerPointReader.currentBoolean();
+ break;
+ case DOUBLE:
+ cachedDouble = layerPointReader.currentDouble();
+ break;
+ case FLOAT:
+ cachedFloat = layerPointReader.currentFloat();
+ break;
+ case INT32:
+ cachedInt = layerPointReader.currentInt();
+ break;
+ case INT64:
+ cachedLong = layerPointReader.currentLong();
+ break;
+ case TEXT:
+ cachedBinary = layerPointReader.currentBinary();
+ break;
+ default:
+ throw new QueryProcessException("unsupported data type: " + layerPointReader.getDataType());
+ }
+ }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/LogicNotTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/UnaryTransformer.java
similarity index 60%
rename from server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/LogicNotTransformer.java
rename to server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/UnaryTransformer.java
index c02c5ea2a6..5d3abf6931 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/LogicNotTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/unary/UnaryTransformer.java
@@ -17,54 +17,46 @@
* under the License.
*/
-package org.apache.iotdb.db.query.udf.core.transformer;
+package org.apache.iotdb.db.query.udf.core.transformer.unary;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
import java.io.IOException;
-public class LogicNotTransformer extends Transformer {
- private final LayerPointReader layerPointReader;
+public abstract class UnaryTransformer extends Transformer {
- public LogicNotTransformer(LayerPointReader layerPointReader) {
+ protected final LayerPointReader layerPointReader;
+
+ public UnaryTransformer(LayerPointReader layerPointReader) {
this.layerPointReader = layerPointReader;
}
@Override
- public boolean isConstantPointReader() {
+ public final boolean isConstantPointReader() {
return layerPointReader.isConstantPointReader();
}
@Override
- protected boolean cacheValue() throws QueryProcessException, IOException {
+ protected final boolean cacheValue() throws QueryProcessException, IOException {
if (!layerPointReader.next()) {
return false;
}
- // Constant doesn't have currentTime(), it will be determined by the other part in
- // BinaryTransformer
+
if (!isConstantPointReader()) {
cachedTime = layerPointReader.currentTime();
}
+
if (layerPointReader.isCurrentNull()) {
currentNull = true;
} else {
- switch (layerPointReader.getDataType()) {
- case BOOLEAN:
- cachedBoolean = !layerPointReader.currentBoolean();
- break;
- default:
- throw new QueryProcessException(
- "Unsupported data type: " + layerPointReader.getDataType().toString());
- }
+ transformAndCache();
}
+
layerPointReader.readyForNext();
return true;
}
- @Override
- public TSDataType getDataType() {
- return TSDataType.BOOLEAN;
- }
+ protected abstract void transformAndCache() throws QueryProcessException, IOException;
}