[
https://issues.apache.org/jira/browse/DERBY-825?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dag H. Wanvik updated DERBY-825:
--------------------------------
Derby Categories: [Performance]
> writeSQLCAGRP() should use byte[] constants instead of Strings where feasible
> -----------------------------------------------------------------------------
>
> Key: DERBY-825
> URL: https://issues.apache.org/jira/browse/DERBY-825
> Project: Derby
> Issue Type: Sub-task
> Components: Network Server
> Affects Versions: 10.1.2.1
> Reporter: Dyre Tjeldvoll
> Assignee: Dyre Tjeldvoll
> Priority: Minor
> Fix For: 10.1.3.1
>
> Attachments: derby-825.diff, derby-825.stat,
> derbynetclientmats_report.txt
>
>
> writeSQLCAGRP() writes Strings into the message being built. Profiling shows
> that it is more expensive to write a String than a byte[] because the String
> must be converted to UTF8. writeSQLCAGRP() writes 5 bytes for SQLState, and
> this is done by either writing a String constant, or the return value from
> SQLException.getSQLState(). For the common case where there is no exception
> (SQLState = 5xspace), or the exception is a "dummy" exception (SQLState=00000
> or 02000, End of Data), this is wasteful because the String has to be
> converted to byte[] each time, and in the case of the dummy exception, a new
> String object will be created each time getSQLState() is called, even if the
> exception object is the same (there is no caching, which is reasonable since
> exceptions are meant to be thrown, not kept around for a long time).
> A solution is to keep the commonly used SQLStates as byte[] constants that
> can be inserted into the message with writeBytes().
> If writeSQLCAGRP() is called with no SQLException (null) there is no attempt
> to put an internationalized error message into the outgoing message (The
> third argument to writeSQLCAXGRP() is null). This is reasonable, but the same
> optimization is not done when the exception is one of the dummy exceptions
> mentioned previously. In this case an internationalized version of the
> message "End of Data" is constructed and inserted into the message. It would
> be better to call writeSQLCAXGRP(..,null,..) in this case as well, since it
> isn't needed by the client in this case.
> Finally, writeSQLCAERRWARN() uses writeScalarPaddedBytes() to write values
> that also can be stored as byte[] constants, and written faster with
> writeBytes()
>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.