[ 
https://issues.apache.org/jira/browse/DERBY-4315?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12995573#comment-12995573
 ] 

Kathey Marsden commented on DERBY-4315:
---------------------------------------

While the commit with this issue merges cleanly to 10.5, it is I think a patch 
to regularize the exception handling between server and client.  Since it 
changes the SQLState, I don't think it is such a good candidate for backport. 
The actual fix is with DERBY-2017 which looks too hairy to me if not impossible 
to backport to 10.5 as it makes some protocol changes that might be problematic 
with mixed version, but I have not looked that closely.  I think I will take 
this one off the backport list.  I am thinking I should introduce a label for 
tracking issues that have been considered and then rejected for backport. I 
will send a separate mail to derby-dev for that.


> Attempt to reuse streams in client on insert gives protocol exception and 
> inserts wrong data
> --------------------------------------------------------------------------------------------
>
>                 Key: DERBY-4315
>                 URL: https://issues.apache.org/jira/browse/DERBY-4315
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.1.3.1, 10.2.2.0, 10.3.3.0, 10.4.2.0, 10.5.1.1, 
> 10.5.2.0, 10.6.1.0
>            Reporter: Kathey Marsden
>             Fix For: 10.7.1.1, 10.8.0.0
>
>         Attachments: ReproReuseStream.java, ReproReuseStream.java, 
> StreamError.java, derby-4315-01-aa-regularizeExceptionHandling.diff, 
> derby-4315-01-ab-regularizeExceptionHandling.diff, 
> derby-4315-02-aa-cleanupEndOfStreamMessage.diff
>
>
> If a user attempts to reuse a stream set as a parameter to a prepared 
> statement, the statement execution should fail with SQL State XJ001.  Instead 
> client fails with a protocol error and inserts wrong data. See the attached 
> java program ReproReuseStream.java for a reproduction.
> [C:/kmarsden/repro/reusestream] java ReproReuseStream
> Insert row 1
> Try to insert row 2 with reused streams
> java.sql.SQLException: Network protocol error: end of stream prematurely 
> reached, parameter #4.  Remaining data has been
>  padded with 0x0.
>         at 
> org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:96)
>         at 
> org.apache.derby.client.am.SqlException.getSQLException(SqlException.java:358)
>         at 
> org.apache.derby.client.am.PreparedStatement.executeUpdate(PreparedStatement.java:399)
>         at ReproReuseStream.main(ReproReuseStream.java:41)
> Caused by: org.apache.derby.client.am.SqlException: Network protocol error: 
> end of stream prematurely reached, parameter
>  #4.  Remaining data has been padded with 0x0.
>         at 
> org.apache.derby.client.net.Request.writePlainScalarStream(Request.java:490)
>         at 
> org.apache.derby.client.net.Request.writeScalarStream(Request.java:264)
>         at 
> org.apache.derby.client.net.NetStatementRequest.buildEXTDTA(NetStatementRequest.java:951)
>         at 
> org.apache.derby.client.net.NetStatementRequest.writeExecute(NetStatementRequest.java:147)
>         at 
> org.apache.derby.client.net.NetPreparedStatement.writeExecute_(NetPreparedStatement.java:178)
>         at 
> org.apache.derby.client.am.PreparedStatement.writeExecute(PreparedStatement.java:1801)
>         at 
> org.apache.derby.client.am.PreparedStatement.flowExecute(PreparedStatement.java:2031)
>         at 
> org.apache.derby.client.am.PreparedStatement.executeUpdateX(PreparedStatement.java:404)
>         at 
> org.apache.derby.client.am.PreparedStatement.executeUpdate(PreparedStatement.java:390)
>         ... 1 more
> Go ahead and commit so we can see the wrong data.
> ID         |MNAME
>                     |MVALUE     |BYTEDATA
>                                          |CHARDATA
> ------------------------------------------------------------------------------------------------------------------------
> ------------------------------------------------------------------------------------------------------------------------
> ------------------------------------------------------------------------------------------------------------------------
> --------------------------------------------------
> 1          |mname
>                     |0          
> |636363636363636363636363636363636363636363636363636363636363636363636363636363636363636
> 3636363636363636363636363636363636363636&|cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
> ccccccccccccccccccccccccccccccccccccccccccccccccc&
> 2          |mname
>                     |0          
> |000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
> 0000000000000000000000000000000000000000&|
>                                                  &
> To workaround the issue users should not attempt to reuse streams but we 
> should give a better message and not insert wrong data.
> The code was extracted from StreamingColumnTest testDerby500 but the commits 
> were removed.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to