Repository: nifi Updated Branches: refs/heads/master f4ac8d75c -> 8d46041a1
NIFI-1319 Updating JdbcCommon to check meta.isSigned(i) to determine if Avro schema should use a long or int Signed-off-by: Bryan Bende <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/8d46041a Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/8d46041a Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/8d46041a Branch: refs/heads/master Commit: 8d46041a134fa134fec59ef384d32d19fd1bfb96 Parents: f4ac8d7 Author: Bryan Bende <[email protected]> Authored: Mon Dec 21 16:55:32 2015 -0500 Committer: Bryan Bende <[email protected]> Committed: Wed Dec 23 10:03:30 2015 -0500 ---------------------------------------------------------------------- .../processors/standard/util/JdbcCommon.java | 7 ++ .../standard/util/TestJdbcCommon.java | 68 ++++++++++++++++++++ 2 files changed, 75 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/8d46041a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JdbcCommon.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JdbcCommon.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JdbcCommon.java index ac95c8b..1a81b4b 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JdbcCommon.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JdbcCommon.java @@ -154,6 +154,13 @@ public class JdbcCommon { break; case INTEGER: + if (meta.isSigned(i)) { + builder.name(meta.getColumnName(i)).type().unionOf().nullBuilder().endNull().and().intType().endUnion().noDefault(); + } else { + builder.name(meta.getColumnName(i)).type().unionOf().nullBuilder().endNull().and().longType().endUnion().noDefault(); + } + break; + case SMALLINT: case TINYINT: builder.name(meta.getColumnName(i)).type().unionOf().nullBuilder().endNull().and().intType().endUnion().noDefault(); http://git-wip-us.apache.org/repos/asf/nifi/blob/8d46041a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/util/TestJdbcCommon.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/util/TestJdbcCommon.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/util/TestJdbcCommon.java index b8fcfed..266d426 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/util/TestJdbcCommon.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/util/TestJdbcCommon.java @@ -183,6 +183,74 @@ public class TestJdbcCommon { } } + @Test + public void testSignedIntShouldBeInt() throws SQLException, IllegalArgumentException, IllegalAccessException { + final ResultSetMetaData metadata = Mockito.mock(ResultSetMetaData.class); + Mockito.when(metadata.getColumnCount()).thenReturn(1); + Mockito.when(metadata.getColumnType(1)).thenReturn(Types.INTEGER); + Mockito.when(metadata.isSigned(1)).thenReturn(true); + Mockito.when(metadata.getColumnName(1)).thenReturn("Col1"); + Mockito.when(metadata.getTableName(1)).thenReturn("Table1"); + + final ResultSet rs = Mockito.mock(ResultSet.class); + Mockito.when(rs.getMetaData()).thenReturn(metadata); + + Schema schema = JdbcCommon.createSchema(rs); + Assert.assertNotNull(schema); + + Schema.Field field = schema.getField("Col1"); + Schema fieldSchema = field.schema(); + Assert.assertEquals(2, fieldSchema.getTypes().size()); + + boolean foundIntSchema = false; + boolean foundNullSchema = false; + + for (Schema type : fieldSchema.getTypes()) { + if (type.getType().equals(Schema.Type.INT)) { + foundIntSchema = true; + } else if (type.getType().equals(Schema.Type.NULL)) { + foundNullSchema = true; + } + } + + Assert.assertTrue(foundIntSchema); + Assert.assertTrue(foundNullSchema); + } + + @Test + public void testUnsignedIntShouldBeLong() throws SQLException, IllegalArgumentException, IllegalAccessException { + final ResultSetMetaData metadata = Mockito.mock(ResultSetMetaData.class); + Mockito.when(metadata.getColumnCount()).thenReturn(1); + Mockito.when(metadata.getColumnType(1)).thenReturn(Types.INTEGER); + Mockito.when(metadata.isSigned(1)).thenReturn(false); + Mockito.when(metadata.getColumnName(1)).thenReturn("Col1"); + Mockito.when(metadata.getTableName(1)).thenReturn("Table1"); + + final ResultSet rs = Mockito.mock(ResultSet.class); + Mockito.when(rs.getMetaData()).thenReturn(metadata); + + Schema schema = JdbcCommon.createSchema(rs); + Assert.assertNotNull(schema); + + Schema.Field field = schema.getField("Col1"); + Schema fieldSchema = field.schema(); + Assert.assertEquals(2, fieldSchema.getTypes().size()); + + boolean foundLongSchema = false; + boolean foundNullSchema = false; + + for (Schema type : fieldSchema.getTypes()) { + if (type.getType().equals(Schema.Type.LONG)) { + foundLongSchema = true; + } else if (type.getType().equals(Schema.Type.NULL)) { + foundNullSchema = true; + } + } + + Assert.assertTrue(foundLongSchema); + Assert.assertTrue(foundNullSchema); + } + @Test public void testConvertToAvroStreamForBigDecimal() throws SQLException, IOException {
