mirror of https://github.com/apache/druid.git
Additional ExtractionFn null-handling adjustments.
Followup to comments on #2771.
This commit is contained in:
parent
18b9ea62cf
commit
e060a9f283
|
@ -60,8 +60,13 @@ public class MatchingDimExtractionFn extends DimExtractionFn
|
||||||
@Override
|
@Override
|
||||||
public String apply(String dimValue)
|
public String apply(String dimValue)
|
||||||
{
|
{
|
||||||
Matcher matcher = pattern.matcher(Strings.nullToEmpty(dimValue));
|
if (Strings.isNullOrEmpty(dimValue)) {
|
||||||
return matcher.find() ? Strings.emptyToNull(dimValue) : null;
|
// We'd return null whether or not the pattern matched
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Matcher matcher = pattern.matcher(dimValue);
|
||||||
|
return matcher.find() ? dimValue : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonProperty("expr")
|
@JsonProperty("expr")
|
||||||
|
|
|
@ -104,6 +104,20 @@ public class JavaScriptExtractionFnTest
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testJavascriptIsNull()
|
||||||
|
{
|
||||||
|
String function = "function(x) { if (x == null) { return 'yes'; } else { return 'no' } }";
|
||||||
|
ExtractionFn extractionFn = new JavaScriptExtractionFn(function, false);
|
||||||
|
|
||||||
|
Assert.assertEquals("yes", extractionFn.apply((String) null));
|
||||||
|
Assert.assertEquals("yes", extractionFn.apply((Object) null));
|
||||||
|
Assert.assertEquals("yes", extractionFn.apply(""));
|
||||||
|
Assert.assertEquals("no", extractionFn.apply("abc"));
|
||||||
|
Assert.assertEquals("no", extractionFn.apply(new Object()));
|
||||||
|
Assert.assertEquals("no", extractionFn.apply(1));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testJavaScriptPorterStemmer()
|
public void testJavaScriptPorterStemmer()
|
||||||
{
|
{
|
||||||
|
|
|
@ -116,12 +116,24 @@ public class RegexDimExtractionFnTest
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testMissingValueReplacementFromNullAndEmpty()
|
public void testMissingValueReplacementWhenPatternDoesNotMatchNull()
|
||||||
{
|
{
|
||||||
String regex = "(bob)";
|
String regex = "(bob)";
|
||||||
ExtractionFn extractionFn = new RegexDimExtractionFn(regex, true, "NO MATCH");
|
ExtractionFn extractionFn = new RegexDimExtractionFn(regex, true, "NO MATCH");
|
||||||
Assert.assertEquals("NO MATCH", extractionFn.apply(""));
|
Assert.assertEquals("NO MATCH", extractionFn.apply(""));
|
||||||
Assert.assertEquals("NO MATCH", extractionFn.apply(null));
|
Assert.assertEquals("NO MATCH", extractionFn.apply(null));
|
||||||
|
Assert.assertEquals("NO MATCH", extractionFn.apply("abc"));
|
||||||
|
Assert.assertEquals("bob", extractionFn.apply("bob"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMissingValueReplacementWhenPatternMatchesNull()
|
||||||
|
{
|
||||||
|
String regex = "^()$";
|
||||||
|
ExtractionFn extractionFn = new RegexDimExtractionFn(regex, true, "NO MATCH");
|
||||||
|
Assert.assertEquals(null, extractionFn.apply(""));
|
||||||
|
Assert.assertEquals(null, extractionFn.apply(null));
|
||||||
|
Assert.assertEquals("NO MATCH", extractionFn.apply("abc"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -133,6 +145,7 @@ public class RegexDimExtractionFnTest
|
||||||
Assert.assertEquals(null, extractionFn.apply(""));
|
Assert.assertEquals(null, extractionFn.apply(""));
|
||||||
Assert.assertEquals(null, extractionFn.apply("abc"));
|
Assert.assertEquals(null, extractionFn.apply("abc"));
|
||||||
Assert.assertEquals(null, extractionFn.apply("123"));
|
Assert.assertEquals(null, extractionFn.apply("123"));
|
||||||
|
Assert.assertEquals("bob", extractionFn.apply("bobby"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue