Skip to content

Commit 10af73a

Browse files
authored
Issue1469: Return false when performing 'in' on valueset with null code (#1470)
1 parent b4b0701 commit 10af73a

File tree

4 files changed

+59
-3
lines changed

4 files changed

+59
-3
lines changed

Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/AnyInValueSetEvaluator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,20 @@
66
public class AnyInValueSetEvaluator {
77

88
public static Object internalEvaluate(Object codes, ValueSetRef valueSetRef, Object valueset, State state) {
9+
if (codes == null) {
10+
return false;
11+
}
12+
913
Object vs = null;
1014
if (valueSetRef != null) {
1115
vs = ValueSetRefEvaluator.toValueSet(state, valueSetRef);
1216
} else if (valueset != null) {
1317
vs = valueset;
1418
}
1519

16-
if (codes == null || vs == null) return null;
20+
if (vs == null) {
21+
return null;
22+
}
1723

1824
if (codes instanceof Iterable) {
1925
Object result;

Src/java/engine/src/main/java/org/opencds/cqf/cql/engine/elm/executing/InValueSetEvaluator.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ The in (Valueset) operators determine whether or not a given code is in a partic
2222

2323
public class InValueSetEvaluator {
2424
public static Object inValueSet(Object code, Object valueset, State state) {
25-
26-
if (code == null || valueset == null) {
25+
if (code == null) {
26+
return false;
27+
}
28+
if (valueset == null) {
2729
return null;
2830
}
2931

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.opencds.cqf.cql.engine.elm.executing;
2+
3+
import static org.junit.jupiter.api.Assertions.assertFalse;
4+
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
5+
6+
import org.hl7.elm.r1.ValueSetRef;
7+
import org.junit.jupiter.api.Test;
8+
import org.opencds.cqf.cql.engine.execution.Environment;
9+
import org.opencds.cqf.cql.engine.execution.State;
10+
import org.opencds.cqf.cql.engine.runtime.ValueSet;
11+
12+
public class AnyInValueSetEvaluatorTest {
13+
14+
@Test
15+
void issue1469FalseOnNullCode() {
16+
var env = new Environment(null);
17+
var state = new State(env);
18+
var valueSet = new ValueSet();
19+
var valueSetRef = new ValueSetRef();
20+
21+
Object actual = AnyInValueSetEvaluator.internalEvaluate(null, valueSetRef, valueSet, state);
22+
assertInstanceOf(Boolean.class, actual);
23+
assertFalse((Boolean) actual);
24+
}
25+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.opencds.cqf.cql.engine.elm.executing;
2+
3+
import static org.junit.jupiter.api.Assertions.assertFalse;
4+
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
5+
6+
import org.junit.jupiter.api.Test;
7+
import org.opencds.cqf.cql.engine.execution.Environment;
8+
import org.opencds.cqf.cql.engine.execution.State;
9+
import org.opencds.cqf.cql.engine.runtime.ValueSet;
10+
11+
public class InValueSetEvaluatorTest {
12+
13+
@Test
14+
void issue1469FalseOnNullCode() {
15+
var env = new Environment(null);
16+
var state = new State(env);
17+
var valueSet = new ValueSet();
18+
19+
Object actual = InValueSetEvaluator.inValueSet(null, valueSet, state);
20+
assertInstanceOf(Boolean.class, actual);
21+
assertFalse((Boolean) actual);
22+
}
23+
}

0 commit comments

Comments
 (0)