You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2023/04/13 16:17:15 UTC
[iotdb] 02/04: add allSatisfy interface
This is an automated email from the ASF dual-hosted git repository.
hui pushed a commit to branch lmh/FixOffsetPushDown
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 0e703d1d6014694d3c670bdedc9a383e0e6df1a3
Author: liuminghui233 <54...@qq.com>
AuthorDate: Thu Apr 13 22:22:49 2023 +0800
add allSatisfy interface
---
.../iotdb/tsfile/read/filter/GroupByFilter.java | 5 +++++
.../iotdb/tsfile/read/filter/basic/Filter.java | 7 +++++++
.../tsfile/read/filter/operator/AndFilter.java | 5 +++++
.../iotdb/tsfile/read/filter/operator/Between.java | 23 ++++++++++++++++++++++
.../iotdb/tsfile/read/filter/operator/Eq.java | 14 +++++++++++++
.../iotdb/tsfile/read/filter/operator/Gt.java | 12 +++++++++++
.../iotdb/tsfile/read/filter/operator/GtEq.java | 12 +++++++++++
.../iotdb/tsfile/read/filter/operator/In.java | 5 +++++
.../iotdb/tsfile/read/filter/operator/Like.java | 5 +++++
.../iotdb/tsfile/read/filter/operator/Lt.java | 12 +++++++++++
.../iotdb/tsfile/read/filter/operator/LtEq.java | 12 +++++++++++
.../iotdb/tsfile/read/filter/operator/NotEq.java | 14 +++++++++++++
.../tsfile/read/filter/operator/NotFilter.java | 5 +++++
.../tsfile/read/filter/operator/OrFilter.java | 5 +++++
.../iotdb/tsfile/read/filter/operator/Regexp.java | 5 +++++
15 files changed, 141 insertions(+)
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/GroupByFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/GroupByFilter.java
index 851d122bab..50dc156c1f 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/GroupByFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/GroupByFilter.java
@@ -53,6 +53,11 @@ public class GroupByFilter implements Filter, Serializable {
return satisfyStartEndTime(statistics.getStartTime(), statistics.getEndTime());
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ return satisfyStartEndTime(statistics.getStartTime(), statistics.getEndTime());
+ }
+
@Override
public boolean satisfy(long time, Object value) {
if (time < startTime || time >= endTime) {
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/basic/Filter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/basic/Filter.java
index dc0d479c83..2d6335814c 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/basic/Filter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/basic/Filter.java
@@ -38,6 +38,13 @@ public interface Filter {
*/
boolean satisfy(Statistics statistics);
+ /**
+ * To examine whether all data points are satisfied with the filter.
+ *
+ * @param statistics statistics with min time, max time, min value, max value.
+ */
+ boolean allSatisfy(Statistics statistics);
+
/**
* To examine whether the single point(with time and value) is satisfied with the filter.
*
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/AndFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/AndFilter.java
index 6c5120a3f7..d06fb8b7cb 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/AndFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/AndFilter.java
@@ -43,6 +43,11 @@ public class AndFilter extends BinaryFilter {
return left.satisfy(statistics) && right.satisfy(statistics);
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ return left.allSatisfy(statistics) && right.allSatisfy(statistics);
+ }
+
@Override
public boolean satisfy(long time, Object value) {
return left.satisfy(time, value) && right.satisfy(time, value);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Between.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Between.java
index 0ca994f315..6277bc270c 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Between.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Between.java
@@ -100,6 +100,29 @@ public class Between<T extends Comparable<T>> implements Filter {
}
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ if (filterType == FilterType.TIME_FILTER) {
+ long time1 = (Long) value1, time2 = (Long) value2;
+ if (not) {
+ return statistics.getStartTime() < time1 || statistics.getEndTime() > time2;
+ } else {
+ return statistics.getEndTime() >= time1 || statistics.getStartTime() <= time2;
+ }
+ } else {
+ if (statistics.getType() == TSDataType.TEXT || statistics.getType() == TSDataType.BOOLEAN) {
+ return false;
+ }
+ if (not) {
+ return ((T) statistics.getMinValue()).compareTo(value1) < 0
+ || ((T) statistics.getMaxValue()).compareTo(value2) > 0;
+ } else {
+ return ((T) statistics.getMaxValue()).compareTo(value1) >= 0
+ && ((T) statistics.getMinValue()).compareTo(value2) <= 0;
+ }
+ }
+ }
+
@Override
public boolean satisfy(long time, Object value) {
Object v = filterType == FilterType.TIME_FILTER ? time : value;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Eq.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Eq.java
index 7a69be9468..08c269e521 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Eq.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Eq.java
@@ -54,6 +54,20 @@ public class Eq<T extends Comparable<T>> extends UnaryFilter<T> {
}
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ if (filterType == FilterType.TIME_FILTER) {
+ return ((Long) value) >= statistics.getStartTime()
+ && ((Long) value) <= statistics.getEndTime();
+ } else {
+ if (statistics.getType() == TSDataType.TEXT || statistics.getType() == TSDataType.BOOLEAN) {
+ return false;
+ }
+ return value.compareTo((T) statistics.getMinValue()) >= 0
+ && value.compareTo((T) statistics.getMaxValue()) <= 0;
+ }
+ }
+
@Override
public boolean satisfy(long time, Object value) {
Object v = filterType == FilterType.TIME_FILTER ? time : value;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Gt.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Gt.java
index 0719397e8c..0648bbf2f5 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Gt.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Gt.java
@@ -52,6 +52,18 @@ public class Gt<T extends Comparable<T>> extends UnaryFilter<T> {
}
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ if (filterType == FilterType.TIME_FILTER) {
+ return ((Long) value) < statistics.getEndTime();
+ } else {
+ if (statistics.getType() == TSDataType.TEXT || statistics.getType() == TSDataType.BOOLEAN) {
+ return false;
+ }
+ return value.compareTo((T) statistics.getMaxValue()) < 0;
+ }
+ }
+
@Override
public boolean satisfy(long time, Object value) {
Object v = filterType == FilterType.TIME_FILTER ? time : value;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GtEq.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GtEq.java
index 4e811e14fe..7dcab1443c 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GtEq.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GtEq.java
@@ -52,6 +52,18 @@ public class GtEq<T extends Comparable<T>> extends UnaryFilter<T> {
}
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ if (filterType == FilterType.TIME_FILTER) {
+ return ((Long) value) <= statistics.getEndTime();
+ } else {
+ if (statistics.getType() == TSDataType.TEXT || statistics.getType() == TSDataType.BOOLEAN) {
+ return false;
+ }
+ return value.compareTo((T) statistics.getMaxValue()) <= 0;
+ }
+ }
+
@Override
public boolean satisfy(long time, Object value) {
Object v = filterType == FilterType.TIME_FILTER ? time : value;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/In.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/In.java
index 60e0747f5d..9a28682d25 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/In.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/In.java
@@ -61,6 +61,11 @@ public class In<T extends Comparable<T>> implements Filter {
return true;
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ return false;
+ }
+
@Override
public boolean satisfy(long time, Object value) {
Object v = filterType == FilterType.TIME_FILTER ? time : value;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Like.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Like.java
index fac3dfcf5b..425ed321c6 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Like.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Like.java
@@ -89,6 +89,11 @@ public class Like<T extends Comparable<T>> implements Filter {
return true;
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ return false;
+ }
+
@Override
public boolean satisfy(long time, Object value) {
if (filterType != FilterType.VALUE_FILTER) {
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Lt.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Lt.java
index 9c83b720c2..14d39e2fed 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Lt.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Lt.java
@@ -52,6 +52,18 @@ public class Lt<T extends Comparable<T>> extends UnaryFilter<T> {
}
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ if (filterType == FilterType.TIME_FILTER) {
+ return ((Long) value) > statistics.getStartTime();
+ } else {
+ if (statistics.getType() == TSDataType.TEXT || statistics.getType() == TSDataType.BOOLEAN) {
+ return false;
+ }
+ return value.compareTo((T) statistics.getMinValue()) > 0;
+ }
+ }
+
@Override
public boolean satisfy(long time, Object value) {
Object v = filterType == FilterType.TIME_FILTER ? time : value;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/LtEq.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/LtEq.java
index b68b1b4759..343a325021 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/LtEq.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/LtEq.java
@@ -52,6 +52,18 @@ public class LtEq<T extends Comparable<T>> extends UnaryFilter<T> {
}
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ if (filterType == FilterType.TIME_FILTER) {
+ return ((Long) value) >= statistics.getStartTime();
+ } else {
+ if (statistics.getType() == TSDataType.TEXT || statistics.getType() == TSDataType.BOOLEAN) {
+ return false;
+ }
+ return value.compareTo((T) statistics.getMinValue()) >= 0;
+ }
+ }
+
@Override
public boolean satisfy(long time, Object value) {
Object v = filterType == FilterType.TIME_FILTER ? time : value;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotEq.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotEq.java
index 55abda179e..55be826df0 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotEq.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotEq.java
@@ -54,6 +54,20 @@ public class NotEq<T extends Comparable<T>> extends UnaryFilter<T> {
}
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ if (filterType == FilterType.TIME_FILTER) {
+ return !(((Long) value) == statistics.getStartTime()
+ && (Long) value == statistics.getEndTime());
+ } else {
+ if (statistics.getType() == TSDataType.TEXT || statistics.getType() == TSDataType.BOOLEAN) {
+ return false;
+ }
+ return !(value.compareTo((T) statistics.getMinValue()) == 0
+ && value.compareTo((T) statistics.getMaxValue()) == 0);
+ }
+ }
+
@Override
public boolean satisfy(long time, Object value) {
Object v = filterType == FilterType.TIME_FILTER ? time : value;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotFilter.java
index cd983dc329..8d46624ff5 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotFilter.java
@@ -49,6 +49,11 @@ public class NotFilter implements Filter, Serializable {
return !that.satisfy(statistics);
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ return !that.allSatisfy(statistics);
+ }
+
@Override
public boolean satisfy(long time, Object value) {
return !that.satisfy(time, value);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/OrFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/OrFilter.java
index 17b0935510..37b3d7d566 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/OrFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/OrFilter.java
@@ -55,6 +55,11 @@ public class OrFilter extends BinaryFilter implements Serializable {
return left.satisfy(statistics) || right.satisfy(statistics);
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ return left.allSatisfy(statistics) || right.allSatisfy(statistics);
+ }
+
@Override
public boolean satisfy(long time, Object value) {
return left.satisfy(time, value) || right.satisfy(time, value);
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 31e7260469..7a66c14f61 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
@@ -62,6 +62,11 @@ public class Regexp<T extends Comparable<T>> implements Filter {
return true;
}
+ @Override
+ public boolean allSatisfy(Statistics statistics) {
+ return false;
+ }
+
@Override
public boolean satisfy(long time, Object value) {
if (filterType != FilterType.VALUE_FILTER) {