You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by er...@apache.org on 2021/12/27 02:08:51 UTC
[iotdb] branch rel/0.12 updated: [IOTDB-2174] Fix Regexp filter serializing and deserializing error (#4609)
This is an automated email from the ASF dual-hosted git repository.
ericpai pushed a commit to branch rel/0.12
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.12 by this push:
new a7e4616 [IOTDB-2174] Fix Regexp filter serializing and deserializing error (#4609)
a7e4616 is described below
commit a7e46169badb950fef9cfc52d4acef532919d563
Author: BaiJian <er...@hotmail.com>
AuthorDate: Mon Dec 27 10:08:06 2021 +0800
[IOTDB-2174] Fix Regexp filter serializing and deserializing error (#4609)
---
.../tsfile/read/filter/factory/FilterFactory.java | 4 ++++
.../iotdb/tsfile/read/filter/operator/Regexp.java | 21 ++++++++++++++++++---
.../tsfile/read/filter/FilterSerializeTest.java | 1 +
3 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/factory/FilterFactory.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/factory/FilterFactory.java
index 97f12e2..11d9349 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/factory/FilterFactory.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/factory/FilterFactory.java
@@ -31,6 +31,7 @@ import org.apache.iotdb.tsfile.read.filter.operator.LtEq;
import org.apache.iotdb.tsfile.read.filter.operator.NotEq;
import org.apache.iotdb.tsfile.read.filter.operator.NotFilter;
import org.apache.iotdb.tsfile.read.filter.operator.OrFilter;
+import org.apache.iotdb.tsfile.read.filter.operator.Regexp;
import java.nio.ByteBuffer;
@@ -89,6 +90,9 @@ public class FilterFactory {
case GROUP_BY_MONTH:
filter = new GroupByMonthFilter();
break;
+ case REGEXP:
+ filter = new Regexp<>();
+ break;
default:
throw new UnsupportedOperationException("Unknown filter type " + id);
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Regexp.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Regexp.java
index 5aa95bb..646b51b 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Regexp.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Regexp.java
@@ -27,6 +27,7 @@ import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.util.Objects;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
@@ -43,7 +44,7 @@ public class Regexp<T extends Comparable<T>> implements Filter {
protected Pattern pattern;
- private Regexp() {}
+ public Regexp() {}
public Regexp(String value, FilterType filterType) {
this.value = value;
@@ -51,7 +52,7 @@ public class Regexp<T extends Comparable<T>> implements Filter {
try {
this.pattern = Pattern.compile(this.value);
} catch (PatternSyntaxException e) {
- throw new PatternSyntaxException("Regular expression error", value.toString(), e.getIndex());
+ throw new PatternSyntaxException("Regular expression error", value, e.getIndex());
}
}
@@ -88,7 +89,7 @@ public class Regexp<T extends Comparable<T>> implements Filter {
try {
outputStream.write(getSerializeId().ordinal());
outputStream.write(filterType.ordinal());
- ReadWriteIOUtils.writeObject(value, outputStream);
+ ReadWriteIOUtils.write(value, outputStream);
} catch (IOException ex) {
throw new IllegalArgumentException("Failed to serialize outputStream of type:", ex);
}
@@ -98,6 +99,13 @@ public class Regexp<T extends Comparable<T>> implements Filter {
public void deserialize(ByteBuffer buffer) {
filterType = FilterType.values()[buffer.get()];
value = ReadWriteIOUtils.readString(buffer);
+ if (value != null) {
+ try {
+ this.pattern = Pattern.compile(value);
+ } catch (PatternSyntaxException e) {
+ throw new PatternSyntaxException("Regular expression error", value, e.getIndex());
+ }
+ }
}
@Override
@@ -106,6 +114,13 @@ public class Regexp<T extends Comparable<T>> implements Filter {
}
@Override
+ public boolean equals(Object o) {
+ return o instanceof Regexp
+ && Objects.equals(((Regexp<?>) o).value, value)
+ && ((Regexp<?>) o).filterType == filterType;
+ }
+
+ @Override
public FilterSerializeId getSerializeId() {
return FilterSerializeId.REGEXP;
}
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/FilterSerializeTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/FilterSerializeTest.java
index 2dd8a48..779e32d 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/FilterSerializeTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/FilterSerializeTest.java
@@ -48,6 +48,7 @@ public class FilterSerializeTest {
ValueFilter.notEq(false),
ValueFilter.in(new HashSet<>(Arrays.asList("a", "b")), false),
ValueFilter.in(new HashSet<>(Arrays.asList("c", "d")), true),
+ ValueFilter.regexp("s.*"),
};
for (Filter filter : filters) {
validateSerialization(filter);