@@ -81,18 +81,23 @@ private boolean evaluateComparisonToken(final ComparisonNode comparisonToken, fi
8181 comparisonToken .getValue (), data ) : comparisonToken .getValue ();
8282 final DataType dataType = ValueUtils .getDataType (value );
8383 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 )));
8686 }
8787
8888 private boolean evaluateNumericRangeToken (final NumericRangeNode numericRangeToken , final Map <String , Object > data ) {
8989 final Object fieldData = ValueUtils .getValueFromMap (numericRangeToken .getField (), data )
9090 .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 ;
96101 }
97102
98103 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
123128 private boolean evaluateArrayToken (final ArrayNode arrayNode , final Map <String , Object > data ) {
124129 final Object fieldData = ValueUtils .getValueFromMap (arrayNode .getField (), data )
125130 .orElseThrow (() -> new DataNotFoundException (arrayNode .getField ()));
131+ final DataType fieldDataType = ValueUtils .getDataType (fieldData );
126132 final List <EvaluatedNode > items = resolveArrayElements (arrayNode .getItems (), data );
127133 if (items
128134 .stream ()
129135 .map (EvaluatedNode ::getDataType ).distinct ().count () > 1 ) {
130136 throw new HeterogeneousArrayException ();
131137 }
132- final DataType dataType = items .get (0 ).getDataType ();
133138 final List <Pair <Object , DataType >> values = items
134139 .stream ()
135140 .map (item -> Pair .of (item .getValue (), item .getDataType ()))
136141 .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 );
138143 }
139144
140145 private boolean evaluateUnaryToken (final UnaryNode unaryToken , final Map <String , Object > data ) {
0 commit comments