[ 
https://issues.apache.org/jira/browse/BEAM-13517?focusedWorklogId=700476&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-700476
 ]

ASF GitHub Bot logged work on BEAM-13517:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 23/Dec/21 09:52
            Start Date: 23/Dec/21 09:52
    Worklog Time Spent: 10m 
      Work Description: vitaly-ivanov commented on a change in pull request 
#16336:
URL: https://github.com/apache/beam/pull/16336#discussion_r774451230



##########
File path: 
sdks/java/io/jdbc/src/test/java/org/apache/beam/sdk/io/jdbc/JdbcIOTest.java
##########
@@ -880,6 +881,72 @@ public void testGetPreparedStatementSetCaller() throws 
Exception {
     verify(psMocked, times(1)).setByte(11, Byte.parseByte("1", 2));
   }
 
+  @Test
+  public void testGetPreparedStatementSetNullsCaller() throws Exception {
+
+    Schema schema =
+        Schema.builder()
+            // primitive
+            .addField("bigint_col", Schema.FieldType.INT64.withNullable(true))

Review comment:
       I think it should be handled on the Schema validation level but not 
while setting the PreparedStatement value. 
   I have just tested this case, and I have not been able to create Row with a 
null value in the non-nullable field. It has failed with
   ```
   java.lang.IllegalArgumentException: INT64 NOT NULL is not nullable in  field 
bigint_col
        at 
org.apache.beam.sdk.values.RowUtils$RowFieldMatcher.match(RowUtils.java:211)
   ``` 




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Issue Time Tracking
-------------------

    Worklog Id:     (was: 700476)
    Time Spent: 1h 40m  (was: 1.5h)

> Unable to write nulls to columns with logical types
> ---------------------------------------------------
>
>                 Key: BEAM-13517
>                 URL: https://issues.apache.org/jira/browse/BEAM-13517
>             Project: Beam
>          Issue Type: Bug
>          Components: io-java-jdbc
>    Affects Versions: 2.34.0
>            Reporter: Vitaly Ivanov
>            Assignee: Vitaly Ivanov
>            Priority: P1
>             Fix For: 2.35.0
>
>          Time Spent: 1h 40m
>  Remaining Estimate: 0h
>
> Try to write null to the column with type varchar(255) via 
> JdbcIO.<Row>write().
> {noformat}
> java.lang.RuntimeException: java.lang.RuntimeException: Error while setting 
> data to preparedStatement
> org.apache.beam.sdk.Pipeline$PipelineExecutionException: 
> java.lang.RuntimeException: java.lang.RuntimeException: Error while setting 
> data to preparedStatement
>     at 
> org.apache.beam.runners.direct.DirectRunner$DirectPipelineResult.waitUntilFinish(DirectRunner.java:373)
>     at 
> org.apache.beam.runners.direct.DirectRunner$DirectPipelineResult.waitUntilFinish(DirectRunner.java:341)
>     at org.apache.beam.runners.direct.DirectRunner.run(DirectRunner.java:218)
>     at org.apache.beam.runners.direct.DirectRunner.run(DirectRunner.java:67)
>     at org.apache.beam.sdk.Pipeline.run(Pipeline.java:323)
>     at org.apache.beam.sdk.testing.TestPipeline.run(TestPipeline.java:399)
>     at org.apache.beam.sdk.testing.TestPipeline.run(TestPipeline.java:335)
>     at 
> org.apache.beam.sdk.io.jdbc.OtherJdbcTypesIT.testReadAndWrite(OtherJdbcTypesIT.java:120)
>     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
> Method)
>     at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>     at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
>     at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
>     at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
>     at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
>     at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
>     at 
> org.apache.beam.sdk.testing.TestPipeline$1.evaluate(TestPipeline.java:323)
>     at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
>     at 
> org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
>     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
>     at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
>     at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
>     at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
>     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
>     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
>     at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
>     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
>     at 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
>     at 
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
>     at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
>     at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
>     at 
> org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
>     at 
> org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
>     at 
> org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
>     at 
> org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
>     at 
> org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
>     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
> Method)
>     at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>     at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
>     at 
> org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
>     at 
> org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
>     at 
> org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
>     at 
> org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
>     at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
>     at 
> org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119)
>     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
> Method)
>     at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>     at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
>     at 
> org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
>     at 
> org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
>     at 
> org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
>     at 
> org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
>     at 
> org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
>     at 
> org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
>     at 
> org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
>     at 
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>     at 
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>     at 
> org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
>     at java.base/java.lang.Thread.run(Thread.java:829)
> Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Error 
> while setting data to preparedStatement
>     at 
> org.apache.beam.sdk.io.jdbc.JdbcIO$WriteFn.processRecord(JdbcIO.java:2184)
>     at 
> org.apache.beam.sdk.io.jdbc.JdbcIO$WriteFn.executeBatch(JdbcIO.java:2141)
>     at 
> org.apache.beam.sdk.io.jdbc.JdbcIO$WriteFn.finishBundle(JdbcIO.java:2098)
> Caused by: java.lang.RuntimeException: Error while setting data to 
> preparedStatement
>     at 
> org.apache.beam.sdk.io.jdbc.JdbcIO$WriteVoid$AutoGeneratedPreparedStatementSetter.lambda$setParameters$1(JdbcIO.java:1828)
>     at 
> java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Streams.java:104)
>     at 
> java.base/java.util.stream.IntPipeline$Head.forEach(IntPipeline.java:593)
>     at 
> org.apache.beam.sdk.io.jdbc.JdbcIO$WriteVoid$AutoGeneratedPreparedStatementSetter.setParameters(JdbcIO.java:1821)
>     at 
> org.apache.beam.sdk.io.jdbc.JdbcIO$WriteFn.processRecord(JdbcIO.java:2173)
>     at 
> org.apache.beam.sdk.io.jdbc.JdbcIO$WriteFn.executeBatch(JdbcIO.java:2141)
>     at 
> org.apache.beam.sdk.io.jdbc.JdbcIO$WriteFn.finishBundle(JdbcIO.java:2098)
>     at 
> org.apache.beam.sdk.io.jdbc.JdbcIO$WriteFn$DoFnInvoker.invokeFinishBundle(Unknown
>  Source)
>     at 
> org.apache.beam.repackaged.direct_java.runners.core.SimpleDoFnRunner.finishBundle(SimpleDoFnRunner.java:238)
>     at 
> org.apache.beam.repackaged.direct_java.runners.core.SimplePushbackSideInputDoFnRunner.finishBundle(SimplePushbackSideInputDoFnRunner.java:130)
>     at 
> org.apache.beam.runners.direct.ParDoEvaluator.finishBundle(ParDoEvaluator.java:269)
>     at 
> org.apache.beam.runners.direct.DoFnLifecycleManagerRemovingTransformEvaluator.finishBundle(DoFnLifecycleManagerRemovingTransformEvaluator.java:73)
>     at 
> org.apache.beam.runners.direct.DirectTransformExecutor.finishBundle(DirectTransformExecutor.java:193)
>     at 
> org.apache.beam.runners.direct.DirectTransformExecutor.run(DirectTransformExecutor.java:131)
>     at 
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
>     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
>     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)
> Caused by: java.lang.NullPointerException
>     at 
> org.apache.beam.sdk.io.jdbc.JdbcUtil.lambda$createStringCaller$f6091572$1(JdbcUtil.java:224)
>     at 
> org.apache.beam.sdk.io.jdbc.JdbcIO$WriteVoid$AutoGeneratedPreparedStatementSetter.lambda$setParameters$1(JdbcIO.java:1826)
>     ... 18 more{noformat}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to