From 8346bd7d0f617f73660cc79a02798ddbe484606d Mon Sep 17 00:00:00 2001 From: ravisingh Date: Wed, 28 Feb 2024 19:43:07 -0800 Subject: [PATCH] NIFI-12828: Added Mapping for BIT type to return INT and handled boolean case for postgres Signed-off-by: Matt Burgess This closes #8445 --- .../nifi/serialization/record/util/DataTypeUtils.java | 2 ++ .../nifi/serialization/record/TestDataTypeUtils.java | 1 + .../db/schemaregistry/DatabaseTableSchemaRegistry.java | 8 +++++++- 3 files changed, 10 insertions(+), 1 deletion(-) 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 d45b5053c3..cd7fe2da82 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 @@ -1917,6 +1917,8 @@ public class DataTypeUtils { switch (sqlType) { case Types.BIGINT: return RecordFieldType.BIGINT.getDataType(); + case Types.BIT: + return RecordFieldType.INT.getDataType(); case Types.BOOLEAN: return RecordFieldType.BOOLEAN.getDataType(); case Types.TINYINT: 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 6aca3af079..72f3a315bf 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 @@ -558,6 +558,7 @@ public class TestDataTypeUtils { @Test public void testGetDataTypeFromSQLTypeValue() { assertEquals(RecordFieldType.STRING.getDataType(), DataTypeUtils.getDataTypeFromSQLTypeValue(Types.CLOB)); + assertEquals(RecordFieldType.INT.getDataType(), DataTypeUtils.getDataTypeFromSQLTypeValue(Types.BIT)); assertEquals(RecordFieldType.ARRAY.getArrayDataType(RecordFieldType.BYTE.getDataType()), DataTypeUtils.getDataTypeFromSQLTypeValue(Types.BLOB)); assertEquals(RecordFieldType.STRING.getDataType(), DataTypeUtils.getDataTypeFromSQLTypeValue(Types.CHAR)); } diff --git a/nifi-nar-bundles/nifi-standard-services/nifi-db-schema-registry-bundle/nifi-db-schema-registry-service/src/main/java/org/apache/nifi/db/schemaregistry/DatabaseTableSchemaRegistry.java b/nifi-nar-bundles/nifi-standard-services/nifi-db-schema-registry-bundle/nifi-db-schema-registry-service/src/main/java/org/apache/nifi/db/schemaregistry/DatabaseTableSchemaRegistry.java index b0ee1cb4c2..caf5888b11 100644 --- a/nifi-nar-bundles/nifi-standard-services/nifi-db-schema-registry-bundle/nifi-db-schema-registry-service/src/main/java/org/apache/nifi/db/schemaregistry/DatabaseTableSchemaRegistry.java +++ b/nifi-nar-bundles/nifi-standard-services/nifi-db-schema-registry-bundle/nifi-db-schema-registry-service/src/main/java/org/apache/nifi/db/schemaregistry/DatabaseTableSchemaRegistry.java @@ -157,7 +157,13 @@ public class DatabaseTableSchemaRegistry extends AbstractControllerService imple // COLUMN_DEF must be read first to work around Oracle bug, see NIFI-4279 for details final String defaultValue = columnResultSet.getString("COLUMN_DEF"); final String columnName = columnResultSet.getString("COLUMN_NAME"); - final int dataType = columnResultSet.getInt("DATA_TYPE"); + String typeName = columnResultSet.getString("TYPE_NAME"); + final int dataType; + if (typeName.equalsIgnoreCase("bool")) { + dataType = 16; + } else { + dataType = columnResultSet.getInt("DATA_TYPE"); + } final String nullableValue = columnResultSet.getString("IS_NULLABLE"); final boolean isNullable = "YES".equalsIgnoreCase(nullableValue) || nullableValue.isEmpty(); return new RecordField(