if (intervalDimFilter.getExtractionFn() != null) { if (!intervalDimFilter.getDimension().equals(ColumnHolder.TIME_COLUMN_NAME)) { List<Interval> filterIntervals = intervalDimFilter.getIntervals(); List<Interval> excludedFilterIntervals = new ArrayList<>(); List<Interval> effectiveFilterIntervals = new ArrayList<>(); new IntervalDimFilter( intervalDimFilter.getDimension(), effectiveFilterIntervals, intervalDimFilter.getExtractionFn() ), this.name
@JsonCreator public IntervalDimFilter( @JsonProperty("dimension") String dimension, @JsonProperty("intervals") List<Interval> intervals, @JsonProperty("extractionFn") ExtractionFn extractionFn ) { Preconditions.checkNotNull(dimension, "dimension can not be null"); Preconditions.checkNotNull(intervals, "intervals can not be null"); Preconditions.checkArgument(intervals.size() > 0, "must specify at least one interval"); this.dimension = dimension; this.intervals = Collections.unmodifiableList(JodaUtils.condenseIntervals(intervals)); this.extractionFn = extractionFn; this.intervalLongs = makeIntervalLongs(); this.convertedFilter = new OrDimFilter(makeBoundDimFilters()); }
@Override public int hashCode() { int result = getIntervals().hashCode(); result = 31 * result + getDimension().hashCode(); result = 31 * result + (getExtractionFn() != null ? getExtractionFn().hashCode() : 0); return result; }
@Test public void testGetRequiredColumns() { DimFilter intervalFilter = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( Intervals.of("1970-01-01T00:00:00.001Z/1970-01-01T00:00:00.004Z"), Intervals.of("1975-01-01T00:00:00.001Z/1980-01-01T00:00:00.004Z") ), null ); Assert.assertEquals(intervalFilter.getRequiredColumns(), Sets.newHashSet(ColumnHolder.TIME_COLUMN_NAME)); } }
@Test public void testSerde() throws IOException { DimFilter intervalFilter = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( Intervals.of("1970-01-01T00:00:00.001Z/1970-01-01T00:00:00.004Z"), Intervals.of("1975-01-01T00:00:00.001Z/1980-01-01T00:00:00.004Z") ), null ); String filterStr = mapper.writeValueAsString(intervalFilter); IntervalDimFilter actualFilter = mapper.readerFor(DimFilter.class).readValue(filterStr); Assert.assertEquals(intervalFilter, actualFilter); intervalFilter = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( Intervals.of("1970-01-01T00:00:00.001Z/1970-01-01T00:00:00.004Z"), Intervals.of("1975-01-01T00:00:00.001Z/1980-01-01T00:00:00.004Z") ), new RegexDimExtractionFn(".*", false, null) ); filterStr = mapper.writeValueAsString(intervalFilter); actualFilter = mapper.readerFor(DimFilter.class).readValue(filterStr); Assert.assertEquals(intervalFilter, actualFilter); }
@Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } IntervalDimFilter that = (IntervalDimFilter) o; if (!getIntervals().equals(that.getIntervals())) { return false; } if (!getDimension().equals(that.getDimension())) { return false; } return getExtractionFn() != null ? getExtractionFn().equals(that.getExtractionFn()) : that.getExtractionFn() == null; }
DimFilter intervalFilter1 = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( ); DimFilter intervalFilter2 = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( ); DimFilter intervalFilter3 = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( Assert.assertNotEquals(intervalFilter1.hashCode(), intervalFilter3.hashCode()); DimFilter intervalFilter4 = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( DimFilter intervalFilter5 = new IntervalDimFilter( "__thyme", Arrays.asList(
if (intervalDimFilter.getExtractionFn() != null) { if (!intervalDimFilter.getDimension().equals(ColumnHolder.TIME_COLUMN_NAME)) { List<Interval> filterIntervals = intervalDimFilter.getIntervals(); List<Interval> excludedFilterIntervals = new ArrayList<>(); List<Interval> effectiveFilterIntervals = new ArrayList<>(); new IntervalDimFilter( intervalDimFilter.getDimension(), effectiveFilterIntervals, intervalDimFilter.getExtractionFn() ), this.name
@Override public int hashCode() { int result = getIntervals().hashCode(); result = 31 * result + getDimension().hashCode(); result = 31 * result + (getExtractionFn() != null ? getExtractionFn().hashCode() : 0); return result; }
@JsonCreator public IntervalDimFilter( @JsonProperty("dimension") String dimension, @JsonProperty("intervals") List<Interval> intervals, @JsonProperty("extractionFn") ExtractionFn extractionFn ) { Preconditions.checkNotNull(dimension, "dimension can not be null"); Preconditions.checkNotNull(intervals, "intervals can not be null"); Preconditions.checkArgument(intervals.size() > 0, "must specify at least one interval"); this.dimension = dimension; this.intervals = Collections.unmodifiableList(JodaUtils.condenseIntervals(intervals)); this.extractionFn = extractionFn; this.intervalLongs = makeIntervalLongs(); this.convertedFilter = new OrDimFilter(makeBoundDimFilters()); }
new IntervalDimFilter( "dim0", Collections.singletonList(Intervals.of("1970-01-01T00:00:00.001Z/1970-01-01T00:00:00.005Z")), new IntervalDimFilter( "dim0", Arrays.asList( new IntervalDimFilter( "dim0", Arrays.asList( new IntervalDimFilter( "dim1", Collections.singletonList(Intervals.of("1970-01-01T00:00:00.002Z/1970-01-01T00:00:00.011Z")), ExtractionFn exFn = new JavaScriptExtractionFn(timeBoosterJsFn, true, JavaScriptConfig.getEnabledInstance()); assertFilterMatches( new IntervalDimFilter( "dim0", Collections.singletonList(Intervals.of("1970-01-01T02:00:00.001Z/1970-01-01T02:00:00.005Z")),
@Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } IntervalDimFilter that = (IntervalDimFilter) o; if (!getIntervals().equals(that.getIntervals())) { return false; } if (!getDimension().equals(that.getDimension())) { return false; } return getExtractionFn() != null ? getExtractionFn().equals(that.getExtractionFn()) : that.getExtractionFn() == null; }
new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Collections.singletonList(Intervals.of("1970-01-01T00:00:00.001Z/1970-01-01T00:00:00.005Z")), new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( ExtractionFn exFn = new JavaScriptExtractionFn(timeBoosterJsFn, true, JavaScriptConfig.getEnabledInstance()); assertFilterMatches( new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Collections.singletonList(Intervals.of("1970-01-01T02:00:00.001Z/1970-01-01T02:00:00.005Z")),
"sumLongSequential", "sumLongSequential" ), new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Collections.singletonList(recent), new FilteredAggregatorFactory( new LongSumAggregatorFactory("_cmp_sumLongSequential", "sumLongSequential"), new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Collections.singletonList(previous), "sumLongSequential", "sumLongSequential" ), new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Collections.singletonList(recent), "_cmp_sumLongSequential", "sumLongSequential" ), new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Collections.singletonList(previous),
new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, ImmutableList.of(Intervals.of("2000/2001"), Intervals.of("2002/2003")), new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, ImmutableList.of(Intervals.of("2000/2001"), Intervals.of("2002/2003")),
DimFilter intervalFilter1 = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( ); DimFilter intervalFilter2 = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( ); DimFilter intervalFilter3 = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( Assert.assertNotEquals(intervalFilter1, intervalFilter3); DimFilter intervalFilter4 = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( Assert.assertEquals(intervalFilter1, intervalFilter4); DimFilter intervalFilter5 = new IntervalDimFilter( "__thyme", Arrays.asList(
@Test public void testGetCacheKey() DimFilter intervalFilter1 = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( ); DimFilter intervalFilter2 = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( DimFilter intervalFilter3 = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList( regexFn ); DimFilter intervalFilter4 = new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Arrays.asList(
new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Collections.singletonList(Intervals.utc(1000, 2000)), AggregatorFactory expectedPartialFilteredAgg = new FilteredAggregatorFactory( longSumAggregatorFactory, new IntervalDimFilter( ColumnHolder.TIME_COLUMN_NAME, Collections.singletonList(Intervals.utc(1500, 2000)),
@Test public void testFilteredAggregatorDontOptimizeOnNonTimeColumn() { // Filter is not on __time, so no optimizations should be made. LongSumAggregatorFactory longSumAggregatorFactory = new LongSumAggregatorFactory("test", "test"); FilteredAggregatorFactory aggregatorFactory = new FilteredAggregatorFactory( longSumAggregatorFactory, new IntervalDimFilter( "not_time", Collections.singletonList(Intervals.utc(1000, 2000)), null ) ); Interval exclude = Intervals.utc(2000, 3000); Interval include = Intervals.utc(1500, 1600); Interval partial = Intervals.utc(1500, 2500); AggregatorFactory excludedAgg = aggregatorFactory.optimizeForSegment(getOptimizationContext(exclude)); Assert.assertEquals(aggregatorFactory, excludedAgg); AggregatorFactory includedAgg = aggregatorFactory.optimizeForSegment(getOptimizationContext(include)); Assert.assertEquals(aggregatorFactory, includedAgg); AggregatorFactory partialAgg = aggregatorFactory.optimizeForSegment(getOptimizationContext(partial)); Assert.assertEquals(aggregatorFactory, partialAgg); }