11package com .github .sidhant92 .boolparser .application ;
22
3+ import java .util .Collections ;
34import java .util .List ;
45import java .util .Map ;
56import java .util .Optional ;
67import java .util .stream .Collectors ;
8+ import org .apache .commons .lang3 .tuple .Pair ;
79import com .github .sidhant92 .boolparser .constant .ContainerDataType ;
810import com .github .sidhant92 .boolparser .constant .DataType ;
911import com .github .sidhant92 .boolparser .constant .Operator ;
@@ -77,27 +79,32 @@ private boolean evaluateComparisonToken(final ComparisonNode comparisonToken, fi
7779 () -> new DataNotFoundException (comparisonToken .getField ()));
7880 final Object value = comparisonToken .isNullCheck () ? "null" : comparisonToken .getValue () instanceof ArithmeticBaseNode ? arithmeticExpressionEvaluator .evaluate (
7981 comparisonToken .getValue (), data ) : comparisonToken .getValue ();
80- return operatorService .evaluateLogicalOperator (comparisonToken .getOperator (), ContainerDataType .PRIMITIVE , comparisonToken .getDataType (),
81- fieldData , value );
82+ final DataType dataType = ValueUtils .getDataType (value );
83+ final DataType fieldDataType = ValueUtils .getDataType (fieldData );
84+ return operatorService .evaluateLogicalOperator (comparisonToken .getOperator (), ContainerDataType .PRIMITIVE , fieldData ,
85+ fieldDataType , Collections .singletonList (Pair .of (value , dataType )));
8286 }
8387
8488 private boolean evaluateNumericRangeToken (final NumericRangeNode numericRangeToken , final Map <String , Object > data ) {
8589 final Object fieldData = ValueUtils .getValueFromMap (numericRangeToken .getField (), data )
8690 .orElseThrow (() -> new DataNotFoundException (numericRangeToken .getField ()));
87- return operatorService .evaluateLogicalOperator (Operator .GREATER_THAN_EQUAL , ContainerDataType .PRIMITIVE , numericRangeToken .getFromDataType (),
88- fieldData , numericRangeToken .getFromValue ()) && operatorService .evaluateLogicalOperator (
89- Operator .LESS_THAN_EQUAL , ContainerDataType .PRIMITIVE , numericRangeToken .getToDataType (), fieldData , numericRangeToken .getToValue ());
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 ())));
9096 }
9197
9298 private boolean evaluateInToken (final InNode inToken , final Map <String , Object > data ) {
9399 final Object fieldData = ValueUtils .getValueFromMap (inToken .getField (), data )
94100 .orElseThrow (() -> new DataNotFoundException (inToken .getField ()));
95101 final List <EvaluatedNode > items = resolveArrayElements (inToken .getItems (), data );
96102 final DataType dataType = ValueUtils .getDataType (fieldData );
97- final Object [] values = items
103+ final List < Pair < Object , DataType >> values = items
98104 .stream ()
99- .map (EvaluatedNode ::getValue ).toArray ();
100- return operatorService .evaluateLogicalOperator (Operator .IN , ContainerDataType .PRIMITIVE , dataType , fieldData , values );
105+ .map (item -> Pair .of (item .getValue (), item .getDataType ()))
106+ .collect (Collectors .toList ());
107+ return operatorService .evaluateLogicalOperator (Operator .IN , ContainerDataType .PRIMITIVE , fieldData , dataType , values );
101108 }
102109
103110 private List <EvaluatedNode > resolveArrayElements (final List <Node > items , final Map <String , Object > data ) {
@@ -123,10 +130,11 @@ private boolean evaluateArrayToken(final ArrayNode arrayNode, final Map<String,
123130 throw new HeterogeneousArrayException ();
124131 }
125132 final DataType dataType = items .get (0 ).getDataType ();
126- final Object [] values = items
133+ final List < Pair < Object , DataType >> values = items
127134 .stream ()
128- .map (EvaluatedNode ::getValue ).toArray ();
129- return operatorService .evaluateLogicalOperator (arrayNode .getOperator (), ContainerDataType .LIST , dataType , fieldData , values );
135+ .map (item -> Pair .of (item .getValue (), item .getDataType ()))
136+ .collect (Collectors .toList ());
137+ return operatorService .evaluateLogicalOperator (arrayNode .getOperator (), ContainerDataType .LIST , fieldData , dataType , values );
130138 }
131139
132140 private boolean evaluateUnaryToken (final UnaryNode unaryToken , final Map <String , Object > data ) {
0 commit comments