-----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]