db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel John Debrunner (JIRA)" <derby-...@db.apache.org>
Subject [jira] Commented: (DERBY-1516) Inconsistent behavior for getBytes and getSubString for embedded versus network
Date Tue, 08 Aug 2006 19:35:15 GMT
    [ http://issues.apache.org/jira/browse/DERBY-1516?page=comments#action_12426687 ] 
Daniel John Debrunner commented on DERBY-1516:

I mean comments clarifying the length & position arguments passed in and the valid ranges
etc. Though while you were in there you could see if the description was correct, e.g. EmbedClob.getSubString()

NOTE: return the empty string if pos is too large

which I don't think is true before or after your changes.

I think there's a strong case for matching the SQL semantics rather than the Java semantics.
One data point is that the value offsets are 1-based
matching SQL, not 0-based matching String. This is the offset into a class that represents
a SQL value, not a Java value.

The other data point is the new range for the position argument looks very strange:

If the pos (position) argument is greater than the length + 1 of the BLOB then an exception
is thrown.

Why length +1, why not > length?

Also that JDBC document already has clarified the behvaiour, why is it changing?

> Inconsistent behavior for getBytes and getSubString for embedded versus network
> -------------------------------------------------------------------------------
>                 Key: DERBY-1516
>                 URL: http://issues.apache.org/jira/browse/DERBY-1516
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>            Reporter: Craig Russell
>         Assigned To: Craig Russell
>            Priority: Minor
>         Attachments: DERBY-1516.patch, DERBY-1516.patch, DERBY-1516.patch, DERBY-1516.patch,
DERBY-1516.patch, DERBY-1516.patch
> org.apache.derby.client.am.Clob.getSubString(pos, length) and org.apache.derby.client.am.Blob.getBytes(pos,
length) check the length for less than zero. 
>             if ((pos <= 0) || (length < 0)) {
>                 throw new SqlException(agent_.logWriter_, "Invalid position " + pos +
" or length " + length);
> But org.apache.derby.impl.jdbc.EmbedClob(pos, length) and org.apache.derby.impl.jdbc.EmbedBlob(pos,
length) check the length for less than or equal to zero.
>        if (length <= 0)
>             throw Util.generateCsSQLException(
>                 SQLState.BLOB_NONPOSITIVE_LENGTH, new Integer(length));
> The specification does not disallow length of zero, so zero length should be allowed.
I believe that the implementation in org.apache.derby.client.am is correct, and the implementation
in org.apache.derby.impl.jdbc is incorrect. 

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


View raw message