This is an automated email from the ASF dual-hosted git repository. mattyb149 pushed a commit to branch support/nifi-1.x in repository https://gitbox.apache.org/repos/asf/nifi.git
commit eeafa8354a4448020a6f936825fa47733a92bb71 Author: ravisingh <ravisingh...@gmail.com> AuthorDate: Wed Feb 28 19:43:07 2024 -0800 NIFI-12828: Added Mapping for BIT type to return INT and handled boolean case for postgres Signed-off-by: Matt Burgess <mattyb...@apache.org> --- .../org/apache/nifi/serialization/record/util/DataTypeUtils.java | 3 ++- .../org/apache/nifi/serialization/record/TestDataTypeUtils.java | 2 +- .../nifi/db/schemaregistry/DatabaseTableSchemaRegistry.java | 8 +++++++- 3 files changed, 10 insertions(+), 3 deletions(-) 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 60d6d6bb88..fe457c75de 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 @@ -2180,8 +2180,9 @@ public class DataTypeUtils { switch (sqlType) { case Types.BIGINT: return RecordFieldType.BIGINT.getDataType(); - case Types.BOOLEAN: case Types.BIT: + return RecordFieldType.INT.getDataType(); + case Types.BOOLEAN: return RecordFieldType.BOOLEAN.getDataType(); case Types.TINYINT: return RecordFieldType.BYTE.getDataType(); 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 f2c214ae23..439637eab0 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 @@ -493,7 +493,7 @@ public class TestDataTypeUtils { @Test public void testGetDataTypeFromSQLTypeValue() { assertEquals(RecordFieldType.STRING.getDataType(), DataTypeUtils.getDataTypeFromSQLTypeValue(Types.CLOB)); - assertEquals(RecordFieldType.BOOLEAN.getDataType(), DataTypeUtils.getDataTypeFromSQLTypeValue(Types.BIT)); + 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 f9a1174ff2..cca7bc8d46 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(