You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by jo...@apache.org on 2021/03/17 22:07:22 UTC
[nifi] 02/03: NIFI-8297: Report incompatible value if it doesn't
fit in an Integer
This is an automated email from the ASF dual-hosted git repository.
joewitt pushed a commit to branch support/nifi-1.13
in repository https://gitbox.apache.org/repos/asf/nifi.git
commit eb0442cbe497313ca5402d981bf8b4e85bac3f09
Author: Matthew Burgess <ma...@apache.org>
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 <pi...@gmail.com>
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())));