Skip to content

Commit

Permalink
Support BigDecimal data type in expressions (#4930)
Browse files Browse the repository at this point in the history
* Support BigDecimal data type in expressions

Signed-off-by: Kondaka <krishkdk@amazon.com>

* Removed unused import

Signed-off-by: Kondaka <krishkdk@amazon.com>

---------

Signed-off-by: Kondaka <krishkdk@amazon.com>
  • Loading branch information
kkondaka committed Sep 27, 2024
1 parent 891b228 commit a4460cc
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,7 @@ EscapeSequence
DataTypes
: INTEGER
| BOOLEAN
| BIG_DECIMAL
| LONG
| MAP
| ARRAY
Expand Down Expand Up @@ -339,6 +340,7 @@ EXPONENTLETTER
;

INTEGER: 'integer';
BIG_DECIMAL: 'big_decimal';
BOOLEAN: 'boolean';
LONG : 'long';
DOUBLE : 'double';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import javax.inject.Named;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
Expand All @@ -26,6 +27,7 @@ public Map<Class<? extends Serializable>, Function<Object, Object>> literalTypeC
Long.class, Function.identity(),
ArrayList.class, Function.identity(),
LinkedHashMap.class, Function.identity(),
BigDecimal.class, Function.identity(),
Double.class, o -> ((Double) o).floatValue()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.opensearch.dataprepper.expression.util.TestObject;
import org.opensearch.dataprepper.model.event.Event;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -113,6 +114,19 @@ void testCoerceTerminalNodeFloatType() {
assertThat(result, equalTo(testFloat));
}

@Test
void testCoerceTerminalNodeBigDecimalType() {
when(token.getType()).thenReturn(DataPrepperExpressionParser.JsonPointer);
final BigDecimal testBigDecimal = new BigDecimal(new Random().nextFloat());
when(terminalNode.getSymbol()).thenReturn(token);
when(terminalNode.getText()).thenReturn("/key");

final Event testEvent = createTestEvent(Map.of("key", testBigDecimal));
final Object result = objectUnderTest.coercePrimaryTerminalNode(terminalNode, testEvent);
assertThat(result, instanceOf(BigDecimal.class));
assertThat(result, equalTo(testBigDecimal));
}

@ParameterizedTest
@ValueSource(strings={"integer", "boolean", "long", "string", "double", "map", "array"})
void testCoerceTerminalNodeDataTypesType(String testString) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.when;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -71,6 +72,7 @@ private static Stream<Arguments> getTypeOfTestData() {
List<Integer> testArrayList = new ArrayList<Integer>();
testArrayList.add(1);
testArrayList.add(2);
BigDecimal bigDecimalValue = new BigDecimal(1.222);
return Stream.of(
Arguments.of(2, "integer", true),
Arguments.of("testString", "string", true),
Expand All @@ -86,6 +88,8 @@ private static Stream<Arguments> getTypeOfTestData() {
Arguments.of("testString", "double", false),
Arguments.of(2, "boolean", false),
Arguments.of(2L, "map", false),
Arguments.of(2L, "big_decimal", false),
Arguments.of(bigDecimalValue, "big_decimal", true),
Arguments.of(2, "array", false)
);
}
Expand Down

0 comments on commit a4460cc

Please sign in to comment.