-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi,
MySQL Connector/J 5.0.5 a new version of the Type-IV pure-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.5 is suitable for use with any MySQL version including MySQL-4.1, MySQL-5.0, MySQL-5.1 beta or the MySQL-5.2 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. Performance Improvements: * Improved speed of datetime parsing for ResultSets that come from plain or non-server-side prepared statements. If any regressions are noticed, you can enable the old implementation with useFastDateParsing=false as a configuration parameter. * Reverted back to internal character conversion routines for single-byte character sets, as the ones internal to the JVM are using much more CPU time than our internal implementation. * Changed cached result set metadata (when using cacheResultSetMetadata=true) to be cached per-connection rather than per-statement as previously implemented. * Use a java.util.TreeMap to map column names to ordinal indexes for ResultSet.findColumn() instead of a HashMap. This allows us to have case-insensitive lookups (required by the JDBC specification) without resorting to the many transient object instances needed to support this requirement with a normal HashMap with either case-adjusted keys, or case-insensitive keys. (In the worst case scenario for lookups of a 1000 column result set, TreeMaps are about half as fast wall-clock time as a HashMap, however in normal applications their use gives many orders of magnitude reduction in transient object instance creation which pays off later for CPU usage in garbage collection). * Avoid static synchronized code in JVM class libraries for dealing with default timezones. * Fixed cases where ServerPreparedStatements weren't using cached metadata when cacheResultSetMetadata=true was used. * When using cached metadata, skip field-level metadata packets coming from the server, rather than reading them and discarding them without creating com.mysql.jdbc.Field instances. Functionality added or changed: * Important change: Due to a number of issues with the server's implementation of server-side prepared statements, Connector/J 5.0.5 has disabled their use by default. The disabling of server-side prepared statements does not affect the operation of the connector in any way, except for the case where the connection was configured with "useTimezone=true". If so, see the bugfix note for "useSSPSCompatibleTimezoneShift". To enable server-side prepared statements you must add the following configuration property to your connector string: useServerPrepStmts=true The default value of this property is false (i.e. Connector/J does not use server-side prepared statements, and won't until they've matured). If you have an application that already works well with server-side prepared statements, it is reasonable to enable them. * The rewriteBatchedStatements feature can now be used with server-side prepared statements. * Usage Advisor now detects empty results sets and does not report on columns not referenced in those empty sets. * Usage Advisor will now issue warnings for result sets with large numbers of rows. You can configure the trigger value by using the resultSetSizeThreshold parameter, which has a default value of 100. * Added configuration property localSocketAddress,which is the hostname or IP address given to explicitly configure the interface that the driver will bind the client side of the TCP/IP connection to when connecting. * We've added a new configuration option treatUtilDateAsTimestamp, which is false by default, as (1) We already had specific behavior to treat java.util.Date as a java.sql.Timestamp because it's useful to many folks, and (2) that behavior will very likely be required for drivers JDBC-post-4.0. * Fixed logging of XA commands sent to server, it's now configurable via logXaCommands property (defaults to false). Bugs fixed: * Fixed an issue where XADataSources couldn't be bound into JNDI, as the DataSourceFactory didn't know how to create instances of them. * Calling Statement.cancel() could result in a Null Pointer Exception (NPE). (Bug#24721) * Calendars and timezones are now lazily instantiated when required. (Bug#24351) * Client-side prepared statement parser gets confused by in-line comments /*...*/ and therefore cannot rewrite batch statements or reliably detect the type of statements when they are used. (Bug#25025) * When using a JDBC connection URL that is malformed, the NonRegisteringDriver.getPropertyInfo() method will throw a Null Pointer Exception (NPE). (Bug#22628) * Using DatabaseMetaData.getSQLKeywords() does not return a all of the of the reserved keywords for the current MySQL version. Current implementation returns the list of reserved words for MySQL 5.1, and does not distinguish between versions. (Bug#24794) * Specifying US-ASCII as the character set in a connection to a MySQL 4.1 or newer server does not map correctly. (Bug#24840) Storing a java.util.Date object in a BLOB column would not be serialized correctly during setObject. (Bug#25787) * A query execution which timed out did not always throw a MySQLTimeoutException. (Bug#25836) * A connection error would occur when connecting to a MySQL server with certain character sets. Some collations/character sets reported as "unknown" (specifically "cias" variants of existing character sets), and inability to override the detected server character set. (Bug#23645) * Using setFetchSize() breaks prepared SHOW and other commands. (Bug#24360) * Using DATETIME columns would result in time shifts when useServerPrepStmts was true. The reason was due to different behavior when using client-side compared to server-side prepared statements and the * useJDBCCompliantTimezoneShift option. This is now fixed if moving from server-side prepared statements to client-side prepared statements by setting useSSPSCompatibleTimezoneShift to true, as the driver can't tell if this is a new deployment that never used server-side prepared statements, or if it is an existing deployment that is switching to client-side prepared statements from server-side prepared statements. (Bug#24344) * Inconsistency between getSchemas and INFORMATION_SCHEMA. (Bug#23304) When using the rewriteBatchedStatements connection option with PreparedState.executeBatch() an internal memory leak would occur. (Bug#25073) * Fixed issue where field-level for metadata from DatabaseMetaData when using INFORMATION_SCHEMA didn't have references to current connections, sometimes leading to Null Pointer Exceptions (NPEs) when introspecting them via ResultSetMetaData. * Connector/J now returns a better error message when server doesn't return enough information to determine stored procedure/function parameter types. (Bug#24065) * When using server-side prepared statements and timestamp columns, value would be incorrectly populated (with nanoseconds, not microseconds). (Bug#21438) * Timer instance used for Statement.setQueryTimeout() created per-connection, rather than per-VM, causing memory leak. (Bug#25514) * Results sets from UPDATE statements that are part of multi-statement queries would cause an SQLException error, "Result is from UPDATE". (Bug#25009) * StringUtils.indexOfIgnoreCaseRespectQuotes() isn't case-insensitive on the first character of the target. This bug also affected rewriteBatchedStatements functionality when prepared statements did not use uppercase for the VALUES clause. (Bug#25047) * Some exceptions thrown out of StandardSocketFactory were needlessly wrapped, obscuring their true cause, especially when using socket timeouts. (Bug#21480) * DatabaseMetaData.getSchemas() doesn't return a TABLE_CATALOG column. (Bug#23303) * EscapeProcessor gets confused by multiple backslashes. We now push the responsibility of syntax errors back on to the server for most escape sequences. (Bug#25399) * INOUT parameters in CallableStatements get doubly-escaped. (Bug#25379) * Connection property socketFactory wasn't exposed via correctly named mutator/accessor, causing data source implementations that use JavaBean naming conventions to set properties to fail to set the property (and in the case of Sun Java Application Server, fail silently when trying to set this parameter). (Bug#26326) * ParameterMetaData throws NullPointerException when prepared SQL actually has a syntax error. Added generateSimpleParameterMetadata configuration property, which when set to true will generate metadata reflecting VARCHAR for every parameter (the default is false, which will cause an exception to be thrown if no parameter metadata for the statement is actually available). (Bug#21267) - -------------- Other changes: - -------------- * Performance enhancement of initial character set configuration, driver will only send commands required to configure connection character set session variables if the current values on the server do not match what is required. * Re-worked stored procedure parameter parser to be more robust. Driver no longer requires BEGIN in stored procedure definition, but does have requirement that if a stored function begins with a label directly after the "returns" clause, that the label is not a quoted identifier. * Throw exceptions caused due to statement timeout to the thread calling Statement.execute*() on the statement that timed out, rather than a RuntimeException. * Take localSocketAddress property into account when creating instances of CommunicationsException when the underyling exception is a java.net.BindException, so that a friendlier error message is given with a little internal diagnostics. * Fixed some Null Pointer Exceptions (NPEs) when cached metadata was used with UpdatableResultSets. * When extracting foreign key information from SHOW CREATE TABLE in DatabaseMetaData, ignore exceptions relating to tables being missing (which could happen for cross-reference or imported-key requests, as the list of tables is generated first, then iterated). Regards, -Mark - -- Mark Matthews <[EMAIL PROTECTED]> MySQL AB, Architect - Client Connectivity http://www.mysql.com/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (MingW32) iD8DBQFF54YutvXNTca6JD8RArb3AJsGgXqqmcwTyCn6p4eAqggpeyQjsQCgrB/p UiQkeK5IXUVzPTUoMJWQPgM= =kuhu -----END PGP SIGNATURE----- -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]