Repository: nifi
Updated Branches:
  refs/heads/master 63bda32a8 -> 4b4e099f2


NIFI-2764

Signed-off-by: Matt Burgess <mattyb...@apache.org>

NIFI-2764: Updated call to convertToAvroStream in TestJdbcCommon

This closes #1009


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/4b4e099f
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/4b4e099f
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/4b4e099f

Branch: refs/heads/master
Commit: 4b4e099f2ecd990f67f0afc994ecc4d46cbfc595
Parents: 63bda32
Author: patricker <patric...@gmail.com>
Authored: Mon Sep 12 21:52:58 2016 -0600
Committer: Matt Burgess <mattyb...@apache.org>
Committed: Tue Nov 8 14:45:49 2016 -0500

----------------------------------------------------------------------
 .../processors/standard/util/JdbcCommon.java    |  4 +-
 .../standard/util/TestJdbcCommon.java           | 39 ++++++++++++++++++++
 2 files changed, 42 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/4b4e099f/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 f19f7e0..bb058d4 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
@@ -166,7 +166,9 @@ public class JdbcCommon {
                         // direct put to avro record results:
                         // org.apache.avro.AvroRuntimeException: Unknown datum 
type java.lang.Byte
                         rec.put(i - 1, ((Byte) value).intValue());
-
+                    } else if(value instanceof Short) {
+                        //MS SQL returns TINYINT as a Java Short, which Avro 
doesn't understand.
+                        rec.put(i - 1, ((Short) value).intValue());
                     } else if (value instanceof BigDecimal) {
                         // Avro can't handle BigDecimal as a number - it will 
throw an AvroRuntimeException such as: "Unknown datum type: 
java.math.BigDecimal: 38"
                         rec.put(i - 1, value.toString());

http://git-wip-us.apache.org/repos/asf/nifi/blob/4b4e099f/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 1e0fe2f..e05844f 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
@@ -450,6 +450,45 @@ public class TestJdbcCommon {
         }
     }
 
+    @Test
+    public void testConvertToAvroStreamForShort() throws SQLException, 
IOException {
+        final ResultSetMetaData metadata = mock(ResultSetMetaData.class);
+        when(metadata.getColumnCount()).thenReturn(1);
+        when(metadata.getColumnType(1)).thenReturn(Types.TINYINT);
+        when(metadata.getColumnName(1)).thenReturn("t_int");
+        when(metadata.getTableName(1)).thenReturn("table");
+
+        final ResultSet rs = mock(ResultSet.class);
+        when(rs.getMetaData()).thenReturn(metadata);
+
+        final AtomicInteger counter = new AtomicInteger(1);
+        Mockito.doAnswer(new Answer<Boolean>() {
+            @Override
+            public Boolean answer(InvocationOnMock invocation) throws 
Throwable {
+                return counter.getAndDecrement() > 0;
+            }
+        }).when(rs).next();
+
+        final short s = 25;
+        when(rs.getObject(Mockito.anyInt())).thenReturn(s);
+
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        JdbcCommon.convertToAvroStream(rs, baos, false);
+
+        final byte[] serializedBytes = baos.toByteArray();
+
+        final InputStream instream = new ByteArrayInputStream(serializedBytes);
+
+        final DatumReader<GenericRecord> datumReader = new 
GenericDatumReader<>();
+        try (final DataFileStream<GenericRecord> dataFileReader = new 
DataFileStream<>(instream, datumReader)) {
+            GenericRecord record = null;
+            while (dataFileReader.hasNext()) {
+                record = dataFileReader.next(record);
+                assertEquals(Short.toString(s), 
record.get("t_int").toString());
+            }
+        }
+    }
 
     // many test use Derby as database, so ensure driver is available
     @Test

Reply via email to