This is an automated email from the ASF dual-hosted git repository. hui pushed a commit to branch lmh/refactorFilter in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit d2094563a78a6c6b35d752015c4d4d72b9ab3dcb Author: Minghui Liu <[email protected]> AuthorDate: Mon Nov 20 20:21:05 2023 +0800 add equals() & hashCode() for filter --- .../tsfile/read/filter/operator/GroupByFilter.java | 17 ++++++ .../read/filter/operator/GroupByMonthFilter.java | 31 +++++++++++ .../iotdb/tsfile/read/filter/operator/Not.java | 13 +++++ .../read/filter/operator/ValueFilterOperators.java | 65 ++++++++++++++++++++-- .../filter/operator/base/BinaryLogicalFilter.java | 13 +++++ .../filter/operator/base/ColumnCompareFilter.java | 15 +++++ .../operator/base/ColumnPatternMatchFilter.java | 13 +++++ .../filter/operator/base/ColumnRangeFilter.java | 13 +++++ .../read/filter/operator/base/ColumnSetFilter.java | 15 ++++- 9 files changed, 189 insertions(+), 6 deletions(-) diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GroupByFilter.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GroupByFilter.java index 367ed56c66b..22a1cec9655 100644 --- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GroupByFilter.java +++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GroupByFilter.java @@ -25,6 +25,7 @@ import org.apache.iotdb.tsfile.read.filter.basic.ITimeFilter; import java.util.Collections; import java.util.List; +import java.util.Objects; public class GroupByFilter implements ITimeFilter { @@ -103,4 +104,20 @@ public class GroupByFilter implements ITimeFilter { public Filter reverse() { throw new UnsupportedOperationException(); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + GroupByFilter that = (GroupByFilter) o; + return interval == that.interval + && slidingStep == that.slidingStep + && startTime == that.startTime + && endTime == that.endTime; + } + + @Override + public int hashCode() { + return Objects.hash(interval, slidingStep, startTime, endTime); + } } diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GroupByMonthFilter.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GroupByMonthFilter.java index ba72d6c4955..b42f70fe39f 100644 --- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GroupByMonthFilter.java +++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GroupByMonthFilter.java @@ -23,6 +23,7 @@ import org.apache.iotdb.tsfile.utils.TimeDuration; import java.util.Arrays; import java.util.Calendar; +import java.util.Objects; import java.util.TimeZone; import java.util.concurrent.TimeUnit; @@ -180,4 +181,34 @@ public class GroupByMonthFilter extends GroupByFilter { - startTime; } } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + GroupByMonthFilter that = (GroupByMonthFilter) o; + return originalStartTime == that.originalStartTime + && originalEndTime == that.originalEndTime + && originalSlidingStep.equals(that.originalSlidingStep) + && originalInterval.equals(that.originalInterval) + && timeZone.equals(that.timeZone) + && currPrecision == that.currPrecision + && Arrays.equals(startTimes, that.startTimes); + } + + @Override + public int hashCode() { + int result = + Objects.hash( + super.hashCode(), + originalSlidingStep, + originalInterval, + timeZone, + originalStartTime, + originalEndTime, + currPrecision); + result = 31 * result + Arrays.hashCode(startTimes); + return result; + } } diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Not.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Not.java index 3b4d738f36d..165bf8fb9ab 100644 --- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Not.java +++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Not.java @@ -102,4 +102,17 @@ public class Not implements Filter { public Filter reverse() { return filter; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Not not = (Not) o; + return filter.equals(not.filter); + } + + @Override + public int hashCode() { + return Objects.hash(filter); + } } diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/ValueFilterOperators.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/ValueFilterOperators.java index 2129b4ad80b..8edf9e47cad 100644 --- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/ValueFilterOperators.java +++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/ValueFilterOperators.java @@ -68,6 +68,19 @@ public final class ValueFilterOperators { public String toString() { return toString; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ValueColumnCompareFilter<?> that = (ValueColumnCompareFilter<?>) o; + return measurement.equals(that.measurement); + } + + @Override + public int hashCode() { + return Objects.hash(measurement); + } } public static final class ValueEq<T extends Comparable<T>> extends ValueColumnCompareFilter<T> { @@ -302,6 +315,20 @@ public final class ValueFilterOperators { public String toString() { return toString; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + ValueColumnRangeFilter<?> that = (ValueColumnRangeFilter<?>) o; + return measurement.equals(that.measurement); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), measurement); + } } public static final class ValueBetweenAnd<T extends Comparable<T>> @@ -377,7 +404,7 @@ public final class ValueFilterOperators { } // base class for ValueIn, ValueNotIn - abstract static class ValueColumnSetFilter<T extends Comparable<T>> extends ColumnSetFilter<T> + abstract static class ValueColumnSetFilter<T> extends ColumnSetFilter<T> implements IDisableStatisticsValueFilter { protected final String measurement; @@ -399,9 +426,23 @@ public final class ValueFilterOperators { public String toString() { return toString; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + ValueColumnSetFilter<?> that = (ValueColumnSetFilter<?>) o; + return measurement.equals(that.measurement); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), measurement); + } } - public static final class ValueIn<T extends Comparable<T>> extends ValueColumnSetFilter<T> { + public static final class ValueIn<T> extends ValueColumnSetFilter<T> { public ValueIn(String measurement, Set<T> candidates) { super(measurement, candidates); @@ -409,7 +450,7 @@ public final class ValueFilterOperators { @Override public boolean satisfy(long time, Object value) { - return candidates.contains((T) value); + return candidates.contains(value); } @Override @@ -418,7 +459,7 @@ public final class ValueFilterOperators { } } - public static final class ValueNotIn<T extends Comparable<T>> extends ValueColumnSetFilter<T> { + public static final class ValueNotIn<T> extends ValueColumnSetFilter<T> { public ValueNotIn(String measurement, Set<T> candidates) { super(measurement, candidates); @@ -426,7 +467,7 @@ public final class ValueFilterOperators { @Override public boolean satisfy(long time, Object value) { - return !candidates.contains((T) value); + return !candidates.contains(value); } @Override @@ -458,6 +499,20 @@ public final class ValueFilterOperators { public String toString() { return toString; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + ValueColumnPatternMatchFilter that = (ValueColumnPatternMatchFilter) o; + return measurement.equals(that.measurement); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), measurement); + } } public static final class ValueRegexp extends ValueColumnPatternMatchFilter { diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/BinaryLogicalFilter.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/BinaryLogicalFilter.java index e61d3eba148..08c11719470 100644 --- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/BinaryLogicalFilter.java +++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/BinaryLogicalFilter.java @@ -52,4 +52,17 @@ public abstract class BinaryLogicalFilter { public String toString() { return toString; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + BinaryLogicalFilter that = (BinaryLogicalFilter) o; + return left.equals(that.left) && right.equals(that.right); + } + + @Override + public int hashCode() { + return Objects.hash(left, right); + } } diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnCompareFilter.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnCompareFilter.java index 2f13e09bd83..00d10954b5b 100644 --- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnCompareFilter.java +++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnCompareFilter.java @@ -19,6 +19,8 @@ package org.apache.iotdb.tsfile.read.filter.operator.base; +import java.util.Objects; + /* base class for Eq, NotEq, Lt, Gt, LtEq, GtEq */ public abstract class ColumnCompareFilter<T extends Comparable<T>> { @@ -29,4 +31,17 @@ public abstract class ColumnCompareFilter<T extends Comparable<T>> { // do not, so they guard against null in their own constructors. this.constant = constant; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ColumnCompareFilter<?> that = (ColumnCompareFilter<?>) o; + return Objects.equals(constant, that.constant); + } + + @Override + public int hashCode() { + return Objects.hash(constant); + } } diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnPatternMatchFilter.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnPatternMatchFilter.java index 3c578d97206..f13b94d72fd 100644 --- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnPatternMatchFilter.java +++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnPatternMatchFilter.java @@ -30,4 +30,17 @@ public abstract class ColumnPatternMatchFilter { protected ColumnPatternMatchFilter(Pattern pattern) { this.pattern = Objects.requireNonNull(pattern, "pattern cannot be null"); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ColumnPatternMatchFilter that = (ColumnPatternMatchFilter) o; + return pattern.equals(that.pattern); + } + + @Override + public int hashCode() { + return Objects.hash(pattern); + } } diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnRangeFilter.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnRangeFilter.java index 2d166ae4b8f..782490ad15f 100644 --- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnRangeFilter.java +++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnRangeFilter.java @@ -31,4 +31,17 @@ public abstract class ColumnRangeFilter<T extends Comparable<T>> { this.min = Objects.requireNonNull(min, "min cannot be null"); this.max = Objects.requireNonNull(max, "max cannot be null"); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ColumnRangeFilter<?> that = (ColumnRangeFilter<?>) o; + return min.equals(that.min) && max.equals(that.max); + } + + @Override + public int hashCode() { + return Objects.hash(min, max); + } } diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnSetFilter.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnSetFilter.java index d6e217cfaaa..488a47f0351 100644 --- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnSetFilter.java +++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/base/ColumnSetFilter.java @@ -23,11 +23,24 @@ import java.util.Objects; import java.util.Set; /* base class for In, NotIn */ -public abstract class ColumnSetFilter<T extends Comparable<T>> { +public abstract class ColumnSetFilter<T> { protected final Set<T> candidates; protected ColumnSetFilter(Set<T> candidates) { this.candidates = Objects.requireNonNull(candidates, "candidates cannot be null"); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ColumnSetFilter<?> that = (ColumnSetFilter<?>) o; + return candidates.equals(that.candidates); + } + + @Override + public int hashCode() { + return Objects.hash(candidates); + } }
