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

Reply via email to