Repository: nifi
Updated Branches:
  refs/heads/master 46fa6a167 -> ea0f5690c


NIFI-3372 Adding capability for PutSQL to handle BIT fields generated by 
ConvertJSONToSQL.

This closes #1432.


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

Branch: refs/heads/master
Commit: ea0f5690cc62ac8b73394e076dcac218f2edb37b
Parents: 46fa6a1
Author: Ryan Persaud <[email protected]>
Authored: Wed Jan 18 20:15:16 2017 -0700
Committer: Pierre Villard <[email protected]>
Committed: Tue Feb 7 17:14:37 2017 +0100

----------------------------------------------------------------------
 .../apache/nifi/processors/standard/PutSQL.java |   2 +
 .../nifi/processors/standard/TestPutSQL.java    | 117 +++++++++++++++++++
 2 files changed, 119 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/ea0f5690/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSQL.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSQL.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSQL.java
index 3efe20e..6d7c504 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSQL.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSQL.java
@@ -761,6 +761,8 @@ public class PutSQL extends AbstractProcessor {
         } else {
             switch (jdbcType) {
                 case Types.BIT:
+                    stmt.setBoolean(parameterIndex, "1".equals(parameterValue) 
|| "t".equalsIgnoreCase(parameterValue) || 
Boolean.parseBoolean(parameterValue));
+                     break;
                 case Types.BOOLEAN:
                     stmt.setBoolean(parameterIndex, 
Boolean.parseBoolean(parameterValue));
                     break;

http://git-wip-us.apache.org/repos/asf/nifi/blob/ea0f5690/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
index 25ec476..5e9ab58 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutSQL.java
@@ -352,6 +352,123 @@ public class TestPutSQL {
     }
 
     @Test
+    public void testBitType() throws SQLException, InitializationException {
+        final TestRunner runner = TestRunners.newTestRunner(PutSQL.class);
+        try (final Connection conn = service.getConnection()) {
+            try (final Statement stmt = conn.createStatement()) {
+                stmt.executeUpdate("CREATE TABLE BITTESTS (id integer primary 
key, bt1 BOOLEAN)");
+            }
+        }
+
+        runner.addControllerService("dbcp", service);
+        runner.enableControllerService(service);
+        runner.setProperty(PutSQL.CONNECTION_POOL, "dbcp");
+
+        final byte[] insertStatement = "INSERT INTO BITTESTS (ID, bt1) VALUES 
(?, ?)".getBytes();
+
+        Map<String, String> attributes = new HashMap<>();
+        attributes.put("sql.args.1.type", String.valueOf(Types.INTEGER));
+        attributes.put("sql.args.1.value", "1");
+        attributes.put("sql.args.2.type", String.valueOf(Types.BIT));
+        attributes.put("sql.args.2.value", "1");
+        runner.enqueue(insertStatement, attributes);
+
+        attributes.put("sql.args.1.type", String.valueOf(Types.INTEGER));
+        attributes.put("sql.args.1.value", "2");
+        attributes.put("sql.args.2.type", String.valueOf(Types.BIT));
+        attributes.put("sql.args.2.value", "0");
+        runner.enqueue(insertStatement, attributes);
+
+        attributes.put("sql.args.1.type", String.valueOf(Types.INTEGER));
+        attributes.put("sql.args.1.value", "3");
+        attributes.put("sql.args.2.type", String.valueOf(Types.BIT));
+        attributes.put("sql.args.2.value", "-5");
+        runner.enqueue(insertStatement, attributes);
+
+        attributes.put("sql.args.1.type", String.valueOf(Types.INTEGER));
+        attributes.put("sql.args.1.value", "4");
+        attributes.put("sql.args.2.type", String.valueOf(Types.BIT));
+        attributes.put("sql.args.2.value", "t");
+        runner.enqueue(insertStatement, attributes);
+
+        attributes.put("sql.args.1.type", String.valueOf(Types.INTEGER));
+        attributes.put("sql.args.1.value", "5");
+        attributes.put("sql.args.2.type", String.valueOf(Types.BIT));
+        attributes.put("sql.args.2.value", "f");
+        runner.enqueue(insertStatement, attributes);
+
+        attributes.put("sql.args.1.type", String.valueOf(Types.INTEGER));
+        attributes.put("sql.args.1.value", "6");
+        attributes.put("sql.args.2.type", String.valueOf(Types.BIT));
+        attributes.put("sql.args.2.value", "T");
+        runner.enqueue(insertStatement, attributes);
+
+        attributes.put("sql.args.1.type", String.valueOf(Types.INTEGER));
+        attributes.put("sql.args.1.value", "7");
+        attributes.put("sql.args.2.type", String.valueOf(Types.BIT));
+        attributes.put("sql.args.2.value", "true");
+        runner.enqueue(insertStatement, attributes);
+
+        attributes.put("sql.args.1.type", String.valueOf(Types.INTEGER));
+        attributes.put("sql.args.1.value", "8");
+        attributes.put("sql.args.2.type", String.valueOf(Types.BIT));
+        attributes.put("sql.args.2.value", "false");
+        runner.enqueue(insertStatement, attributes);
+
+        runner.run();
+        runner.assertAllFlowFilesTransferred(PutSQL.REL_SUCCESS, 8);
+
+        try (final Connection conn = service.getConnection()) {
+            try (final Statement stmt = conn.createStatement()) {
+                final ResultSet rs = stmt.executeQuery("SELECT * FROM 
BITTESTS");
+
+                //First test (true)
+                assertTrue(rs.next());
+                assertEquals(1, rs.getInt(1));
+                assertTrue(rs.getBoolean(2));
+
+                //Second test (false)
+                assertTrue(rs.next());
+                assertEquals(2, rs.getInt(1));
+                assertFalse(rs.getBoolean(2));
+
+                //Third test (false)
+                assertTrue(rs.next());
+                assertEquals(3, rs.getInt(1));
+                assertFalse(rs.getBoolean(2));
+
+                //Fourth test (true)
+                assertTrue(rs.next());
+                assertEquals(4, rs.getInt(1));
+                assertTrue(rs.getBoolean(2));
+
+                //Fifth test (false)
+                assertTrue(rs.next());
+                assertEquals(5, rs.getInt(1));
+                assertFalse(rs.getBoolean(2));
+
+                //Sixth test (true)
+                assertTrue(rs.next());
+                assertEquals(6, rs.getInt(1));
+                assertTrue(rs.getBoolean(2));
+
+                //Seventh test (true)
+                assertTrue(rs.next());
+                assertEquals(7, rs.getInt(1));
+                assertTrue(rs.getBoolean(2));
+
+                //Eighth test (false)
+                assertTrue(rs.next());
+                assertEquals(8, rs.getInt(1));
+                assertFalse(rs.getBoolean(2));
+
+                assertFalse(rs.next());
+            }
+        }
+
+    }
+
+    @Test
     public void testBinaryColumnTypes() throws InitializationException, 
ProcessException, SQLException, IOException, ParseException {
         final TestRunner runner = TestRunners.newTestRunner(PutSQL.class);
         try (final Connection conn = service.getConnection()) {

Reply via email to