-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi, 

MySQL Connector/J 5.0.6 a new version of the Type-IV all-Java JDBC driver for 
MySQL has been released. 

This is a bug fix release for the current production branch of Connector/J. 

Version 5.0.6 is suitable for use with any MySQL version including MySQL-4.1, 
MySQL-5.0, MySQL-5.1 beta or the MySQL-6.0 Falcon "Preview".

It is now available in source and binary form from the Connector/J download 
pages at 

   http://dev.mysql.com/downloads/connector/j/5.0.html 

and mirror sites (note that not all mirror sites may be up to date at this 
point of time - if you can't find this version on some mirror, please try again 
later or choose another download site.)

As always, we recommend that you check the change log

   http://dev.mysql.com/doc/refman/5.0/en/cj-news.html 

and "Upgrading" sections 

   http://dev.mysql.com/doc/refman/5.0/en/cj-upgrading.html 

in the manual before upgrading to be aware of changes in behavior that might 
affect your application. 

We welcome and appreciate your feedback, bug reports, bug fixes, patches etc.:

   http://forge.mysql.com/wiki/Contributing

        
- -------------------------
Performance Improvements
- ------------------------- 

- - Fixed BUG#27655 - Connection.getTransactionIsolation() uses "SHOW VARIABLES 
LIKE" which is very inefficient on MySQL-5.0+
                 
- - More intelligent initial packet sizes for the "shared" packets are used 
(512 bytes, rather than 16K), and initial packets used during handshake are now 
sized appropriately as to not require reallocation.

- - Added an experimental load-balanced connection designed for use with SQL 
nodes in a MySQL Cluster/NDB environment (This is not for master-slave 
replication. For that, we suggest you look at ReplicationConnection or 
"lbpool").
          
If the JDBC URL starts with "jdbc:mysql:loadbalance://host-1,host-2,...host-n", 
the driver will create an implementation of java.sql.Connection that load 
balances requests across a series of MySQL JDBC connections to the given hosts, 
where the balancing takes place after transaction commit.
 
Therefore, for this to work (at all), you must use transactions, even if only 
reading data.
 
Physical connections to the given hosts will not be created until needed.
      
The driver will invalidate connections that it detects have had communication 
errors when processing a request. A new connection to the problematic host will 
be attempted the next time it is selected by the load balancing algorithm.
      
There are two choices for load balancing algorithms, which may be specified by 
the "loadBalanceStrategy" JDBC URL configuration property:
      
      * "random" - the driver will pick a random host for each request. This 
tends to work better than round-robin, as the randomness will somewhat account 
for spreading loads where requests vary in response time, while round-robin can 
sometimes lead to overloaded nodes if there are variations in response times 
across the workload.
        
      * "bestResponseTime" - the driver will route the request to the host that 
had the best response time for the previous transaction.
        
- - When "useLocalSessionState" is set to "true" and connected to a MySQL-5.0 
or later server, the JDBC driver will now determine whether an actual "commit" 
or "rollback" statement needs to be sent to the database when 
Connection.commit() or Connection.rollback() is called.
      
This is especially helpful for high-load situations with connection pools that 
always call Connection.rollback() on connection check-in/check-out because it 
avoids a round-trip to the server.

- - Driver will now use INSERT INTO ... VALUES (DEFAULT) form of statement for 
updatable result sets for ResultSet.insertRow(), rather than pre-populating the 
insert row with values from DatabaseMetaData.getColumns() (which results in a 
"SHOW FULL COLUMNS" on the server for every result set). If an application 
requires access to the default values before insertRow() has been called, the 
JDBC URL should be configured with "populateInsertRowWithDefaultValues" set to 
"true".
          
This fix specifically targets performance issues with ColdFusion and the fact 
that it seems to ask for updatable result sets and touch the insert row no 
matter what the application does with them.

- - Added configuration property "useDynamicCharsetInfo". If set to "false" 
(the default), the driver will use a per-connection cache of character set 
information queried from the server when necessary, or when set to "true", use 
a built-in static mapping that is more efficient, but isn't aware of  custom 
character sets or character sets implemented after the release of the JDBC 
driver.
          
          Note: this only affects the "padCharsWithSpace" configuration 
property and the          ResultSetMetaData.getColumnDisplayWidth() method.

- ----------------------
Usability Improvements
- ----------------------

- - Give better error message when "streaming" result sets, and the connection 
gets clobbered because of exceeding net_write_timeout on the server. (which is 
basically what the error message says too).

- - Fixed BUG#27317 - ResultSet.get*() with a column index < 1 returns  
misleading error message.

- - com.mysql.jdbc.[NonRegistering]Driver now understands URLs of the format 
"jdbc:mysql:replication://" and "jdbc:mysql:loadbalance://" which will create a 
ReplicationConnection (exactly like when using 
[NonRegistering]ReplicationDriver) and an experimenal load-balanced connection 
designed for use with SQL nodes in a MySQL Cluster/NDB environment, 
respectively.
          
In an effort to simplify things, we're working on deprecating multiple drivers, 
and instead specifying different core behavior based upon JDBC URL prefixes, so 
watch for [NonRegistering]ReplicationDriver to eventually disappear, to be 
replaced with com.mysql.jdbc[NonRegistering]Driver with the new URL prefix.

- - Fixed BUG#28085 - Generate more useful error messages for diagnostics when 
the driver thinks a result set isn't updatable. (Thanks to Ashley Martens for 
the patch).

- -----------------
Defects Addressed
- ----------------- 

- - Fixed BUG#25545 - Client options not sent correctly when using SSL, leading 
to stored procedures not being able to return results. Thanksto Don Cohen for 
the bug report, testcase and patch.

- - Fixed BUG#26592 - PreparedStatement is not closed in 
BlobFromLocator.getBytes().

- - Fixed BUG#25624 - Whitespace surrounding storage/size specifiers in stored 
procedure parameters declaration causes NumberFormatException to be thrown when 
calling stored procedure on JDK-1.5 or newer, as the Number classes in JDK-1.5+ 
are whitespace intolerant.         
          
- - Fixed BUG#26173 - When useCursorFetch=true, sometimes server would return 
new, more exact metadata during the execution of the server-side prepared 
statement that enables this functionality, which the driver ignored (using the 
original metadata returned during prepare()), causing corrupt reading of data 
due to type mismatch when the actual rows were returned.

- - Fixed BUG#26959 - comments in DDL of stored procedures/functions confuse 
procedure parser, and thus metadata about them can not be created, leading to 
inability to retrieve said metadata, or execute procedures that have certain 
comments in them.

- - Fixed BUG#26789 - fast date/time parsing doesn't take into account 00:00:00 
as a legal value.
         
- - Fixed BUG#25517 - Statement.setMaxRows() is not effective on result sets 
materialized from cursors.
          
- - New configuration property, "enableQueryTimeouts" (default "true"). When 
enabled, query timeouts set via Statement.setQueryTimeout() use a shared 
java.util.Timer instance for scheduling. Even if the timeout doesn't expire 
before the query is processed, there will be  memory used by the TimerTask for 
the given timeout which won't be reclaimed until the time the timeout would 
have expired if it hadn't been cancelled by the driver. High-load environments 
might want to consider disabling this functionality. (this configuration 
property is part of the "maxPerformance" configuration bundle).
        
- - Fixed BUG#27400 - CALL /* ... */ some_proc() doesn't work. As a side effect 
of this fix, you can now use /* */ and # comments when preparing statements 
using client-side prepared statement emulation.
          
If the comments happen to contain parameter markers '?', they will be treated 
as belonging to the comment (i.e. not recognized) rather than being a parameter 
of the statement.
          
Note that the statement when sent to the server will contain the comments 
as-is, they're not stripped during the process of preparing the 
PreparedStatement or CallableStatement.
          
- - Fixed BUG#25328 - BIT(> 1) is returned as java.lang.String from 
ResultSet.getObject() rather than byte[].
          
- - Fixed BUG#25715 - CallableStatements with OUT/INOUT parameters that are 
"binary" (blobs, bits, (var)binary, java_object) have extra 7 bytes (which 
happens to be the _binary introducer!)
        
- - Added configuration property "padCharsWithSpace" (defaults to "false"). If 
set to "true", and a result set column has the CHAR type and the value does not 
fill the amount of characters specified in the DDL for the column, the driver 
will pad the remaining characters with space (for ANSI compliance).
        
- - Fixed issue where calling getGeneratedKeys() on a prepared statement after 
calling execute() didn't always return the generated keys (executeUpdate() 
worked fine however).
        
- - Fixed issue where a failed-over connection would let an application call 
setReadOnly(false), when that call should be ignored until the connection is 
reconnected to a writable master unless "failoverReadOnly" had been set to 
"false".

Regards,

        -Mark

- -- 
Mark Matthews, Architect (Client Connectivity)
MySQL, Inc. Chicago, USA - www.mysql.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (MingW32)

iD8DBQFGSzx5tvXNTca6JD8RAn82AJ0cJmk/7Nu8QC1wx/Wtyn3ViJy0dACgjYRE
BloROrmlfdHJU72MwJMn5bc=
=trY9
-----END PGP SIGNATURE-----


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to