From: Date: March 2 2007 3:04am Subject: MySQL Connector/J 5.0.5 Has Been Released List-Archive: http://lists.mysql.com/announce/438 Message-Id: <018701c75c6f$1ed94830$b91da8c0@marksworkbox> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable -----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=3Dfalse 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.=20 * Changed cached result set metadata (when using = cacheResultSetMetadata=3Dtrue) to be cached per-connection rather than = per-statement as previously implemented.=20 * 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).=20 * Avoid static synchronized code in JVM class libraries for dealing with = default timezones.=20 * Fixed cases where ServerPreparedStatements weren't using cached = metadata when cacheResultSetMetadata=3Dtrue was used.=20 * 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.=20 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=3Dtrue". 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:=20 useServerPrepStmts=3Dtrue 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.=20 * 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.=20 * 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.=20 * 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.=20 * Fixed logging of XA commands sent to server, it's now configurable via = logXaCommands property (defaults to false).=20 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.=20 * Calling Statement.cancel() could result in a Null Pointer Exception = (NPE). (Bug#24721)=20 * Calendars and timezones are now lazily instantiated when required. = (Bug#24351)=20 * 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)=20 * When using a JDBC connection URL that is malformed, the = NonRegisteringDriver.getPropertyInfo() method will throw a Null Pointer = Exception (NPE). (Bug#22628)=20 * 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)=20 * 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)=20 * A query execution which timed out did not always throw a = MySQLTimeoutException. (Bug#25836)=20 * 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)=20 * Using setFetchSize() breaks prepared SHOW and other commands. = (Bug#24360)=20 * 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=20 * 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)=20 * 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)=20 * 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.=20 * Connector/J now returns a better error message when server doesn't = return enough information to determine stored procedure/function = parameter types. (Bug#24065)=20 * When using server-side prepared statements and timestamp columns, = value would be incorrectly populated (with nanoseconds, not = microseconds). (Bug#21438)=20 * Timer instance used for Statement.setQueryTimeout() created = per-connection, rather than per-VM, causing memory leak. (Bug#25514)=20 * Results sets from UPDATE statements that are part of multi-statement = queries would cause an SQLException error, "Result is from UPDATE". = (Bug#25009)=20 * 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)=20 * Some exceptions thrown out of StandardSocketFactory were needlessly = wrapped, obscuring their true cause, especially when using socket = timeouts. (Bug#21480)=20 * DatabaseMetaData.getSchemas() doesn't return a TABLE_CATALOG column. = (Bug#23303)=20 * 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)=20 * 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)=20 * 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)=20 - -------------- Other changes:=20 - -------------- * 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.=20 * 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.=20 * Throw exceptions caused due to statement timeout to the thread calling = Statement.execute*() on the statement that timed out, rather than a = RuntimeException.=20 * 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.=20 * Fixed some Null Pointer Exceptions (NPEs) when cached metadata was = used with UpdatableResultSets.=20 * 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 MySQL AB, Architect - Client Connectivity http://www.mysql.com/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (MingW32) iD8DBQFF54YutvXNTca6JD8RArb3AJsGgXqqmcwTyCn6p4eAqggpeyQjsQCgrB/p UiQkeK5IXUVzPTUoMJWQPgM=3D =3Dkuhu -----END PGP SIGNATURE-----