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()) {
