public TopNQueryBuilder filters(String dimensionName, String value, String... values) { dimFilter = new InDimFilter(dimensionName, Lists.asList(value, values), null); return this; }
@Test public void testGetCacheKey() { final InDimFilter inDimFilter_1 = new InDimFilter("dimTest", Arrays.asList("good", "bad"), null); final InDimFilter inDimFilter_2 = new InDimFilter("dimTest", Collections.singletonList("good,bad"), null); Assert.assertNotEquals(inDimFilter_1.getCacheKey(), inDimFilter_2.getCacheKey()); RegexDimExtractionFn regexFn = new RegexDimExtractionFn(".*", false, null); final InDimFilter inDimFilter_3 = new InDimFilter("dimTest", Arrays.asList("good", "bad"), regexFn); final InDimFilter inDimFilter_4 = new InDimFilter("dimTest", Collections.singletonList("good,bad"), regexFn); Assert.assertNotEquals(inDimFilter_3.getCacheKey(), inDimFilter_4.getCacheKey()); }
@Override public RangeSet<String> getDimensionRangeSet(String dimension) { if (!Objects.equals(getDimension(), dimension) || getExtractionFn() != null) { return null; } RangeSet<String> retSet = TreeRangeSet.create(); for (String value : values) { String valueEquivalent = NullHandling.nullToEmptyIfNeeded(value); if (valueEquivalent == null) { // Case when SQL compatible null handling is enabled // Range.singleton(null) is invalid, so use the fact that // only null values are less than empty string. retSet.add(Range.lessThan("")); } else { retSet.add(Range.singleton(valueEquivalent)); } } return retSet; }
@Override public DimFilter optimize() { return new InDimFilter(dimension, Collections.singletonList(value), extractionFn).optimize(); }
@Override public DimFilter optimize() { InDimFilter inFilter = optimizeLookup(); if (inFilter.values.size() == 1) { return new SelectorDimFilter(inFilter.dimension, inFilter.values.first(), inFilter.getExtractionFn()); } return inFilter; }
@JsonCreator public InDimFilter( @JsonProperty("dimension") String dimension, @JsonProperty("values") Collection<String> values, @JsonProperty("extractionFn") ExtractionFn extractionFn ) { Preconditions.checkNotNull(dimension, "dimension can not be null"); Preconditions.checkArgument(values != null, "values can not be null"); this.values = new TreeSet<>(Comparators.naturalNullsFirst()); for (String value : values) { this.values.add(NullHandling.emptyToNullIfNeeded(value)); } this.dimension = dimension; this.extractionFn = extractionFn; this.longPredicateSupplier = getLongPredicateSupplier(); this.floatPredicateSupplier = getFloatPredicateSupplier(); this.doublePredicateSupplier = getDoublePredicateSupplier(); }
SelectorDimFilter optFilter6 = new SelectorDimFilter("dim0", "5", lookupFn6); InDimFilter optFilter2Optimized = new InDimFilter("dim0", Arrays.asList("2", "5"), null); SelectorDimFilter optFilter4Optimized = new SelectorDimFilter("dim0", "5", null); SelectorDimFilter optFilter6Optimized = new SelectorDimFilter("dim0", "5", null); Assert.assertTrue(optFilter2Optimized.equals(optFilter2.optimize())); Assert.assertTrue(optFilter3.equals(optFilter3.optimize())); Assert.assertTrue(optFilter4Optimized.equals(optFilter4.optimize()));
@Test public void testGetCacheKeyNullValue() throws IOException { InDimFilter inDimFilter = mapper.readValue("{\"type\":\"in\",\"dimension\":\"dimTest\",\"values\":[null]}", InDimFilter.class); Assert.assertNotNull(inDimFilter.getCacheKey()); } }
@Override public DimFilter optimize() { return new InDimFilter(dimension, Collections.singletonList(value), extractionFn).optimize(); }
@JsonCreator public InDimFilter( @JsonProperty("dimension") String dimension, @JsonProperty("values") Collection<String> values, @JsonProperty("extractionFn") ExtractionFn extractionFn ) { Preconditions.checkNotNull(dimension, "dimension can not be null"); Preconditions.checkArgument(values != null && !values.isEmpty(), "values can not be null or empty"); this.values = new TreeSet<>(Comparators.naturalNullsFirst()); for (String value : values) { this.values.add(NullHandling.emptyToNullIfNeeded(value)); } this.dimension = dimension; this.extractionFn = extractionFn; this.longPredicateSupplier = getLongPredicateSupplier(); this.floatPredicateSupplier = getFloatPredicateSupplier(); this.doublePredicateSupplier = getDoublePredicateSupplier(); }
@Override public DimFilter optimize() { InDimFilter inFilter = optimizeLookup(); if (inFilter.values.size() == 1) { return new SelectorDimFilter(inFilter.dimension, inFilter.values.first(), inFilter.getExtractionFn()); } return inFilter; }
public TimeseriesQueryBuilder filters(String dimensionName, String value, String... values) { dimFilter = new InDimFilter(dimensionName, Lists.asList(value, values), null); return this; }
@Override public RangeSet<String> getDimensionRangeSet(String dimension) { if (!Objects.equals(getDimension(), dimension) || getExtractionFn() != null) { return null; } RangeSet<String> retSet = TreeRangeSet.create(); for (String value : values) { String valueEquivalent = NullHandling.nullToEmptyIfNeeded(value); if (valueEquivalent == null) { // Case when SQL compatible null handling is enabled // Range.singleton(null) is invalid, so use the fact that // only null values are less than empty string. retSet.add(Range.lessThan("")); } else { retSet.add(Range.singleton(valueEquivalent)); } } return retSet; }
public static InDimFilter IN(String dimension, List<String> values, ExtractionFn extractionFn) { return new InDimFilter(dimension, values, extractionFn); }
private DimFilter toInFilter(String dim) { List<String> emptyList = new ArrayList<>(); return new InDimFilter(dim, emptyList, null); }
private DimFilter toInFilterWithFn(String dim, ExtractionFn fn, String value, String... values) { return new InDimFilter(dim, Lists.asList(value, values), fn); } }
private static SearchQueryBuilder basicB(final BenchmarkSchemaInfo basicSchema) { final QuerySegmentSpec intervalSpec = new MultipleIntervalSegmentSpec(Collections.singletonList(basicSchema.getDataInterval())); final List<String> dimUniformFilterVals = new ArrayList<>(); int resultNum = (int) (100000 * 0.1); int step = 100000 / resultNum; for (int i = 1; i < 100001 && dimUniformFilterVals.size() < resultNum; i += step) { dimUniformFilterVals.add(String.valueOf(i)); } List<String> dimHyperUniqueFilterVals = new ArrayList<>(); resultNum = (int) (100000 * 0.1); step = 100000 / resultNum; for (int i = 0; i < 100001 && dimHyperUniqueFilterVals.size() < resultNum; i += step) { dimHyperUniqueFilterVals.add(String.valueOf(i)); } final List<DimFilter> dimFilters = new ArrayList<>(); dimFilters.add(new InDimFilter("dimUniform", dimUniformFilterVals, null)); dimFilters.add(new InDimFilter("dimHyperUnique", dimHyperUniqueFilterVals, null)); return Druids.newSearchQueryBuilder() .dataSource("blah") .granularity(Granularities.ALL) .intervals(intervalSpec) .query("") .dimensions(Lists.newArrayList("dimUniform", "dimHyperUnique")) .filters(new AndDimFilter(dimFilters)); }
private DimFilter toInFilter(String dim, String value, String... values) { return new InDimFilter(dim, Lists.asList(value, values), null); }
@Test public void testDeserialization() throws IOException { final InDimFilter actualInDimFilter = mapper.readerFor(DimFilter.class).readValue(actualInFilter); final InDimFilter expectedInDimFilter = new InDimFilter("dimTest", Arrays.asList("good", "bad"), null); Assert.assertEquals(expectedInDimFilter, actualInDimFilter); }
@Test public void testSerialization() throws IOException { final InDimFilter dimInFilter = new InDimFilter("dimTest", Arrays.asList("good", "bad"), null); final String expectedInFilter = mapper.writeValueAsString(dimInFilter); Assert.assertEquals(expectedInFilter, actualInFilter); }