[
https://issues.apache.org/jira/browse/NIFI-10202?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kirill Morozov updated NIFI-10202:
----------------------------------
Description:
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}
was:
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}
> 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
> Priority: Minor
> 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
>
>
> 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)