This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch iotdb-2933
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/iotdb-2933 by this push:
new cd6af308cd Expression
cd6af308cd is described below
commit cd6af308cd658cb9f1e9b0eaa346f73b467fc400
Author: Steve Yurong Su <[email protected]>
AuthorDate: Wed Apr 27 17:45:03 2022 +0800
Expression
---
.../iotdb/db/query/expression/Expression.java | 8 ++-
.../{RegularExpression.java => InExpression.java} | 59 ++++++++++++----------
...{RegularExpression.java => LikeExpression.java} | 40 +++++----------
.../query/expression/unary/RegularExpression.java | 2 +-
4 files changed, 53 insertions(+), 56 deletions(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
index f7845bb75c..a98cd7f5bc 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
@@ -42,6 +42,8 @@ import
org.apache.iotdb.db.query.expression.binary.SubtractionExpression;
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.expression.unary.InExpression;
+import org.apache.iotdb.db.query.expression.unary.LikeExpression;
import org.apache.iotdb.db.query.expression.unary.LogicNotExpression;
import org.apache.iotdb.db.query.expression.unary.NegationExpression;
import org.apache.iotdb.db.query.expression.unary.RegularExpression;
@@ -292,13 +294,15 @@ public abstract class Expression {
break;
case 13:
- throw new UnsupportedOperationException();
+ expression = new LikeExpression(byteBuffer);
+ break;
case 14:
expression = new RegularExpression(byteBuffer);
break;
case 15:
- throw new UnsupportedOperationException();
+ expression = new InExpression(byteBuffer);
+ break;
case 16:
expression = new LogicAndExpression(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/InExpression.java
similarity index 59%
copy from
server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
copy to
server/src/main/java/org/apache/iotdb/db/query/expression/unary/InExpression.java
index 511ca42fc3..a5a5b97111 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/InExpression.java
@@ -25,57 +25,62 @@ 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.utils.ReadWriteIOUtils;
-import org.apache.commons.lang3.Validate;
-
import java.nio.ByteBuffer;
-import java.util.regex.Pattern;
-
-public class RegularExpression extends UnaryExpression {
+import java.util.Iterator;
+import java.util.LinkedHashSet;
- private final String patternString;
- private final Pattern pattern;
+public class InExpression extends UnaryExpression {
- public RegularExpression(Expression expression, String patternString) {
- super(expression);
- this.patternString = patternString;
- pattern = Pattern.compile(patternString);
- }
+ private final LinkedHashSet<String> values;
- public RegularExpression(Expression expression, String patternString,
Pattern pattern) {
+ protected InExpression(Expression expression, LinkedHashSet<String> values) {
super(expression);
- this.patternString = patternString;
- this.pattern = pattern;
+ this.values = values;
}
- public RegularExpression(ByteBuffer byteBuffer) {
+ public InExpression(ByteBuffer byteBuffer) {
super(Expression.deserialize(byteBuffer));
- patternString = ReadWriteIOUtils.readString(byteBuffer);
- pattern = Pattern.compile(Validate.notNull(patternString));
+ final int size = ReadWriteIOUtils.readInt(byteBuffer);
+ values = new LinkedHashSet<>();
+ for (int i = 0; i < size; ++i) {
+ values.add(ReadWriteIOUtils.readString(byteBuffer));
+ }
}
@Override
- protected Transformer constructTransformer(LayerPointReader pointReader) {
- throw new RuntimeException();
+ protected String getExpressionStringInternal() {
+ StringBuilder valuesStringBuilder = new StringBuilder();
+ Iterator<String> iterator = values.iterator();
+ if (iterator.hasNext()) {
+ valuesStringBuilder.append(iterator.next());
+ }
+ while (iterator.hasNext()) {
+ valuesStringBuilder.append(", ").append(iterator.next());
+ }
+ return expression + " IN (" + valuesStringBuilder + ")";
}
@Override
- protected Expression constructExpression(Expression childExpression) {
- return new RegularExpression(childExpression, patternString, pattern);
+ public ExpressionType getExpressionType() {
+ return ExpressionType.IN;
}
@Override
- protected String getExpressionStringInternal() {
- return expression + " REGEXP " + patternString;
+ protected Transformer constructTransformer(LayerPointReader pointReader) {
+ throw new UnsupportedOperationException();
}
@Override
- public ExpressionType getExpressionType() {
- return ExpressionType.REGEXP;
+ protected Expression constructExpression(Expression childExpression) {
+ return new InExpression(childExpression, values);
}
@Override
protected void serialize(ByteBuffer byteBuffer) {
super.serialize(byteBuffer);
- ReadWriteIOUtils.write(patternString, byteBuffer);
+ ReadWriteIOUtils.write(values.size(), byteBuffer);
+ for (String value : values) {
+ ReadWriteIOUtils.write(value, 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/LikeExpression.java
similarity index 64%
copy from
server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
copy to
server/src/main/java/org/apache/iotdb/db/query/expression/unary/LikeExpression.java
index 511ca42fc3..a023ad3cfc 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/LikeExpression.java
@@ -25,57 +25,45 @@ 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.utils.ReadWriteIOUtils;
-import org.apache.commons.lang3.Validate;
-
import java.nio.ByteBuffer;
-import java.util.regex.Pattern;
-
-public class RegularExpression extends UnaryExpression {
- private final String patternString;
- private final Pattern pattern;
+public class LikeExpression extends UnaryExpression {
- public RegularExpression(Expression expression, String patternString) {
- super(expression);
- this.patternString = patternString;
- pattern = Pattern.compile(patternString);
- }
+ private final String pattern;
- public RegularExpression(Expression expression, String patternString,
Pattern pattern) {
+ public LikeExpression(Expression expression, String pattern) {
super(expression);
- this.patternString = patternString;
this.pattern = pattern;
}
- public RegularExpression(ByteBuffer byteBuffer) {
+ public LikeExpression(ByteBuffer byteBuffer) {
super(Expression.deserialize(byteBuffer));
- patternString = ReadWriteIOUtils.readString(byteBuffer);
- pattern = Pattern.compile(Validate.notNull(patternString));
+ pattern = ReadWriteIOUtils.readString(byteBuffer);
}
@Override
- protected Transformer constructTransformer(LayerPointReader pointReader) {
- throw new RuntimeException();
+ protected String getExpressionStringInternal() {
+ return expression + " LIKE " + pattern;
}
@Override
- protected Expression constructExpression(Expression childExpression) {
- return new RegularExpression(childExpression, patternString, pattern);
+ public ExpressionType getExpressionType() {
+ return ExpressionType.LIKE;
}
@Override
- protected String getExpressionStringInternal() {
- return expression + " REGEXP " + patternString;
+ protected Transformer constructTransformer(LayerPointReader pointReader) {
+ throw new UnsupportedOperationException();
}
@Override
- public ExpressionType getExpressionType() {
- return ExpressionType.REGEXP;
+ protected Expression constructExpression(Expression childExpression) {
+ return new LikeExpression(childExpression, pattern);
}
@Override
protected void serialize(ByteBuffer byteBuffer) {
super.serialize(byteBuffer);
- ReadWriteIOUtils.write(patternString, byteBuffer);
+ ReadWriteIOUtils.write(pattern, 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 511ca42fc3..f2e74d597a 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
@@ -55,7 +55,7 @@ public class RegularExpression extends UnaryExpression {
@Override
protected Transformer constructTransformer(LayerPointReader pointReader) {
- throw new RuntimeException();
+ throw new UnsupportedOperationException();
}
@Override