This is an automated email from the ASF dual-hosted git repository.
gitgabrio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new 60829671f2 [Incubator kie issues#1811] Range starting with null not
permitted (#6266)
60829671f2 is described below
commit 60829671f24edb401cda11ca84d048b09ba5f1a6
Author: AthiraHari77 <[email protected]>
AuthorDate: Mon Mar 3 17:28:30 2025 +0530
[Incubator kie issues#1811] Range starting with null not permitted (#6266)
* [incubator-kie-issues#1811] Code fix to return null when functions are
used as non literal
* [incubator-kie-issues#1820] Code fix for range starting with null
* [incubator-kie-issues#1820] WIP
* [incubator-kie-issues#1820] WIP
* [incubator-kie-issues#1820] Update test cases
* [incubator-kie-issues#1820] Update test cases
* [incubator-kie-issues#1820] Testcase update
---------
Co-authored-by: athira <[email protected]>
---
.../java/org/kie/dmn/feel/lang/ast/RangeNode.java | 4 +-
.../dmn/feel/runtime/functions/RangeFunction.java | 3 +-
.../org/kie/dmn/feel/lang/ast/RangeNodeTest.java | 22 ++++++++
.../org/kie/dmn/feel/runtime/FEELRangesTest.java | 8 ++-
.../feel/runtime/functions/RangeFunctionTest.java | 62 +++++-----------------
5 files changed, 44 insertions(+), 55 deletions(-)
diff --git
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/ast/RangeNode.java
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/ast/RangeNode.java
index 5ef569e051..c0608ec1cb 100644
---
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/ast/RangeNode.java
+++
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/lang/ast/RangeNode.java
@@ -1,4 +1,4 @@
-/**
+/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -111,7 +111,7 @@ public class RangeNode
public Range evaluate(EvaluationContext ctx) {
Object s = start.evaluate( ctx );
Object e = end.evaluate( ctx );
- if (s == null && e == null) {
+ if (s == null || e == null) {
return null;
}
diff --git
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/RangeFunction.java
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/RangeFunction.java
index fe4719167f..b4429da1a0 100644
---
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/RangeFunction.java
+++
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/RangeFunction.java
@@ -60,7 +60,6 @@ public class RangeFunction extends BaseFEELFunction {
private static EvaluationContext STUBBED;
private static final Range DEFAULT_VALUE = new
RangeImpl(Range.RangeBoundary.OPEN, BigDecimal.ZERO, BigDecimal.ZERO,
Range.RangeBoundary.OPEN);
-
private static final List<Predicate<BaseNode>> ALLOWED_NODES =
Arrays.asList(baseNode -> baseNode instanceof NullNode,
baseNode -> baseNode instanceof NumberNode,
baseNode -> baseNode instanceof StringNode,
@@ -148,7 +147,7 @@ public class RangeFunction extends BaseFEELFunction {
static Range getReturnedValue(Object left, Object right,
Range.RangeBoundary startBoundary,
Range.RangeBoundary endBoundary) {
- return (left == null && right == null) ? null :
+ return (left == null || right == null) ? null :
new RangeImpl(startBoundary, (Comparable) left, (Comparable)
right, endBoundary);
}
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/lang/ast/RangeNodeTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/lang/ast/RangeNodeTest.java
index d7f9e7e174..bc9c2b2062 100644
---
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/lang/ast/RangeNodeTest.java
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/lang/ast/RangeNodeTest.java
@@ -81,6 +81,28 @@ class RangeNodeTest {
assertThat(rangeNode.evaluate(EvaluationContextTestUtil.newEmptyEvaluationContext())).isNull();
}
+ @Test
+ void isRangeStartNullTest() {
+ BaseNode startNode = new NullNode("null");
+ BigDecimal end = BigDecimal.TEN;
+ BaseNode endNode = new NumberNode(end, end.toString());
+ RangeNode rangeNode = new RangeNode(RangeNode.IntervalBoundary.CLOSED,
RangeNode.IntervalBoundary.CLOSED,
+ startNode, endNode, "[null..10]");
+ assertThat(rangeNode).isNotNull();
+
assertThat(rangeNode.evaluate(EvaluationContextTestUtil.newEmptyEvaluationContext())).isNull();
+ }
+
+ @Test
+ void isRangeEndNullTest() {
+ BigDecimal start = BigDecimal.TEN;
+ BaseNode startNode = new NumberNode(start, start.toString());
+ BaseNode endNode = new NullNode("null");
+ RangeNode rangeNode = new RangeNode(RangeNode.IntervalBoundary.CLOSED,
RangeNode.IntervalBoundary.CLOSED,
+ startNode, endNode, "[10..null]");
+ assertThat(rangeNode).isNotNull();
+
assertThat(rangeNode.evaluate(EvaluationContextTestUtil.newEmptyEvaluationContext())).isNull();
+ }
+
private static Collection<RangeNode> ascendingRanges() {
return Arrays.asList(
getNumericRangeNode("[1..3]", BigDecimal.ONE,
BigDecimal.valueOf(3), RangeNode.IntervalBoundary.CLOSED,
RangeNode.IntervalBoundary.CLOSED),
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELRangesTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELRangesTest.java
index 506ae00c07..462e4a3cfb 100644
---
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELRangesTest.java
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELRangesTest.java
@@ -1,4 +1,4 @@
-/**
+/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -49,7 +49,11 @@ public class FEELRangesTest extends BaseFEELTest {
{"(>=1)", new RangeImpl(Range.RangeBoundary.CLOSED,
BigDecimal.ONE, new UndefinedValueComparable(), Range.RangeBoundary.OPEN),
null},
{"(<1)", new RangeImpl(Range.RangeBoundary.OPEN, new
UndefinedValueComparable(), BigDecimal.ONE, Range.RangeBoundary.OPEN), null},
{"(<=1)", new RangeImpl(Range.RangeBoundary.OPEN, new
UndefinedValueComparable(), BigDecimal.ONE, Range.RangeBoundary.CLOSED), null},
- {"(null..10)", new RangeImpl(Range.RangeBoundary.OPEN, null,
BigDecimal.valueOf(10), Range.RangeBoundary.OPEN), null},
+ {"(null..10)", null, null},
+ {"(10..null)", null, null},
+ {"(null..date(\"1978-10-13\"))", null, null},
+ {"(\"a\"..null)", null, null},
+ {"(null..null)", null, null},
{"[null..null]", null, null},
{"[1..2]", new RangeImpl(Range.RangeBoundary.CLOSED,
BigDecimal.ONE, BigDecimal.valueOf(2), Range.RangeBoundary.CLOSED), null},
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/RangeFunctionTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/RangeFunctionTest.java
index 93f05e4378..7da85c9505 100644
---
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/RangeFunctionTest.java
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/RangeFunctionTest.java
@@ -1,4 +1,4 @@
-/**
+/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -74,35 +74,17 @@ class RangeFunctionTest {
@Test
void invoke_LeftNull() {
String from = "(..2)";
- FunctionTestUtil.assertResult(rangeFunction.invoke(from),
- new RangeImpl(Range.RangeBoundary.OPEN,
null, BigDecimal.valueOf(2),
- Range.RangeBoundary.OPEN),
- from);
+ FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
from = "(..\"z\")";
- FunctionTestUtil.assertResult(rangeFunction.invoke(from),
- new RangeImpl(Range.RangeBoundary.OPEN,
null, "z", Range.RangeBoundary.OPEN),
- from);
+ FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
from = "(..\"yz\")";
- FunctionTestUtil.assertResult(rangeFunction.invoke(from),
- new RangeImpl(Range.RangeBoundary.OPEN,
null, "yz", Range.RangeBoundary.OPEN),
- from);
+ FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
from = "(..date(\"1978-10-13\"))";
- FunctionTestUtil.assertResult(rangeFunction.invoke(from),
- new RangeImpl(Range.RangeBoundary.OPEN,
null, LocalDate.of(1978, 10, 13),
- Range.RangeBoundary.OPEN),
- from);
+ FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
from = "(..duration(\"P3DT20H14M\"))";
- FunctionTestUtil.assertResult(rangeFunction.invoke(from),
- new RangeImpl(Range.RangeBoundary.OPEN,
null, Duration.parse("P3DT20H14M"),
- Range.RangeBoundary.OPEN),
- from);
+ FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
from = "(..duration(\"P2Y6M\"))";
- FunctionTestUtil.assertResult(rangeFunction.invoke(from),
- new RangeImpl(Range.RangeBoundary.OPEN,
- null,
- new
ComparablePeriod(Period.parse("P2Y6M")),
- Range.RangeBoundary.OPEN),
- from);
+ FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
from = "[..2]";
FunctionTestUtil.assertResultError(rangeFunction.invoke(from),
InvalidParametersEvent.class,
@@ -112,35 +94,17 @@ class RangeFunctionTest {
@Test
void invoke_RightNull() {
String from = "(1..)";
- FunctionTestUtil.assertResult(rangeFunction.invoke(from),
- new RangeImpl(Range.RangeBoundary.OPEN,
BigDecimal.ONE, null,
- Range.RangeBoundary.OPEN),
- from);
+ FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
from = "(\"a\"..)";
- FunctionTestUtil.assertResult(rangeFunction.invoke(from),
- new RangeImpl(Range.RangeBoundary.OPEN,
"a", null, Range.RangeBoundary.OPEN),
- from);
+ FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
from = "(\"ab\"..)";
- FunctionTestUtil.assertResult(rangeFunction.invoke(from),
- new RangeImpl(Range.RangeBoundary.OPEN,
"ab", null, Range.RangeBoundary.OPEN),
- from);
+ FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
from = "(date(\"1978-09-12\")..)";
- FunctionTestUtil.assertResult(rangeFunction.invoke(from),
- new RangeImpl(Range.RangeBoundary.OPEN,
LocalDate.of(1978, 9, 12), null,
- Range.RangeBoundary.OPEN),
- from);
+ FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
from = "(duration(\"P2DT20H14M\")..)";
- FunctionTestUtil.assertResult(rangeFunction.invoke(from),
- new RangeImpl(Range.RangeBoundary.OPEN,
Duration.parse("P2DT20H14M"), null,
- Range.RangeBoundary.OPEN),
- from);
+ FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
from = "(duration(\"P1Y6M\")..)";
- FunctionTestUtil.assertResult(rangeFunction.invoke(from),
- new RangeImpl(Range.RangeBoundary.OPEN,
- new
ComparablePeriod(Period.parse("P1Y6M")),
- null,
- Range.RangeBoundary.OPEN),
- from);
+ FunctionTestUtil.assertResult(rangeFunction.invoke(from),null,from);
from = "[1..]";
FunctionTestUtil.assertResultError(rangeFunction.invoke(from),
InvalidParametersEvent.class,
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]