[
http://issues.apache.org/jira/browse/DERBY-1417?page=comments#action_12425048 ]
Kristian Waagan commented on DERBY-1417:
----------------------------------------
Thanks for looking at the patch, Rick :)
I added the test case mostly to demonstrate the expected behavior.
a) The user should never trip across this at all. If it is thrown, it must be
because of a programming error in Derby. Currently, the byte arrays passed in
are read from a user/application stream, and the bytes are counted as they are
read.
b) The user would see something ugly... For the non-debug version, replace the
linenumbers with "Unknown Source". The error is constructed.
1)
testSetClobLengthless(org.apache.derbyTesting.functionTests.tests.jdbc4.PreparedStatementTest)java.lang.IllegalArgumentException:
Length cannot be negative: -37
at
org.apache.derby.client.am.ByteArrayCombinerStream.<init>(ByteArrayCombinerStream.java:78)
at org.apache.derby.client.am.Lob.materializeStream(Lob.java:164)
at org.apache.derby.client.am.Clob.materializeStream(Clob.java:833)
at org.apache.derby.client.am.Clob.length(Clob.java:216)
at
org.apache.derby.client.net.NetStatementRequest.computeProtocolTypesAndLengths(NetStatementRequest.java:1232)
at
org.apache.derby.client.net.NetStatementRequest.buildSQLDTAcommandData(NetStatementRequest.java:520)
at
org.apache.derby.client.net.NetStatementRequest.writeExecute(NetStatementRequest.java:139)
at
org.apache.derby.client.net.NetPreparedStatement.writeExecute_(NetPreparedStatement.java:171)
at
org.apache.derby.client.am.PreparedStatement.writeExecute(PreparedStatement.java:1543)
at
org.apache.derby.client.am.PreparedStatement.flowExecute(PreparedStatement.java:1789)
at
org.apache.derby.client.am.PreparedStatement.executeX(PreparedStatement.java:1347)
at
org.apache.derby.client.am.PreparedStatement.execute(PreparedStatement.java:1332)
at
org.apache.derbyTesting.functionTests.tests.jdbc4.PreparedStatementTest.testSetClobLengthless(PreparedStatementTest.java:375)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at
org.apache.derbyTesting.functionTests.util.BaseTestCase.runBare(Unknown Source)
I realize this does not look good, but it should not happen. I don't feel like
making these two exceptions checked, or just ignore the error conditions (as
the previous implementation did).
Does anyone have opinions?
Are there guidelines to follow?
Thanks,
> Add new, lengthless overloads to the streaming api
> --------------------------------------------------
>
> Key: DERBY-1417
> URL: http://issues.apache.org/jira/browse/DERBY-1417
> Project: Derby
> Issue Type: New Feature
> Components: JDBC
> Affects Versions: 10.2.0.0
> Reporter: Rick Hillegas
> Assigned To: Kristian Waagan
> Fix For: 10.2.0.0
>
> Attachments: derby-1417-01-castsInTests.diff,
> derby-1417-1a-notImplemented.diff, derby-1417-1a-notImplemented.stat,
> derby-1417-2a-rstest-refactor.diff, derby-1417-3a-embimpl-and-tests.diff,
> derby-1417-3a-embimpl-and-tests.stat, derby-1417-3b-embimpl-and-tests.diff,
> derby-1417-3b-embimpl-and-tests.stat, derby-1417-4a-disable-psTestsDnc.diff,
> derby-1417-5a-brokered.diff, derby-1417-5a-brokered.stat,
> derby-1417-6a-clientimpl.diff, derby-1417-6a-clientimpl.stat,
> derby-1417-6b-clientimpl.diff, derby-1417-6c-clientimpl.diff,
> derby-1417-6d-clientimpl.diff, derby-1417-7a-clientborderfix.diff,
> derby-1417-7a-clientborderfix.stat
>
>
> The JDBC4 Expert Group has approved a new set of overloads for the streaming
> methods. These overloads do not take a length argument. Here are the new
> overloads:
> PreparedStatement.setAsciiStream(int parameterIndex, java.io.InputStream x)
> PreparedStatement.setBinaryStream(int parameterIndex, java.io.InputStream x)
> PreparedStatement.setCharacterStream(int parameterIndex, java.io.Reader
> reader)
> PreparedStatement.setNCharacterStream(int parameterIndex, java.io.Reader
> reader)
> PreparedStatement.setBlob(int parameterIndex, java.io.InputStream inputStream)
> PreparedStatement.setClob(int parameterIndex, java.io.Reader reader)
> PreparedStatement.setNClob(int parameterIndex, java.io.Reader reader)
> CallableStatement.setAsciiStream(java.lang.String parameterName,
> java.io.InputStream x)
> CallableStatement.setBinaryStream(java.lang.String parameterName,
> java.io.InputStream x)
> CallableStatement.setCharacterStream(java.lang.String parameterName,
> java.io.Reader reader)
> CallableStatement.setNCharacterStream(java.lang.String parameterName,
> java.io.Reader reader)
> CallableStatement.setBlob(java.lang.String parameterName, java.io.InputStream
> inputStream)
> CallableStatement.setClob(java.lang.String parameterName, java.io.Reader
> reader)
> CallableStatement.setNClob(java.lang.String parameterName, java.io.Reader
> reader)
> ResultSet.updateAsciiStream(int columnIndex, java.io.InputStream x)
> ResultSet.updateAsciiStream(java.lang.String columnLabel, java.io.InputStream
> x)
> ResultSet.updateBinaryStream(int columnIndex, java.io.InputStream x)
> ResultSet.updateBinaryStream(java.lang.String columnLabel,
> java.io.InputStream x, int length)
> ResultSet.updateCharacterStream(int columnIndex, java.io.Reader x)
> ResultSet.updateCharacterStream(java.lang.String columnLabel, java.io.Reader
> x)
> ResultSet.updateNCharacterStream(int columnIndex, java.io.Reader x)
> ResultSet.updateNCharacterStream(java.lang.String columnLabel, java.io.Reader
> x)
> ResultSet.updateBlob(int columnIndex, java.io.InputStream inputStream)
> ResultSet.updateBlob(java.lang.String columnLabel, java.io.InputStream
> inputStream)
> ResultSet.updateClob(int columnIndex, java.io.Reader reader)
> ResultSet.updateClob(java.lang.String columnLabel, java.io.Reader reader)
> ResultSet.updateNClob(int columnIndex, java.io.Reader reader)
> ResultSet.updateNClob(java.lang.String columnLabel, java.io.Reader reader)
> We should add these new overloads soon so that the build will not break when
> this methods turn up in a published Mustang build.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira