This is an automated email from the ASF dual-hosted git repository.
pvillard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new b039606 NIFI-8297: Report incompatible value if it doesn't fit in an
Integer
b039606 is described below
commit b039606cf84e0a9f6c934b3d7a1ce02fb0b47642
Author: Matthew Burgess <[email protected]>
AuthorDate: Wed Mar 10 12:32:06 2021 -0500
NIFI-8297: Report incompatible value if it doesn't fit in an Integer
Signed-off-by: Pierre Villard <[email protected]>
This closes #4886.
---
.../nifi/serialization/record/util/DataTypeUtils.java | 8 ++++++++
.../nifi/serialization/record/TestDataTypeUtils.java | 16 ++++++++++++++++
2 files changed, 24 insertions(+)
diff --git
a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/util/DataTypeUtils.java
b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/util/DataTypeUtils.java
index 61e50ff..ede3475 100644
---
a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/util/DataTypeUtils.java
+++
b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/util/DataTypeUtils.java
@@ -1598,6 +1598,14 @@ public class DataTypeUtils {
}
public static boolean isIntegerTypeCompatible(final Object value) {
+ if (value instanceof Number) {
+ try {
+ Math.toIntExact(((Number) value).longValue());
+ return true;
+ } catch (ArithmeticException ae) {
+ return false;
+ }
+ }
return isNumberTypeCompatible(value, s -> isIntegral(s,
Integer.MIN_VALUE, Integer.MAX_VALUE));
}
diff --git
a/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/TestDataTypeUtils.java
b/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/TestDataTypeUtils.java
index c89e656..a493609 100644
---
a/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/TestDataTypeUtils.java
+++
b/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/TestDataTypeUtils.java
@@ -430,6 +430,22 @@ public class TestDataTypeUtils {
}
@Test
+ public void testIsCompatibleDataTypeInteger() {
+ final DataType dataType = RecordFieldType.INT.getDataType();
+ assertTrue(DataTypeUtils.isCompatibleDataType(new Integer("1234567"),
dataType));
+ assertTrue(DataTypeUtils.isCompatibleDataType("1234567", dataType));
+ assertFalse(DataTypeUtils.isCompatibleDataType(new
BigInteger("12345678901234567890"), dataType));
+ assertFalse(DataTypeUtils.isCompatibleDataType(1234567890123456789L,
dataType));
+ assertTrue(DataTypeUtils.isCompatibleDataType(1, dataType));
+ assertTrue(DataTypeUtils.isCompatibleDataType((short) 1, dataType));
+ assertFalse(DataTypeUtils.isCompatibleDataType("12345678901234567890",
dataType));
+ assertTrue(DataTypeUtils.isCompatibleDataType(3.1f, dataType));
+ assertTrue(DataTypeUtils.isCompatibleDataType(3.0, dataType));
+ assertFalse(DataTypeUtils.isCompatibleDataType("1234567XYZ",
dataType));
+ assertFalse(DataTypeUtils.isCompatibleDataType(new Long[]{1L, 2L},
dataType));
+ }
+
+ @Test
public void testIsCompatibleDataTypeArrayDifferentElementTypes() {
Object[] array = new Object[]{"2", 1};
assertTrue(DataTypeUtils.isCompatibleDataType(array,
RecordFieldType.ARRAY.getArrayDataType(RecordFieldType.INT.getDataType())));