Bug fix when specifying a JEXL expression for a field that doesn't exist: we should treat the whole expression as false, but we were rethrowing the JEXL exception in this case. Added integration test to cover this in SelectVariants
This commit is contained in:
parent
d7bf74fb7e
commit
279dff9f81
|
|
@ -268,6 +268,11 @@ class JEXLMap implements Map<VariantContextUtils.JexlVCMatchExp, Boolean> {
|
||||||
// treat errors as no match
|
// treat errors as no match
|
||||||
jexl.put(exp, value == null ? false : value);
|
jexl.put(exp, value == null ? false : value);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
// if exception happens because variable is undefined (i.e. field in expression is not present), evaluate to FALSE
|
||||||
|
// todo - might be safer if we explicitly checked for an exception type, but Apache's API doesn't seem to have that ability
|
||||||
|
if (e.getMessage().contains("undefined variable"))
|
||||||
|
jexl.put(exp,false);
|
||||||
|
else
|
||||||
throw new UserException.CommandLineException(String.format("Invalid JEXL expression detected for %s with message %s", exp.name, e.getMessage()));
|
throw new UserException.CommandLineException(String.format("Invalid JEXL expression detected for %s with message %s", exp.name, e.getMessage()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,19 @@ public class SelectVariantsIntegrationTest extends WalkerTest {
|
||||||
executeTest("testComplexSelection--" + testfile, spec);
|
executeTest("testComplexSelection--" + testfile, spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNonExistingFieldSelection() {
|
||||||
|
String testfile = validationDataLocation + "test.filtered.maf_annotated.vcf";
|
||||||
|
|
||||||
|
WalkerTestSpec spec = new WalkerTestSpec(
|
||||||
|
baseTestString(" -env -ef -select 'foo!=0||DP>0' --variant " + testfile),
|
||||||
|
1,
|
||||||
|
Arrays.asList("44e77cea624cfff2b8acc3a4b30485cb") // should yield empty vcf because the foo!=0 will yield complete expression false
|
||||||
|
);
|
||||||
|
spec.disableShadowBCF();
|
||||||
|
executeTest("testNonExistingSelection--" + testfile, spec);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSampleExclusion() {
|
public void testSampleExclusion() {
|
||||||
String testfile = validationDataLocation + "test.filtered.maf_annotated.vcf";
|
String testfile = validationDataLocation + "test.filtered.maf_annotated.vcf";
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue