Changes in MySQL Connector/J 3.1.5 (2004-12-02)

SUM() on
DECIMAL with server-side prepared
statement ignores scale if zero-padding is needed (this ends up
being due to conversion to DOUBLE
by server, which when converted to a string to parse into
BigDecimal, loses all “padding”
zeros).
(Bug #6537)

Use
DatabaseMetaData.getIdentifierQuoteString()
when building DBMD queries.
(Bug #6537)

Use our own implementation of buffered input streams to get
around blocking behavior of
java.io.BufferedInputStream. Disable this
with useReadAheadInput=false.
(Bug #6399)

Re-work Field.isOpaqueBinary() to detect
CHAR(n) CHARACTER SET
BINARY to support fixed-length binary fields for
ResultSet.getObject().
(Bug #6399)

Failing to connect to the server when one of the addresses for
the given host name is IPV6 (which the server does not yet bind
on). The driver now loops through all IP
addresses for a given host, and stops on the first one that
accepts() a
socket.connect().
(Bug #6348)

Removed unwanted new Throwable() in
ResultSet constructor due to bad merge
(caused a new object instance that was never used for every
result set created). Found while profiling for Bug #6359.
(Bug #6225)

Added experimental configuration property
dontUnpackBinaryResults, which delays
unpacking binary result set values until they're asked for, and
only creates object instances for nonnumeric values (it is set
to false by default). For some usecase/jvm
combinations, this is friendlier on the garbage collector.
(Bug #5706)

Use a per-session Calendar instance by
default when decoding dates from
ServerPreparedStatements (set to old, less
performant behavior by setting property
dynamicCalendars=true).
(Bug #5706)

Fixed batched updates with server prepared statements weren't
looking if the types had changed for a given batched set of
parameters compared to the previous set, causing the server to
return the error “Wrong arguments to
mysql_stmt_execute()”.
(Bug #5235)

Server-side prepared statements did not honor
zeroDateTimeBehavior property, and would
cause class-cast exceptions when using
ResultSet.getObject(), as the all-zero string
was always returned.
(Bug #5235)

Fix comparisons made between string constants and dynamic
strings that are converted with either
toUpperCase() or
toLowerCase() to use
Locale.ENGLISH, as some locales
“override” case rules for English. Also use
StringUtils.indexOfIgnoreCase() instead of
.toUpperCase().indexOf(), avoids creating a
very short-lived transient String instance.