@Test public void testPrefixMatch() { assertFilterMatches( new LikeDimFilter("dim1", "foo%", null, null), ImmutableList.of("1", "2", "4", "5") ); }
@Test public void testWildcardMatchWithEscape() { assertFilterMatches( new LikeDimFilter("dim1", "%@%ba%", "@", null), ImmutableList.of("5") ); }
@Test public void testPrefixAndSuffixMatch() { assertFilterMatches( new LikeDimFilter("dim1", "f%r", null, null), ImmutableList.of("2", "5") ); }
@Test public void testPrefixMatchWithEscape() { assertFilterMatches( new LikeDimFilter("dim1", "foo@%%", "@", null), ImmutableList.of("5") ); }
@Test public void testMatchEmptyString() { assertFilterMatches( new LikeDimFilter("dim1", "", null, null), ImmutableList.of("0") ); }
@Test public void testExactMatch() { assertFilterMatches( new LikeDimFilter("dim1", "bar", null, null), ImmutableList.of("3") ); }
@Test public void testUnderscoreMatch() { assertFilterMatches( new LikeDimFilter("dim1", "f_o", null, null), ImmutableList.of("1") ); }
@Test public void testExactMatchWithEscape() { assertFilterMatches( new LikeDimFilter("dim1", "@bar", "@", null), ImmutableList.of("3") ); }
@Test public void testWildcardMatch() { assertFilterMatches( new LikeDimFilter("dim1", "%oba%", null, null), ImmutableList.of("2", "4") ); }
@Test public void testWildcardMatchEverything() { assertFilterMatches( new LikeDimFilter("dim1", "%", "@", null), ImmutableList.of("0", "1", "2", "3", "4", "5") ); }
@Test public void testEscapeEscapingItself() { assertFilterMatches( new LikeDimFilter("dim1", "foooo", "o", null), ImmutableList.of("1") ); }
@Nullable @Override public DimFilter toDruidFilter( PlannerContext plannerContext, RowSignature rowSignature, RexNode rexNode ) { final List<RexNode> operands = ((RexCall) rexNode).getOperands(); final DruidExpression druidExpression = Expressions.toDruidExpression( plannerContext, rowSignature, operands.get(0) ); if (druidExpression == null || !druidExpression.isSimpleExtraction()) { return null; } return new LikeDimFilter( druidExpression.getSimpleExtraction().getColumn(), RexLiteral.stringValue(operands.get(1)), operands.size() > 2 ? RexLiteral.stringValue(operands.get(2)) : null, druidExpression.getSimpleExtraction().getExtractionFn() ); } }
@Test public void testEqualsAndHashCode() { final DimFilter filter = new LikeDimFilter("foo", "bar%", "@", new SubstringDimExtractionFn(1, 2)); final DimFilter filter2 = new LikeDimFilter("foo", "bar%", "@", new SubstringDimExtractionFn(1, 2)); final DimFilter filter3 = new LikeDimFilter("foo", "bar%", null, new SubstringDimExtractionFn(1, 2)); Assert.assertEquals(filter, filter2); Assert.assertNotEquals(filter, filter3); Assert.assertEquals(filter.hashCode(), filter2.hashCode()); Assert.assertNotEquals(filter.hashCode(), filter3.hashCode()); }
@Test public void testSuffixMatchWithExtractionFn() { assertFilterMatches( new LikeDimFilter("dim1", "%ar", null, new SubstringDimExtractionFn(3, 3)), ImmutableList.of("2", "4") ); } }
@Test public void testSerde() throws IOException { final ObjectMapper objectMapper = new DefaultObjectMapper(); final DimFilter filter = new LikeDimFilter("foo", "bar%", "@", new SubstringDimExtractionFn(1, 2)); final DimFilter filter2 = objectMapper.readValue(objectMapper.writeValueAsString(filter), DimFilter.class); Assert.assertEquals(filter, filter2); }
@Test public void testExactMatchWithExtractionFn() { assertFilterMatches( new LikeDimFilter("dim1", "bar", null, new SubstringDimExtractionFn(3, 3)), ImmutableList.of("2", "4") ); }
@Test public void testPrefixMatchWithExtractionFn() { assertFilterMatches( new LikeDimFilter("dim1", "a%", null, new SubstringDimExtractionFn(1, null)), ImmutableList.of("3") ); }
@Test public void testMatchEmptyStringWithExtractionFn() { if (NullHandling.replaceWithDefault()) { assertFilterMatches( new LikeDimFilter("dim1", "", null, new SubstringDimExtractionFn(100, 1)), ImmutableList.of("0", "1", "2", "3", "4", "5") ); } else { assertFilterMatches( new LikeDimFilter("dim1", "", null, new SubstringDimExtractionFn(100, 1)), ImmutableList.of() ); } }
@Test public void testGetRequiredColumns() { final DimFilter filter = new LikeDimFilter("foo", "bar%", "@", new SubstringDimExtractionFn(1, 2)); Assert.assertEquals(filter.getRequiredColumns(), Sets.newHashSet("foo")); } }
@Test public void testGetCacheKey() { final DimFilter filter = new LikeDimFilter("foo", "bar%", "@", new SubstringDimExtractionFn(1, 2)); final DimFilter filter2 = new LikeDimFilter("foo", "bar%", "@", new SubstringDimExtractionFn(1, 2)); final DimFilter filter3 = new LikeDimFilter("foo", "bar%", null, new SubstringDimExtractionFn(1, 2)); Assert.assertArrayEquals(filter.getCacheKey(), filter2.getCacheKey()); Assert.assertFalse(Arrays.equals(filter.getCacheKey(), filter3.getCacheKey())); }