Fix LIKE filter wildcards to match newlines. (#8863)

This commit is contained in:
Gian Merlino 2019-11-13 23:00:54 -08:00 committed by Fangjin Yang
parent 00f6a56370
commit ce4ee42459
2 changed files with 43 additions and 4 deletions

View File

@ -271,7 +271,7 @@ public class LikeDimFilter implements DimFilter
} }
} }
return new LikeMatcher(suffixMatch, prefix.toString(), Pattern.compile(regex.toString())); return new LikeMatcher(suffixMatch, prefix.toString(), Pattern.compile(regex.toString(), Pattern.DOTALL));
} }
private static void addPatternCharacter(final StringBuilder patternBuilder, final char c) private static void addPatternCharacter(final StringBuilder patternBuilder, final char c)

View File

@ -62,7 +62,8 @@ public class LikeFilterTest extends BaseFilterTest
PARSER.parseBatch(ImmutableMap.of("dim0", "2", "dim1", "foobar")).get(0), PARSER.parseBatch(ImmutableMap.of("dim0", "2", "dim1", "foobar")).get(0),
PARSER.parseBatch(ImmutableMap.of("dim0", "3", "dim1", "bar")).get(0), PARSER.parseBatch(ImmutableMap.of("dim0", "3", "dim1", "bar")).get(0),
PARSER.parseBatch(ImmutableMap.of("dim0", "4", "dim1", "foobarbaz")).get(0), PARSER.parseBatch(ImmutableMap.of("dim0", "4", "dim1", "foobarbaz")).get(0),
PARSER.parseBatch(ImmutableMap.of("dim0", "5", "dim1", "foo%bar")).get(0) PARSER.parseBatch(ImmutableMap.of("dim0", "5", "dim1", "foo%bar")).get(0),
PARSER.parseBatch(ImmutableMap.of("dim0", "6", "dim1", "new\nline")).get(0)
); );
public LikeFilterTest( public LikeFilterTest(
@ -160,7 +161,7 @@ public class LikeFilterTest extends BaseFilterTest
if (NullHandling.replaceWithDefault()) { if (NullHandling.replaceWithDefault()) {
assertFilterMatches( assertFilterMatches(
new LikeDimFilter("dim1", "", null, new SubstringDimExtractionFn(100, 1)), new LikeDimFilter("dim1", "", null, new SubstringDimExtractionFn(100, 1)),
ImmutableList.of("0", "1", "2", "3", "4", "5") ImmutableList.of("0", "1", "2", "3", "4", "5", "6")
); );
} else { } else {
assertFilterMatches( assertFilterMatches(
@ -184,7 +185,7 @@ public class LikeFilterTest extends BaseFilterTest
{ {
assertFilterMatches( assertFilterMatches(
new LikeDimFilter("dim1", "%", "@", null), new LikeDimFilter("dim1", "%", "@", null),
ImmutableList.of("0", "1", "2", "3", "4", "5") ImmutableList.of("0", "1", "2", "3", "4", "5", "6")
); );
} }
@ -223,4 +224,42 @@ public class LikeFilterTest extends BaseFilterTest
ImmutableList.of("2", "4") ImmutableList.of("2", "4")
); );
} }
@Test
public void testNewlineMatch()
{
assertFilterMatches(
new LikeDimFilter("dim1", "ne%", null, null),
ImmutableList.of("6")
);
assertFilterMatches(
new LikeDimFilter("dim1", "%ine", null, null),
ImmutableList.of("6")
);
assertFilterMatches(
new LikeDimFilter("dim1", "new_line", null, null),
ImmutableList.of("6")
);
}
@Test
public void testNewlineMatchWithExtractionFn()
{
assertFilterMatches(
new LikeDimFilter("dim1", "e%", null, new SubstringDimExtractionFn(1, 100)),
ImmutableList.of("6")
);
assertFilterMatches(
new LikeDimFilter("dim1", "%ine", null, new SubstringDimExtractionFn(1, 100)),
ImmutableList.of("6")
);
assertFilterMatches(
new LikeDimFilter("dim1", "ew_line", null, new SubstringDimExtractionFn(1, 100)),
ImmutableList.of("6")
);
}
} }