You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "David Handermann (Jira)" <ji...@apache.org> on 2022/11/14 15:27:00 UTC

[jira] [Resolved] (NIFI-10202) ConvertJSONToSQL don't use primaryKey with update statement from "statement.type" attribute

     [ https://issues.apache.org/jira/browse/NIFI-10202?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

David Handermann resolved NIFI-10202.
-------------------------------------
    Fix Version/s: 1.19.0
       Resolution: Fixed

> ConvertJSONToSQL don't use primaryKey with update statement  from "statement.type" attribute
> --------------------------------------------------------------------------------------------
>
>                 Key: NIFI-10202
>                 URL: https://issues.apache.org/jira/browse/NIFI-10202
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Core Framework
>    Affects Versions: 1.16.3
>         Environment: Windows 10
>            Reporter: Kirill Morozov
>            Assignee: Kirill Morozov
>            Priority: Minor
>             Fix For: 1.19.0
>
>         Attachments: image-2022-07-07-11-39-04-839.png, image-2022-07-07-11-39-28-061.png, image-2022-07-07-11-39-46-555.png
>
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> Processor configuration:
> !image-2022-07-07-11-39-46-555.png!
> Test for this case failed:
> {code:java}
> @Test
> public void testUpdateStatementTypeBasedOnPrimaryKey() throws InitializationException, ProcessException, SQLException, IOException {
>     final TestRunner runner = TestRunners.newTestRunner(ConvertJSONToSQL.class);
>     runner.addControllerService("dbcp", service);
>     runner.enableControllerService(service);
>     runner.setProperty(ConvertJSONToSQL.CONNECTION_POOL, "dbcp");
>     runner.setProperty(ConvertJSONToSQL.TABLE_NAME, "PERSONS");
>     runner.setProperty(ConvertJSONToSQL.STATEMENT_TYPE, ConvertJSONToSQL.USE_ATTR_TYPE);
>     Map<String, String> attrs = new HashMap<>();
>     attrs.put(ConvertJSONToSQL.STATEMENT_TYPE_ATTRIBUTE, "UPDATE");
>     runner.enqueue(Paths.get("src/test/resources/TestConvertJSONToSQL/person-1.json"),attrs);
>     runner.run();
>     runner.assertTransferCount(ConvertJSONToSQL.REL_ORIGINAL, 1);
>     runner.getFlowFilesForRelationship(ConvertJSONToSQL.REL_ORIGINAL).get(0).assertAttributeEquals(FRAGMENT_COUNT.key(), "1");
>     runner.assertTransferCount(ConvertJSONToSQL.REL_SQL, 1);
>     final MockFlowFile out = runner.getFlowFilesForRelationship(ConvertJSONToSQL.REL_SQL).get(0);
>     out.assertAttributeEquals("sql.args.1.type", String.valueOf(java.sql.Types.VARCHAR));
>     out.assertAttributeEquals("sql.args.1.value", "Mark");
>     out.assertAttributeEquals("sql.args.2.type", String.valueOf(java.sql.Types.INTEGER));
>     out.assertAttributeEquals("sql.args.2.value", "48");
>     out.assertAttributeEquals("sql.args.3.type", String.valueOf(java.sql.Types.INTEGER));
>     out.assertAttributeEquals("sql.args.3.value", "1");
>     out.assertContentEquals("UPDATE PERSONS SET NAME = ?, CODE = ? WHERE ID = ?");
> } {code}
> with 
> {code:java}
> org.apache.nifi.processor.exception.ProcessException: Table 'PERSONS' does not have a Primary Key and no Update Keys were specified
>     at org.apache.nifi.processors.standard.ConvertJSONToSQL.generateUpdate(ConvertJSONToSQL.java:616)
>     at org.apache.nifi.processors.standard.ConvertJSONToSQL.onTrigger(ConvertJSONToSQL.java:407)
>     at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
>     at org.apache.nifi.util.StandardProcessorTestRunner$RunProcessor.call(StandardProcessorTestRunner.java:284)
>     at org.apache.nifi.util.StandardProcessorTestRunner$RunProcessor.call(StandardProcessorTestRunner.java:278)
>     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
>     at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
>     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>     at java.base/java.lang.Thread.run(Thread.java:829) {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)