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 <[email protected]> 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) {
