NIFI-4830: Fixed logic errors in BLOB/CLOB processing in JdbcCommon

This closes #2459.

Signed-off-by: Koji Kawamura <ijokaruma...@apache.org>


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

Branch: refs/heads/HDF-3.1-maint
Commit: da8bf834538d893af3027a358ddef6263e792629
Parents: a4d3bc0
Author: Matthew Burgess <mattyb...@apache.org>
Authored: Thu Feb 8 14:02:58 2018 -0500
Committer: Matt Gilman <matt.c.gil...@gmail.com>
Committed: Fri Feb 9 07:51:11 2018 -0500

----------------------------------------------------------------------
 .../nifi/processors/standard/util/JdbcCommon.java   |  4 ++--
 .../processors/standard/util/TestJdbcCommon.java    | 16 +++++++++++++---
 2 files changed, 15 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/da8bf834/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 1a3714c..f8e88ef 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
@@ -280,7 +280,7 @@ public class JdbcCommon {
                             InputStream is = clob.getAsciiStream();
                             int index = 0;
                             int c = is.read();
-                            while (c > 0) {
+                            while (c >= 0) {
                                 buffer[index++] = (char) c;
                                 c = is.read();
                             }
@@ -316,7 +316,7 @@ public class JdbcCommon {
                             InputStream is = blob.getBinaryStream();
                             int index = 0;
                             int c = is.read();
-                            while (c > 0) {
+                            while (c >= 0) {
                                 buffer[index++] = (byte) c;
                                 c = is.read();
                             }

http://git-wip-us.apache.org/repos/asf/nifi/blob/da8bf834/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 afe7788..5eca32a 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
@@ -476,11 +476,13 @@ public class TestJdbcCommon {
     public void testClob() throws Exception {
         try (final Statement stmt = con.createStatement()) {
             stmt.executeUpdate("CREATE TABLE clobtest (id INT, text CLOB(64 
K))");
-            stmt.execute("INSERT INTO blobtest VALUES (41, NULL)");
+            stmt.execute("INSERT INTO clobtest VALUES (41, NULL)");
             PreparedStatement ps = con.prepareStatement("INSERT INTO clobtest 
VALUES (?, ?)");
             ps.setInt(1, 42);
             final char[] buffer = new char[4002];
             IntStream.range(0, 4002).forEach((i) -> buffer[i] = 
String.valueOf(i % 10).charAt(0));
+            // Put a zero-byte in to test the buffer building logic
+            buffer[1] = 0;
             ReaderInputStream isr = new ReaderInputStream(new 
CharArrayReader(buffer), Charset.defaultCharset());
 
             // - set the value of the input parameter to the input stream
@@ -513,7 +515,10 @@ public class TestJdbcCommon {
                         assertNull(o);
                     } else {
                         assertNotNull(o);
-                        assertEquals(4002, o.toString().length());
+                        final String text = o.toString();
+                        assertEquals(4002, text.length());
+                        // Third character should be '2'
+                        assertEquals('2', text.charAt(2));
                     }
                 }
             }
@@ -529,6 +534,8 @@ public class TestJdbcCommon {
             ps.setInt(1, 42);
             final byte[] buffer = new byte[4002];
             IntStream.range(0, 4002).forEach((i) -> buffer[i] = (byte) ((i % 
10) + 65));
+            // Put a zero-byte in to test the buffer building logic
+            buffer[1] = 0;
             ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
 
             // - set the value of the input parameter to the input stream
@@ -562,7 +569,10 @@ public class TestJdbcCommon {
                     } else {
                         assertNotNull(o);
                         assertTrue(o instanceof ByteBuffer);
-                        assertEquals(4002, ((ByteBuffer) o).array().length);
+                        final byte[] blob = ((ByteBuffer) o).array();
+                        assertEquals(4002, blob.length);
+                        // Third byte should be 67 ('C')
+                        assertEquals('C', blob[2]);
                     }
                 }
             }

Reply via email to