@@ -81,18 +81,23 @@ private boolean evaluateComparisonToken(final ComparisonNode comparisonToken, fi
81
81
comparisonToken .getValue (), data ) : comparisonToken .getValue ();
82
82
final DataType dataType = ValueUtils .getDataType (value );
83
83
final DataType fieldDataType = ValueUtils .getDataType (fieldData );
84
- return operatorService .evaluateLogicalOperator (comparisonToken .getOperator (), ContainerDataType .PRIMITIVE , fieldData ,
85
- fieldDataType , Collections .singletonList (Pair .of (value , dataType )));
84
+ return operatorService .evaluateLogicalOperator (comparisonToken .getOperator (), ContainerDataType .PRIMITIVE , fieldData , fieldDataType ,
85
+ Collections .singletonList (Pair .of (value , dataType )));
86
86
}
87
87
88
88
private boolean evaluateNumericRangeToken (final NumericRangeNode numericRangeToken , final Map <String , Object > data ) {
89
89
final Object fieldData = ValueUtils .getValueFromMap (numericRangeToken .getField (), data )
90
90
.orElseThrow (() -> new DataNotFoundException (numericRangeToken .getField ()));
91
- return operatorService .evaluateLogicalOperator (Operator .GREATER_THAN_EQUAL , ContainerDataType .PRIMITIVE , fieldData ,
92
- numericRangeToken .getFromDataType (), Collections .singletonList (
93
- Pair .of (numericRangeToken .getFromValue (), numericRangeToken .getFromDataType ()))) && operatorService .evaluateLogicalOperator (
94
- Operator .LESS_THAN_EQUAL , ContainerDataType .PRIMITIVE , fieldData , numericRangeToken .getToDataType (),
95
- Collections .singletonList (Pair .of (numericRangeToken .getToValue (), numericRangeToken .getToDataType ())));
91
+ final DataType fieldDataType = ValueUtils .getDataType (fieldData );
92
+ final List <Pair <Object , DataType >> fromValues = Collections .singletonList (
93
+ Pair .of (numericRangeToken .getFromValue (), numericRangeToken .getFromDataType ()));
94
+ final List <Pair <Object , DataType >> toValues = Collections .singletonList (
95
+ Pair .of (numericRangeToken .getToValue (), numericRangeToken .getToDataType ()));
96
+ final boolean leftResult = operatorService .evaluateLogicalOperator (Operator .GREATER_THAN_EQUAL , ContainerDataType .PRIMITIVE , fieldData ,
97
+ fieldDataType , fromValues );
98
+ final boolean rightResult = operatorService .evaluateLogicalOperator (Operator .LESS_THAN_EQUAL , ContainerDataType .PRIMITIVE , fieldData ,
99
+ fieldDataType , toValues );
100
+ return leftResult && rightResult ;
96
101
}
97
102
98
103
private boolean evaluateInToken (final InNode inToken , final Map <String , Object > data ) {
@@ -123,18 +128,18 @@ private List<EvaluatedNode> resolveArrayElements(final List<Node> items, final M
123
128
private boolean evaluateArrayToken (final ArrayNode arrayNode , final Map <String , Object > data ) {
124
129
final Object fieldData = ValueUtils .getValueFromMap (arrayNode .getField (), data )
125
130
.orElseThrow (() -> new DataNotFoundException (arrayNode .getField ()));
131
+ final DataType fieldDataType = ValueUtils .getDataType (fieldData );
126
132
final List <EvaluatedNode > items = resolveArrayElements (arrayNode .getItems (), data );
127
133
if (items
128
134
.stream ()
129
135
.map (EvaluatedNode ::getDataType ).distinct ().count () > 1 ) {
130
136
throw new HeterogeneousArrayException ();
131
137
}
132
- final DataType dataType = items .get (0 ).getDataType ();
133
138
final List <Pair <Object , DataType >> values = items
134
139
.stream ()
135
140
.map (item -> Pair .of (item .getValue (), item .getDataType ()))
136
141
.collect (Collectors .toList ());
137
- return operatorService .evaluateLogicalOperator (arrayNode .getOperator (), ContainerDataType .LIST , fieldData , dataType , values );
142
+ return operatorService .evaluateLogicalOperator (arrayNode .getOperator (), ContainerDataType .LIST , fieldData , fieldDataType , values );
138
143
}
139
144
140
145
private boolean evaluateUnaryToken (final UnaryNode unaryToken , final Map <String , Object > data ) {
0 commit comments