From: Date: October 11 2007 3:12pm Subject: svn commit - mysqldoc@docsrva: r8052 - in trunk: dynamic-docs/changelog refman-common List-Archive: http://lists.mysql.com/commits/35351 Message-Id: <200710111312.l9BDCqQl004585@docsrva.mysql.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Author: mcbrown Date: 2007-10-11 15:12:50 +0200 (Thu, 11 Oct 2007) New Revision: 8052 Log: Converting the remaining versions of the C/J to the dynamic changelog Update the DTD structure for versions to allow version type tagging (release, alpha, beta etc) Modified: trunk/dynamic-docs/changelog/connector-j-versions.xml trunk/dynamic-docs/changelog/connector-j.xml trunk/dynamic-docs/changelog/versionlog.dtd trunk/refman-common/news-cj-core.xml Modified: trunk/dynamic-docs/changelog/connector-j-versions.xml =================================================================== --- trunk/dynamic-docs/changelog/connector-j-versions.xml 2007-10-11 12:29:15 UTC (rev 8051) +++ trunk/dynamic-docs/changelog/connector-j-versions.xml 2007-10-11 13:12:50 UTC (rev 8052) Changed blocks: 2, Lines Added: 28, Lines Deleted: 5; 2255 bytes @@ -24,15 +24,38 @@ - + - + + Not released due to a packaging error + - + + + Important change: Due to a + number of issues with the use 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. + + + + 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 + (that is, Connector/J does not use server-side prepared + statements). + + @@ -60,9 +83,9 @@ - + - + Modified: trunk/dynamic-docs/changelog/connector-j.xml =================================================================== --- trunk/dynamic-docs/changelog/connector-j.xml 2007-10-11 12:29:15 UTC (rev 8051) +++ trunk/dynamic-docs/changelog/connector-j.xml 2007-10-11 13:12:50 UTC (rev 8052) Changed blocks: 8, Lines Added: 11, Lines Deleted: 17; 3397 bytes @@ -2350,7 +2350,7 @@ Should accept null for name patterns in DBMD - (meaning ‘%’), even though it + (meaning %), even though it isn't JDBC compliant, for legacy's sake. Disable by setting connection property nullNamePatternMatchesAll to false (which will be the default value in @@ -2375,9 +2375,9 @@ Quoted identifiers not used if server version does not support them. Also, if server started with or , - ‘"’ will be used as an + " will be used as an identifier quote character, otherwise - ‘'’ will be used. + ' will be used. @@ -6343,14 +6343,8 @@ - + - - - - - - @@ -9247,7 +9241,7 @@ The configuration property sessionVariables now allows you to specify variables that start with the - ‘@’ sign. + @ sign. @@ -12353,8 +12347,8 @@ URL configuration parameters don't allow - ‘&’ or - ‘=’ in their values. The JDBC + & or + = in their values. The JDBC driver now parses configuration parameters as if they are encoded using the application/x-www-form-urlencoded format as specified by java.net.URLDecoder @@ -12362,10 +12356,10 @@ - If the ‘%’ character is present + If the % character is present in a configuration property, it must now be represented as %25, which is the encoded form of - ‘%’ when using + % when using application/x-www-form-urlencoded encoding. @@ -15436,7 +15430,7 @@ Stored procedures with DECIMAL parameters with storage specifications that contained - ‘,’ in them would fail. + , in them would fail. @@ -17795,7 +17789,7 @@ Handle case when string representation of timestamp contains - trailing ‘.’ with no numbers + trailing . with no numbers following it. Modified: trunk/dynamic-docs/changelog/versionlog.dtd =================================================================== --- trunk/dynamic-docs/changelog/versionlog.dtd 2007-10-11 12:29:15 UTC (rev 8051) +++ trunk/dynamic-docs/changelog/versionlog.dtd 2007-10-11 13:12:50 UTC (rev 8052) Changed blocks: 1, Lines Added: 1, Lines Deleted: 0; 514 bytes @@ -10,3 +10,4 @@ + Modified: trunk/refman-common/news-cj-core.xml =================================================================== --- trunk/refman-common/news-cj-core.xml 2007-10-11 12:29:15 UTC (rev 8051) +++ trunk/refman-common/news-cj-core.xml 2007-10-11 13:12:50 UTC (rev 8052) Changed blocks: 4, Lines Added: 102, Lines Deleted: 6714; 227678 bytes @@ -147,472 +147,42 @@
- Changes in MySQL Connector/J 5.0.4 (20 October 2006) + - <para> - Bugs fixed: - </para> + <para condition="dynamic:changelog:entrylist" role="5.0.4:connector-j:all"/> - <itemizedlist> - - <listitem> - <para> - Column names don't match metadata in cases where server - doesn't return original column names (column functions) thus - breaking compatibility with applications that expect 1-1 - mappings between findColumn() and rsmd.getColumnName(), - usually manifests itself as "Can't find column ('')" - exceptions. (Bug #21379) - </para> - </listitem> - - <listitem> - <para> - When using information_schema for metadata, COLUMN_SIZE for - getColumns() is not clamped to range of java.lang.Integer as - is the case when not using information_schema, thus leading - to a truncation exception that isn't present when not using - information_schema. (Bug #21544) - </para> - </listitem> - - <listitem> - <para> - Newlines causing whitespace to span confuse procedure parser - when getting parameter metadata for stored procedures. (Bug - #22024) - </para> - </listitem> - - <listitem> - <para> - Driver was using milliseconds for - Statement.setQueryTimeout() when specification says argument - is to be in seconds. (Bug #22359) - </para> - </listitem> - - <listitem> - <para> - Workaround for server crash when calling stored procedures - via a server-side prepared statement (driver now detects - prepare(stored procedure) and substitutes client-side - prepared statement). (Bug #22297) - </para> - </listitem> - - <listitem> - <para> - Added new _ci collations to CharsetMapping - utf8_unicode_ci - not working. (Bug #22456) - </para> - </listitem> - - <listitem> - <para> - Driver issues truncation on write exception when it - shouldn't (due to sending big decimal incorrectly to server - with server-side prepared statement). (Bug #22290) - </para> - </listitem> - - <listitem> - <para> - DBMD.getColumns() does not return expected COLUMN_SIZE for - the SET type, now returns length of largest possible set - disregarding whitespace or the "," delimitters to be - consistent with the ODBC driver. (Bug #22613) - </para> - </listitem> - - </itemizedlist> - - <para> - Other changes: - </para> - - <itemizedlist> - - <listitem> - <para> - Fixed configuration property - <literal>jdbcCompliantTruncation</literal> was not being - used for reads of result set values. - </para> - </listitem> - - <listitem> - <para> - Driver now supports <literal>{call sp}</literal> (without - "()" if procedure has no arguments). - </para> - </listitem> - - <listitem> - <para> - Driver now sends numeric 1 or 0 for client-prepared - statement <literal>setBoolean()</literal> calls instead of - '1' or '0'. - </para> - </listitem> - - <listitem> - <para> - DatabaseMetaData correctly reports <literal>true</literal> - for <literal>supportsCatalog*()</literal> methods. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-5-0-3"> - <title>Changes in MySQL Connector/J 5.0.3 (26 July 2006) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="5.0.3:connector-j:all"/> - <listitem> - <para> - Fixed <literal>Statement.cancel()</literal> causes - <literal>NullPointerException</literal> if underlying - connection has been closed due to server failure. (Bug - #20650) - </para> - </listitem> - - <listitem> - <para> - Added configuration option - <literal>noAccessToProcedureBodies</literal> which will - cause the driver to create basic parameter metadata for - <literal>CallableStatements</literal> when the user does not - have access to procedure bodies via <literal>SHOW CREATE - PROCEDURE</literal> or selecting from - <literal>mysql.proc</literal> instead of throwing an - exception. The default value for this option is - <literal>false</literal> - </para> - </listitem> - - </itemizedlist> - - <para> - Bugs fixed: - </para> - - <itemizedlist> - - <listitem> - <para> - If the connection to the server has been closed due to a - server failure, then the cleanup process will call <literal> - Statement.cancel()</literal>, triggering a - <literal>NullPointerException</literal>, even though there - is no active connection. (Bug #20650) - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-5-0-2"> - <title>Changes in MySQL Connector/J 5.0.2-beta (11 July 2006) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="5.0.2:connector-j:all"/> - <listitem> - <para> - Fixed can't use <literal>XAConnection</literal> for local - transactions when no global transaction is in progress. (Bug - #17401) - </para> - </listitem> - - <listitem> - <para> - Fixed driver fails on non-ASCII platforms. The driver was - assuming that the platform character set would be a superset - of MySQL's <literal>latin1</literal> when doing the - handshake for authentication, and when reading error - messages. We now use Cp1252 for all strings sent to the - server during the handshake phase, and a hard-coded mapping - of the <literal>language</literal> systtem variable to the - character set that is used for error messages. (Bug #18086) - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ConnectionProperties</literal> (and thus some - subclasses) are not serializable, even though some J2EE - containers expect them to be. (Bug #19169) - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>MysqlValidConnectionChecker</literal> for - JBoss doesn't work with - <literal>MySQLXADataSources</literal>. (Bug #20242) - </para> - </listitem> - - <listitem> - <para> - Better caching of character set converters (per-connection) - to remove a bottleneck for multibyte character sets. - </para> - </listitem> - - <listitem> - <para> - Added connection/datasource property - <literal>pinGlobalTxToPhysicalConnection</literal> (defaults - to <literal>false</literal>). When set to - <literal>true</literal>, when using - <literal>XAConnections</literal>, the driver ensures that - operations on a given XID are always routed to the same - physical connection. This allows the - <literal>XAConnection</literal> to support <literal>XA START - ... JOIN</literal> after <literal>XA END</literal> has been - called, and is also a workaround for transaction managers - that don't maintain thread affinity for a global transaction - (most either always maintain thread affinity, or have it as - a configuration option). - </para> - </listitem> - - <listitem> - <para> - <literal>MysqlXaConnection.recover(int flags)</literal> now - allows combinations of - <literal>XAResource.TMSTARTRSCAN</literal> and - <literal>TMENDRSCAN</literal>. To simulate the - <quote>scanning</quote> nature of the interface, we return - all prepared XIDs for <literal>TMSTARTRSCAN</literal>, and - no new XIDs for calls with <literal>TMNOFLAGS</literal>, or - <literal>TMENDRSCAN</literal> when not in combination with - <literal>TMSTARTRSCAN</literal>. This change was made for - API compliance, as well as integration with IBM WebSphere's - transaction manager. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-5-0-1"> - <title>Changes in MySQL Connector/J 5.0.1-beta (Not Released) + - <para> - Not released due to a packaging error - </para> + <para condition="dynamic:changelog:entrylist" role="5.0.1:connector-j:all"/> </section> <section id="cj-news-5-0-0"> - <title>Changes in MySQL Connector/J 5.0.0-beta (22 December 2005) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="5.0.0:connector-j:all"/> - <listitem> - <para> - <literal>XADataSource</literal> implemented (ported from 3.2 - branch which won't be released as a product). Use - <literal>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</literal> - as your datasource class name in your application server to - utilize XA transactions in MySQL-5.0.10 and newer. - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatement.setString()</literal> didn't work - correctly when <literal>sql_mode</literal> on server - contained <literal>NO_BACKSLASH_ESCAPES</literal> and no - characters that needed escaping were present in the string. - </para> - </listitem> - - <listitem> - <para> - Attempt detection of the MySQL type - <literal>BINARY</literal> (it's an alias, so this isn't - always reliable), and use the - <literal>java.sql.Types.BINARY</literal> type mapping for - it. - </para> - </listitem> - - <listitem> - <para> - Moved <filename>-bin-g.jar</filename> file into separate - <filename>debug</filename> subdirectory to avoid confusion. - </para> - </listitem> - - <listitem> - <para> - Don't allow <literal>.setAutoCommit(true)</literal>, or - <literal>.commit()</literal> or - <literal>.rollback()</literal> on an XA-managed connection - as per the JDBC specification. - </para> - </listitem> - - <listitem> - <para> - If the connection <literal>useTimezone</literal> is set to - <literal>true</literal>, then also respect time zone - conversions in escape-processed string literals (for - example, <literal>"{ts ...}"</literal> and <literal>"{t - ...}"</literal>). - </para> - </listitem> - - <listitem> - <para> - Return original column name for - <literal>RSMD.getColumnName()</literal> if the column was - aliased, alias name for <literal>.getColumnLabel()</literal> - (if aliased), and original table name for - <literal>.getTableName()</literal>. Note this only works for - MySQL-4.1 and newer, as older servers don't make this - information available to clients. - </para> - </listitem> - - <listitem> - <para> - Setting - <literal>useJDBCCompliantTimezoneShift=true</literal> (it's - not the default) causes the driver to use GMT for - <emphasis>all</emphasis> - <literal>TIMESTAMP</literal>/<literal>DATETIME</literal> - time zones, and the current VM time zone for any other type - that refers to time zones. This feature can not be used when - <literal>useTimezone=true</literal> to convert between - server and client time zones. - </para> - </listitem> - - <listitem> - <para> - Add one level of indirection of internal representation of - <literal>CallableStatement</literal> parameter metadata to - avoid class not found issues on JDK-1.3 for - <literal>ParameterMetadata</literal> interface (which - doesn't exist prior to JDBC-3.0). - </para> - </listitem> - - <listitem> - <para> - Added unit tests for <literal>XADatasource</literal>, as - well as friendlier exceptions for XA failures compared to - the "stock" <literal>XAException</literal> (which has no - messages). - </para> - </listitem> - - <listitem> - <para> - Idle timeouts cause <literal>XAConnections</literal> to - whine about rolling themselves back. (Bug #14729) - </para> - </listitem> - - <listitem> - <para> - Added support for Connector/MXJ integration via url - subprotocol <literal>jdbc:mysql:mxj://...</literal>. - </para> - </listitem> - - <listitem> - <para> - Moved all <literal>SQLException</literal> constructor usage - to a factory in <literal>SQLError</literal> (ground-work for - JDBC-4.0 <literal>SQLState</literal>-based exception - classes). - </para> - </listitem> - - <listitem> - <para> - Removed Java5-specific calls to - <literal>BigDecimal</literal> constructor (when result set - value is <literal>''</literal>, <literal>(int)0</literal> - was being used as an argument indirectly via method return - value. This signature doesn't exist prior to Java5.) - </para> - </listitem> - - <listitem> - <para> - Added service-provider entry to - <filename>META-INF/services/java.sql.Driver</filename> for - JDBC-4.0 support. - </para> - </listitem> - - <listitem> - <para> - Return "[VAR]BINARY" for - <literal>RSMD.getColumnTypeName()</literal> when that is - actually the type, and it can be distinguished (MySQL-4.1 - and newer). - </para> - </listitem> - - <listitem> - <para> - When fix for Bug #14562 was merged from 3.1.12, added - functionality for <literal>CallableStatement</literal>'s - parameter metadata to return correct information for - <literal>.getParameterClassName()</literal>. - </para> - </listitem> - - <listitem> - <para> - Fuller synchronization of <literal>Connection</literal> to - avoid deadlocks when using multithreaded frameworks that - multithread a single connection (usually not recommended, - but the JDBC spec allows it anyways), part of fix to Bug - #14972). - </para> - </listitem> - - <listitem> - <para> - Implementation of <literal>Statement.cancel()</literal> and - <literal>Statement.setQueryTimeout()</literal>. Both require - MySQL-5.0.0 or newer server, require a separate connection - to issue the <literal>KILL QUERY</literal> statement, and in - the case of <literal>setQueryTimeout()</literal> creates an - additional thread to handle the timeout functionality. - </para> - - <para> - Note: Failures to cancel the statement for - <literal>setQueryTimeout()</literal> may manifest themselves - as <literal>RuntimeExceptions</literal> rather than failing - silently, as there is currently no way to unblock the thread - that is executing the query being cancelled due to timeout - expiration and have it throw the exception instead. - </para> - </listitem> - - </itemizedlist> - </section> </section> @@ -623,3289 +193,130 @@ <section id="cj-news-3-1-15"> - <title>Changes in MySQL Connector/J 3.1.15 (Not yet released) + - <para> - <emphasis role="bold">Important change:</emphasis> Due to a - number of issues with the use 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. - </para> + <para condition="dynamic:changelog:entrylist" role="3.1.15:connector-j:all"/> - <para> - To enable server-side prepared statements you must add the - following configuration property to your connector string: - </para> - -<programlisting>useServerPrepStmts=true</programlisting> - - <para> - The default value of this property is <literal>false</literal> - (that is, Connector/J does not use server-side prepared - statements). - </para> - - <para> - Bugs fixed: - </para> - - <itemizedlist> - - <listitem> - <para> - Specifying <literal>US-ASCII</literal> as the character set - in a connection to a MySQL 4.1 or newer server does not map - correctly. (Bug #24840) - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-14"> - <title>Changes in MySQL Connector/J 3.1.14 (10-19-2006) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.14:connector-j:all"/> - <listitem> - <para> - Fixed updatable result set throws ClassCastException when - there is row data and moveToInsertRow() is called. (Bug - #20479) - </para> - </listitem> - - <listitem> - <para> - Fixed Updatable result set that contains a BIT column fails - when server-side prepared statements are used. (Bug #20485) - </para> - </listitem> - - <listitem> - <para> - Fixed memory leak with profileSQL=true. (Bug #16987) - </para> - </listitem> - - <listitem> - <para> - Connection fails to localhost when using timeout and IPv6 is - configured. (Bug #19726) - </para> - </listitem> - - <listitem> - <para> - Fixed NullPointerException in MysqlDataSourceFactory due to - Reference containing RefAddrs with null content. (Bug - #16791) - </para> - </listitem> - - <listitem> - <para> - Fixed ResultSet.getShort() for UNSIGNED TINYINT returns - incorrect values when using server-side prepared statements. - (Bug #20306) - </para> - </listitem> - - <listitem> - <para> - Fixed can't pool server-side prepared statements, exception - raised when re-using them. (Bug #20687) - </para> - </listitem> - - <listitem> - <para> - ResultSet.getSomeInteger() doesn't work for BIT(>1). (Bug - #21062) - </para> - </listitem> - - <listitem> - <para> - ResultSet.getFloatFromString() can't retrieve values near - Float.MIN/MAX_VALUE. (Bug #18880) - </para> - </listitem> - - <listitem> - <para> - Escape of quotes in client-side prepared statements parsing - not respected. Patch covers more than bug report, including - NO_BACKSLASH_ESCAPES being set, and stacked quote characters - forms of escaping (that is, '' or ""). (Bug - #20888) - </para> - </listitem> - - <listitem> - <para> - ReplicationDriver does not always round-robin load balance - depending on URL used for slaves list. (Bug #19993) - </para> - </listitem> - - <listitem> - <para> - Fixed calling toString() on ResultSetMetaData for - driver-generated (that is, from DatabaseMetaData method - calls, or from getGeneratedKeys()) result sets would raise a - NullPointerException. - </para> - </listitem> - - <listitem> - <para> - DDriver throws NPE when tracing prepared statements that - have been closed (in asSQL()). (Bug #21207) - </para> - </listitem> - - <listitem> - <para> - Removed logger autodetection altogether, must now specify - logger explicitly if you want to use a logger other than one - that logs to STDERR. - </para> - </listitem> - - <listitem> - <para> - Driver issues truncation on write exception when it - shouldn't (due to sending big decimal incorrectly to server - with server-side prepared statement). (Bug #22290) - </para> - </listitem> - - <listitem> - <para> - Driver now sends numeric 1 or 0 for client-prepared - statement setBoolean() calls instead of '1' or '0'. - </para> - </listitem> - - <listitem> - <para> - Fixed bug where driver would not advance to next host if - roundRobinLoadBalance=true and the last host in the list is - down. - </para> - </listitem> - - <listitem> - <para> - Fixed BUG#18258 - DatabaseMetaData.getTables(), columns() - with bad catalog parameter threw exception rather than - return empty result set (as required by spec). - </para> - </listitem> - - <listitem> - <para> - Check and store value for continueBatchOnError property in - constructor of Statements, rather than when executing - batches, so that Connections closed out from underneath - statements don't cause NullPointerExceptions when it's - required to check this property. - </para> - </listitem> - - <listitem> - <para> - Fixed bug when calling stored functions, where parameters - weren't numbered correctly (first parameter is now the - return value, subsequent parameters if specified start at - index "2"). - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-13"> - <title>Changes in MySQL Connector/J 3.1.13 (26 May 2006) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.13:connector-j:all"/> - <listitem> - <para> - <literal>INOUT</literal> parameter does not store - <literal>IN</literal> value. (Bug #15464) - </para> - </listitem> - - <listitem> - <para> - Exception thrown for new decimal type when using updatable - result sets. (Bug #14609) - </para> - </listitem> - - <listitem> - <para> - No "dos" character set in MySQL > 4.1.0. (Bug #15544) - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatement.setObject()</literal> serializes - <literal>BigInteger</literal> as object, rather than sending - as numeric value (and is thus not complementary to - <literal>.getObject()</literal> on an <literal>UNSIGNED - LONG</literal> type). (Bug #15383) - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getShort()</literal> for - <literal>UNSIGNED TINYINT</literal> returned wrong values. - (Bug #11874) - </para> - </listitem> - - <listitem> - <para> - <filename>lib-nodist</filename> directory missing from - package breaks out-of-box build. (Bug #15676) - </para> - </listitem> - - <listitem> - <para> - <literal>DBMD.getColumns()</literal> returns wrong type for - <literal>BIT</literal>. (Bug #15854) - </para> - </listitem> - - <listitem> - <para> - Fixed issue where driver was unable to initialize character - set mapping tables. Removed reliance on - <literal>.properties</literal> files to hold this - information, as it turns out to be too problematic to code - around class loader hierarchies that change depending on how - an application is deployed. Moved information back into the - <literal>CharsetMapping</literal> class. (Bug #14938) - </para> - </listitem> - - <listitem> - <para> - Fixed updatable result set doesn't return - <literal>AUTO_INCREMENT</literal> values for - <literal>insertRow()</literal> when multiple column primary - keys are used. (the driver was checking for the existence of - single-column primary keys and an autoincrement value > 0 - instead of a straightforward - <literal>isAutoIncrement()</literal> check). (Bug #16841) - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>Statement.getGeneratedKeys()</literal> throws - <literal>NullPointerException</literal> when no query has - been processed. (Bug #17099) - </para> - </listitem> - - <listitem> - <para> - Fixed driver trying to call methods that don't exist on - older and newer versions of Log4j. The fix is not trying to - auto-detect presence of log4j, too many different - incompatible versions out there in the wild to do this - reliably. (Bug #13469) - </para> - - <para> - If you relied on autodetection before, you will need to add - "logger=com.mysql.jdbc.log.Log4JLogger" to your JDBC URL to - enable Log4J usage, or alternatively use the new - "CommonsLogger" class to take care of this. - </para> - </listitem> - - <listitem> - <para> - Added support for Apache Commons logging, use - "com.mysql.jdbc.log.CommonsLogger" as the value for the - "logger" configuration property. - </para> - </listitem> - - <listitem> - <para> - LogFactory now prepends "com.mysql.jdbc.log" to log class - name if it can't be found as-specified. This allows you to - use "short names" for the built-in log factories, for - example "logger=CommonsLogger" instead of - "logger=com.mysql.jdbc.log.CommonsLogger". - </para> - </listitem> - - <listitem> - <para> - Fixed issue with <literal>ReplicationConnection</literal> - incorrectly copying state, doesn't transfer connection - context correctly when transitioning between the same - read-only states. (Bug #15570) - </para> - </listitem> - - <listitem> - <para> - Fixed issue where server-side prepared statements don't - cause truncation exceptions to be thrown when truncation - happens. (Bug #18041) - </para> - </listitem> - - <listitem> - <para> - Added performance feature, re-writing of batched executes - for <literal>Statement.executeBatch()</literal> (for all DML - statements) and - <literal>PreparedStatement.executeBatch()</literal> (for - INSERTs with VALUE clauses only). Enable by using - "rewriteBatchedStatements=true" in your JDBC URL. - </para> - </listitem> - - <listitem> - <para> - Fixed - <literal>CallableStatement.registerOutParameter()</literal> - not working when some parameters pre-populated. Still - waiting for feedback from JDBC experts group to determine - what correct parameter count from - <literal>getMetaData()</literal> should be, however. (Bug - #17898) - </para> - </listitem> - - <listitem> - <para> - Fixed calling <literal>clearParameters()</literal> on a - closed prepared statement causes NPE. (Bug #17587) - </para> - </listitem> - - <listitem> - <para> - Map "latin1" on MySQL server to CP1252 for MySQL > 4.1.0. - </para> - </listitem> - - <listitem> - <para> - Added additional accessor and mutator methods on - ConnectionProperties so that DataSource users can use same - naming as regular URL properties. - </para> - </listitem> - - <listitem> - <para> - Fixed data truncation and <literal>getWarnings()</literal> - only returns last warning in set. (Bug #18740) - </para> - </listitem> - - <listitem> - <para> - Improved performance of retrieving - <literal>BigDecimal</literal>, <literal>Time</literal>, - <literal>Timestamp</literal> and <literal>Date</literal> - values from server-side prepared statements by creating - fewer short-lived instances of <literal>Strings</literal> - when the native type is not an exact match for the requested - type. (Bug #18496) - </para> - </listitem> - - <listitem> - <para> - Fixed aliased column names where length of name > 251 are - corrupted. (Bug #18554) - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSet.wasNull()</literal> not always - reset correctly for booleans when done via conversion for - server-side prepared statements. (Bug #17450) - </para> - </listitem> - - <listitem> - <para> - Fixed invalid classname returned for - <literal>ResultSetMetaData.getColumnClassName()</literal> - for <literal>BIGINT type</literal>. (Bug #19282) - </para> - </listitem> - - <listitem> - <para> - Fixed case where driver wasn't reading server status - correctly when fetching server-side prepared statement rows, - which in some cases could cause warning counts to be off, or - multiple result sets to not be read off the wire. - </para> - </listitem> - - <listitem> - <para> - Driver now aware of fix for <literal>BIT</literal> type - metadata that went into MySQL-5.0.21 for server not - reporting length consistently (Bug #13601). - </para> - </listitem> - - <listitem> - <para> - <literal>Fixed PreparedStatement.setObject(int, Object, - int)</literal> doesn't respect scale of BigDecimals. (Bug - #19615) - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSet.wasNull()</literal> returns - incorrect value when extracting native string from - server-side prepared statement generated result set. (Bug - #19282) - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-12"> - <title>Changes in MySQL Connector/J 3.1.12 (30 November 2005) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.12:connector-j:all"/> - <listitem> - <para> - Fixed client-side prepared statement bug with embedded - <literal>?</literal> characters inside quoted identifiers - (it was recognized as a placeholder, when it was not). - </para> - </listitem> - - <listitem> - <para> - Don't allow <literal>executeBatch()</literal> for - <literal>CallableStatements</literal> with registered - <literal>OUT</literal>/<literal>INOUT</literal> parameters - (JDBC compliance). - </para> - </listitem> - - <listitem> - <para> - Fall back to platform-encoding for - <literal>URLDecoder.decode()</literal> when parsing driver - URL properties if the platform doesn't have a two-argument - version of this method. - </para> - </listitem> - - <listitem> - <para> - Java type conversion may be incorrect for - <literal>MEDIUMINT</literal>. (Bug #14562) - </para> - </listitem> - - <listitem> - <para> - Added configuration property - <literal>useGmtMillisForDatetimes</literal> which when set - to <literal>true</literal> causes - <literal>ResultSet.getDate()</literal>, - <literal>.getTimestamp()</literal> to return correct - millis-since GMT when <literal>.getTime()</literal> is - called on the return value (currently default is - <literal>false</literal> for legacy behavior). - </para> - </listitem> - - <listitem> - <para> - Fixed - <literal>DatabaseMetaData.stores*Identifiers()</literal>: - </para> - - <itemizedlist> - - <listitem> - <para> - If <literal>lower_case_table_names=0</literal> (on - server): - </para> - - <itemizedlist> - - <listitem> - <para> - <literal>storesLowerCaseIdentifiers()</literal> - returns <literal>false</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>storesLowerCaseQuotedIdentifiers()</literal> - returns <literal>false</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>storesMixedCaseIdentifiers()</literal> - returns <literal>true</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>storesMixedCaseQuotedIdentifiers()</literal> - returns <literal>true</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>storesUpperCaseIdentifiers()</literal> - returns <literal>false</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>storesUpperCaseQuotedIdentifiers()</literal> - returns <literal>true</literal> - </para> - </listitem> - - </itemizedlist> - </listitem> - - <listitem> - <para> - If <literal>lower_case_table_names=1</literal> (on - server): - </para> - - <itemizedlist> - - <listitem> - <para> - <literal>storesLowerCaseIdentifiers()</literal> - returns <literal>true</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>storesLowerCaseQuotedIdentifiers()</literal> - returns <literal>true</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>storesMixedCaseIdentifiers()</literal> - returns <literal>false</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>storesMixedCaseQuotedIdentifiers()</literal> - returns <literal>false</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>storesUpperCaseIdentifiers()</literal> - returns <literal>false</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>storesUpperCaseQuotedIdentifiers()</literal> - returns <literal>true</literal> - </para> - </listitem> - - </itemizedlist> - </listitem> - - </itemizedlist> - </listitem> - - <listitem> - <para> - <literal>DatabaseMetaData.getColumns()</literal> doesn't - return <literal>TABLE_NAME</literal> correctly. (Bug #14815) - </para> - </listitem> - - <listitem> - <para> - Escape processor replaces quote character in quoted string - with string delimiter. (Bug #14909) - </para> - </listitem> - - <listitem> - <para> - OpenOffice expects - <literal>DBMD.supportsIntegrityEnhancementFacility()</literal> - to return <literal>true</literal> if foreign keys are - supported by the datasource, even though this method also - covers support for check constraints, which MySQL - <emphasis>doesn't</emphasis> have. Setting the configuration - property - <literal>overrideSupportsIntegrityEnhancementFacility</literal> - to <literal>true</literal> causes the driver to return - <literal>true</literal> for this method. (Bug #12975) - </para> - </listitem> - - <listitem> - <para> - Added - <literal>com.mysql.jdbc.testsuite.url.default</literal> - system property to set default JDBC url for testsuite (to - speed up bug resolution when I'm working in Eclipse). - </para> - </listitem> - - <listitem> - <para> - Unable to initialize character set mapping tables (due to - J2EE classloader differences). (Bug #14938) - </para> - </listitem> - - <listitem> - <para> - Deadlock while closing server-side prepared statements from - multiple threads sharing one connection. (Bug #14972) - </para> - </listitem> - - <listitem> - <para> - <literal>logSlowQueries</literal> should give better info. - (Bug #12230) - </para> - </listitem> - - <listitem> - <para> - Extraneous sleep on <literal>autoReconnect</literal>. (Bug - #13775) - </para> - </listitem> - - <listitem> - <para> - Driver incorrectly closes streams passed as arguments to - <literal>PreparedStatements</literal>. Reverts to legacy - behavior by setting the JDBC configuration property - <literal>autoClosePStmtStreams</literal> to - <literal>true</literal> (also included in the 3-0-Compat - configuration <quote>bundle</quote>). (Bug #15024) - </para> - </listitem> - - <listitem> - <para> - <literal>maxQuerySizeToLog</literal> is not respected. Added - logging of bound values for <literal>execute()</literal> - phase of server-side prepared statements when - <literal>profileSQL=true</literal> as well. (Bug #13048) - </para> - </listitem> - - <listitem> - <para> - Usage advisor complains about unreferenced columns, even - though they've been referenced. (Bug #15065) - </para> - </listitem> - - <listitem> - <para> - Don't increase timeout for failover/reconnect. (Bug #6577) - </para> - </listitem> - - <listitem> - <para> - Process escape tokens in - <literal>Connection.prepareStatement(...)</literal>. (Bug - #15141) You can disable this behavior by setting the JDBC - URL configuration property - <literal>processEscapeCodesForPrepStmts</literal> to - <literal>false</literal>. - </para> - </listitem> - - <listitem> - <para> - Reconnect during middle of <literal>executeBatch()</literal> - should not occur if <literal>autoReconnect</literal> is - enabled. (Bug #13255) - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-11"> - <title>Changes in MySQL Connector/J 3.1.11-stable (07 October 2005) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.11:connector-j:all"/> - <listitem> - <para> - Spurious <literal>!</literal> on console when character - encoding is <literal>utf8</literal>. (Bug #11629) - </para> - </listitem> - - <listitem> - <para> - Fixed statements generated for testcases missing - <literal>;</literal> for <quote>plain</quote> statements. - </para> - </listitem> - - <listitem> - <para> - Incorrect generation of testcase scripts for server-side - prepared statements. (Bug #11663) - </para> - </listitem> - - <listitem> - <para> - Fixed regression caused by fix for Bug #11552 that caused - driver to return incorrect values for unsigned integers when - those integers where within the range of the positive signed - type. - </para> - </listitem> - - <listitem> - <para> - Moved source code to Subversion repository. - </para> - </listitem> - - <listitem> - <para> - Escape tokenizer doesn't respect stacked single quotes for - escapes. (Bug #11797) - </para> - </listitem> - - <listitem> - <para> - <literal>GEOMETRY</literal> type not recognized when using - server-side prepared statements. - </para> - </listitem> - - <listitem> - <para> - <literal>ReplicationConnection</literal> won't switch to - slave, throws <quote>Catalog can't be null</quote> - exception. (Bug #11879) - </para> - </listitem> - - <listitem> - <para> - Properties shared between master and slave with replication - connection. (Bug #12218) - </para> - </listitem> - - <listitem> - <para> - <literal>Statement.getWarnings()</literal> fails with NPE if - statement has been closed. (Bug #10630) - </para> - </listitem> - - <listitem> - <para> - Only get <literal>char[]</literal> from SQL in - <literal>PreparedStatement.ParseInfo()</literal> when - needed. - </para> - </listitem> - - <listitem> - <para> - Geometry types not handled with server-side prepared - statements. (Bug #12104) - </para> - </listitem> - - <listitem> - <para> - <literal>StringUtils.getBytes()</literal> doesn't work when - using multi-byte character encodings and a length in - <emphasis>characters</emphasis> is specified. (Bug #11614) - </para> - </listitem> - - <listitem> - <para> - <literal>Pstmt.setObject(...., Types.BOOLEAN)</literal> - throws exception. (Bug #11798) - </para> - </listitem> - - <listitem> - <para> - <literal>maxPerformance.properties</literal> mis-spells - <quote>elideSetAutoCommits</quote>. (Bug #11976) - </para> - </listitem> - - <listitem> - <para> - <literal>DBMD.storesLower/Mixed/UpperIdentifiers()</literal> - reports incorrect values for servers deployed on Windows. - (Bug #11575) - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.moveToCurrentRow()</literal> fails to - work when preceded by a call to - <literal>ResultSet.moveToInsertRow()</literal>. (Bug #11190) - </para> - </listitem> - - <listitem> - <para> - <literal>VARBINARY</literal> data corrupted when using - server-side prepared statements and - <literal>.setBytes()</literal>. (Bug #11115) - </para> - </listitem> - - <listitem> - <para> - <literal>explainSlowQueries</literal> hangs with server-side - prepared statements. (Bug #12229) - </para> - </listitem> - - <listitem> - <para> - Escape processor didn't honor strings demarcated with double - quotes. (Bug #11498) - </para> - </listitem> - - <listitem> - <para> - Lifted restriction of changing streaming parameters with - server-side prepared statements. As long as - <literal>all</literal> streaming parameters were set before - execution, <literal>.clearParameters()</literal> does not - have to be called. (due to limitation of client/server - protocol, prepared statements can not reset - <emphasis>individual</emphasis> stream data on the server - side). - </para> - </listitem> - - <listitem> - <para> - Reworked <literal>Field</literal> class, - <literal>*Buffer</literal>, and <literal>MysqlIO</literal> - to be aware of field lengths > - <literal>Integer.MAX_VALUE</literal>. - </para> - </listitem> - - <listitem> - <para> - Updated <literal>DBMD.supportsCorrelatedQueries()</literal> - to return <literal>true</literal> for versions > 4.1, - <literal>supportsGroupByUnrelated()</literal> to return - <literal>true</literal> and - <literal>getResultSetHoldability()</literal> to return - <literal>HOLD_CURSORS_OVER_COMMIT</literal>. - </para> - </listitem> - - <listitem> - <para> - Handling of catalog argument in - <literal>DatabaseMetaData.getIndexInfo()</literal>, which - also means changes to the following methods in - <literal>DatabaseMetaData</literal>: (Bug #12541) - </para> - - <itemizedlist> - - <listitem> - <para> - <literal>getBestRowIdentifier()</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>getColumns()</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>getCrossReference()</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>getExportedKeys()</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>getImportedKeys()</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>getIndexInfo()</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>getPrimaryKeys()</literal> - </para> - </listitem> - - <listitem> - <para> - <literal>getProcedures()</literal> (and thus indirectly - <literal>getProcedureColumns()</literal>) - </para> - </listitem> - - <listitem> - <para> - <literal>getTables()</literal> - </para> - </listitem> - - </itemizedlist> - - <para> - The <literal>catalog</literal> argument in all of these - methods now behaves in the following way: - </para> - - <itemizedlist> - - <listitem> - <para> - Specifying <literal>NULL</literal> means that catalog - will not be used to filter the results (thus all - databases will be searched), unless you've set - <literal>nullCatalogMeansCurrent=true</literal> in your - JDBC URL properties. - </para> - </listitem> - - <listitem> - <para> - Specifying <literal>""</literal> means - <quote>current</quote> catalog, even though this isn't - quite JDBC spec compliant, it's there for legacy users. - </para> - </listitem> - - <listitem> - <para> - Specifying a catalog works as stated in the API docs. - </para> - </listitem> - - <listitem> - <para> - Made <literal>Connection.clientPrepare()</literal> - available from <quote>wrapped</quote> connections in the - <literal>jdbc2.optional</literal> package (connections - built by <literal>ConnectionPoolDataSource</literal> - instances). - </para> - </listitem> - - </itemizedlist> - </listitem> - - <listitem> - <para> - Added <literal>Connection.isMasterConnection()</literal> for - clients to be able to determine if a multi-host master/slave - connection is connected to the first host in the list. - </para> - </listitem> - - <listitem> - <para> - Tokenizer for <literal>=</literal> in URL properties was - causing <literal>sessionVariables=....</literal> to be - parameterized incorrectly. (Bug #12753) - </para> - </listitem> - - <listitem> - <para> - Foreign key information that is quoted is parsed incorrectly - when <literal>DatabaseMetaData</literal> methods use that - information. (Bug #11781) - </para> - </listitem> - - <listitem> - <para> - The <literal>sendBlobChunkSize</literal> property is now - clamped to <literal>max_allowed_packet</literal> with - consideration of stream buffer size and packet headers to - avoid <literal>PacketTooBigExceptions</literal> when - <literal>max_allowed_packet</literal> is similar in size to - the default <literal>sendBlobChunkSize</literal> which is - 1M. - </para> - </listitem> - - <listitem> - <para> - <literal>CallableStatement.clearParameters()</literal> now - clears resources associated with - <literal>INOUT</literal>/<literal>OUTPUT</literal> - parameters as well as <literal>INPUT</literal> parameters. - </para> - </listitem> - - <listitem> - <para> - <literal>Connection.prepareCall()</literal> is database name - case-sensitive (on Windows systems). (Bug #12417) - </para> - </listitem> - - <listitem> - <para> - <literal>cp1251</literal> incorrectly mapped to - <literal>win1251</literal> for servers newer than 4.0.x. - (Bug #12752) - </para> - </listitem> - - <listitem> - <para> - <literal>java.sql.Types.OTHER</literal> returned for - <literal>BINARY</literal> and <literal>VARBINARY</literal> - columns when using - <literal>DatabaseMetaData.getColumns()</literal>. (Bug - #12970) - </para> - </listitem> - - <listitem> - <para> - <literal>ServerPreparedStatement.getBinding()</literal> now - checks if the statement is closed before attempting to - reference the list of parameter bindings, to avoid throwing - a <literal>NullPointerException</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSetMetaData</literal> from - <literal>Statement.getGeneratedKeys()</literal> caused a - <literal>NullPointerException</literal> to be thrown - whenever a method that required a connection reference was - called. (Bug #13277) - </para> - </listitem> - - <listitem> - <para> - Backport of <literal>Field</literal> class, - <literal>ResultSetMetaData.getColumnClassName()</literal>, - and <literal>ResultSet.getObject(int)</literal> changes from - 5.0 branch to fix behavior surrounding <literal>VARCHAR - BINARY</literal>/<literal>VARBINARY</literal> and related - types. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>NullPointerException</literal> when - converting <literal>catalog</literal> parameter in many - <literal>DatabaseMetaDataMethods</literal> to - <literal>byte[]</literal>s (for the result set) when the - parameter is <literal>null</literal>. - (<literal>null</literal> isn't technically allowed by the - JDBC specification, but we've historically allowed it). - </para> - </listitem> - - <listitem> - <para> - Backport of <literal>VAR[BINARY|CHAR] [BINARY]</literal> - types detection from 5.0 branch. - </para> - </listitem> - - <listitem> - <para> - Read response in - <literal>MysqlIO.sendFileToServer()</literal>, even if the - local file can't be opened, otherwise next query issued will - fail, because it's reading the response to the empty - <literal>LOAD DATA INFILE</literal> packet sent to the - server. - </para> - </listitem> - - <listitem> - <para> - Workaround for Bug #13374: - <literal>ResultSet.getStatement()</literal> on closed result - set returns <literal>NULL</literal> (as per JDBC 4.0 spec, - but not backward-compatible). Set the connection property - <literal>retainStatementAfterResultSetClose</literal> to - <literal>true</literal> to be able to retrieve a - <literal>ResultSet</literal>'s statement after the - <literal>ResultSet</literal> has been closed via - <literal>.getStatement()</literal> (the default is - <literal>false</literal>, to be JDBC-compliant and to reduce - the chance that code using JDBC leaks - <literal>Statement</literal> instances). - </para> - </listitem> - - <listitem> - <para> - URL configuration parameters don't allow - <quote><literal>&</literal></quote> or - <quote><literal>=</literal></quote> in their values. The JDBC - driver now parses configuration parameters as if they are - encoded using the application/x-www-form-urlencoded format - as specified by <literal>java.net.URLDecoder</literal> - (<ulink url="http://java.sun.com/j2se/1.5.0/docs/api/java/net/URLDecoder.html"/>). - (Bug #13453) - </para> - - <para> - If the <quote><literal>%</literal></quote> character is - present in a configuration property, it must now be - represented as <literal>%25</literal>, which is the encoded - form of <quote><literal>%</literal></quote> when using - application/x-www-form-urlencoded encoding. - </para> - </listitem> - - <listitem> - <para> - The configuration property - <literal>sessionVariables</literal> now allows you to - specify variables that start with the - <quote><literal>@</literal></quote> sign. - </para> - </listitem> - - <listitem> - <para> - When <literal>gatherPerfMetrics</literal> is enabled for - servers older than 4.1.0, a - <literal>NullPointerException</literal> is thrown from the - constructor of <literal>ResultSet</literal> if the query - doesn't use any tables. (Bug #13043) - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-10"> - <title>Changes in MySQL Connector/J 3.1.10-stable (23 June 2005) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.10:connector-j:all"/> - <listitem> - <para> - Fixed connecting without a database specified raised an - exception in <literal>MysqlIO.changeDatabaseTo()</literal>. - </para> - </listitem> - - <listitem> - <para> - Initial implemention of <literal>ParameterMetadata</literal> - for - <literal>PreparedStatement.getParameterMetadata()</literal>. - Only works fully for <literal>CallableStatements</literal>, - as current server-side prepared statements return every - parameter as a <literal>VARCHAR</literal> type. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-9"> - <title>Changes in MySQL Connector/J 3.1.9-stable (22 June 2005) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.9:connector-j:all"/> - <listitem> - <para> - Overhaul of character set configuration, everything now - lives in a properties file. - </para> - </listitem> - - <listitem> - <para> - Driver now correctly uses CP932 if available on the server - for Windows-31J, CP932 and MS932 java encoding names, - otherwise it resorts to SJIS, which is only a close - approximation. Currently only MySQL-5.0.3 and newer (and - MySQL-4.1.12 or .13, depending on when the character set - gets backported) can reliably support any variant of CP932. - </para> - </listitem> - - <listitem> - <para> - <literal>com.mysql.jdbc.PreparedStatement.ParseInfo</literal> - does unnecessary call to <literal>toCharArray()</literal>. - (Bug #9064) - </para> - </listitem> - - <listitem> - <para> - Memory leak in <literal>ServerPreparedStatement</literal> if - <literal>serverPrepare()</literal> fails. (Bug #10144) - </para> - </listitem> - - <listitem> - <para> - Actually write manifest file to correct place so it ends up - in the binary jar file. - </para> - </listitem> - - <listitem> - <para> - Added <literal>createDatabaseIfNotExist</literal> property - (default is <literal>false</literal>), which will cause the - driver to ask the server to create the database specified in - the URL if it doesn't exist. You must have the appropriate - privileges for database creation for this to work. - </para> - </listitem> - - <listitem> - <para> - Unsigned <literal>SMALLINT</literal> treated as signed for - <literal>ResultSet.getInt()</literal>, fixed all cases for - <literal>UNSIGNED</literal> integer values and server-side - prepared statements, as well as - <literal>ResultSet.getObject()</literal> for - <literal>UNSIGNED TINYINT</literal>. (Bug #10156) - </para> - </listitem> - - <listitem> - <para> - Double quotes not recognized when parsing client-side - prepared statements. (Bug #10155) - </para> - </listitem> - - <listitem> - <para> - Made <literal>enableStreamingResults()</literal> visible on - <literal>com.mysql.jdbc.jdbc2.optional.StatementWrapper</literal>. - </para> - </listitem> - - <listitem> - <para> - Made <literal>ServerPreparedStatement.asSql()</literal> work - correctly so auto-explain functionality would work with - server-side prepared statements. - </para> - </listitem> - - <listitem> - <para> - Made JDBC2-compliant wrappers public in order to allow - access to vendor extensions. - </para> - </listitem> - - <listitem> - <para> - Cleaned up logging of profiler events, moved code to dump a - profiler event as a string to - <literal>com.mysql.jdbc.log.LogUtils</literal> so that third - parties can use it. - </para> - </listitem> - - <listitem> - <para> - <literal>DatabaseMetaData.supportsMultipleOpenResults()</literal> - now returns <literal>true</literal>. The driver has - supported this for some time, DBMD just missed that fact. - </para> - </listitem> - - <listitem> - <para> - Driver doesn't support <literal>{?=CALL(...)}</literal> for - calling stored functions. This involved adding support for - function retrieval to - <literal>DatabaseMetaData.getProcedures()</literal> and - <literal>getProcedureColumns()</literal> as well. (Bug - #10310) - </para> - </listitem> - - <listitem> - <para> - <literal>SQLException</literal> thrown when retrieving - <literal>YEAR(2)</literal> with - <literal>ResultSet.getString()</literal>. The driver will - now always treat <literal>YEAR</literal> types as - <literal>java.sql.Dates</literal> and return the correct - values for <literal>getString()</literal>. Alternatively, - the <literal>yearIsDateType</literal> connection property - can be set to <literal>false</literal> and the values will - be treated as <literal>SHORT</literal>s. (Bug #10485) - </para> - </listitem> - - <listitem> - <para> - The datatype returned for <literal>TINYINT(1)</literal> - columns when <literal>tinyInt1isBit=true</literal> (the - default) can be switched between - <literal>Types.BOOLEAN</literal> and - <literal>Types.BIT</literal> using the new configuration - property <literal>transformedBitIsBoolean</literal>, which - defaults to <literal>false</literal>. If set to - <literal>false</literal> (the default), - <literal>DatabaseMetaData.getColumns()</literal> and - <literal>ResultSetMetaData.getColumnType()</literal> will - return <literal>Types.BOOLEAN</literal> for - <literal>TINYINT(1)</literal> columns. If - <literal>true</literal>, <literal>Types.BOOLEAN</literal> - will be returned instead. Regardless of this configuration - property, if <literal>tinyInt1isBit</literal> is enabled, - columns with the type <literal>TINYINT(1)</literal> will be - returned as <literal>java.lang.Boolean</literal> instances - from <literal>ResultSet.getObject(...)</literal>, and - <literal>ResultSetMetaData.getColumnClassName()</literal> - will return <literal>java.lang.Boolean</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>SQLException</literal> is thrown when using - property <literal>characterSetResults</literal> with - <literal>cp932</literal> or <literal>eucjpms</literal>. (Bug - #10496) - </para> - </listitem> - - <listitem> - <para> - Reorganized directory layout. Sources now are in - <filename>src</filename> folder. Don't pollute parent - directory when building, now output goes to - <filename>./build</filename>, distribution goes to - <filename>./dist</filename>. - </para> - </listitem> - - <listitem> - <para> - Added support/bug hunting feature that generates - <filename>.sql</filename> test scripts to - <literal>STDERR</literal> when - <literal>autoGenerateTestcaseScript</literal> is set to - <literal>true</literal>. - </para> - </listitem> - - <listitem> - <para> - 0-length streams not sent to server when using server-side - prepared statements. (Bug #10850) - </para> - </listitem> - - <listitem> - <para> - Setting <literal>cachePrepStmts=true</literal> now causes - the <literal>Connection</literal> to also cache the check - the driver performs to determine if a prepared statement can - be server-side or not, as well as caches server-side - prepared statements for the lifetime of a connection. As - before, the <literal>prepStmtCacheSize</literal> parameter - controls the size of these caches. - </para> - </listitem> - - <listitem> - <para> - Try to handle <literal>OutOfMemoryErrors</literal> more - gracefully. Although not much can be done, they will in most - cases close the connection they happened on so that further - operations don't run into a connection in some unknown - state. When an OOM has happened, any further operations on - the connection will fail with a <quote>Connection - closed</quote> exception that will also list the OOM - exception as the reason for the implicit connection close - event. - </para> - </listitem> - - <listitem> - <para> - Don't send <literal>COM_RESET_STMT</literal> for each - execution of a server-side prepared statement if it isn't - required. - </para> - </listitem> - - <listitem> - <para> - Driver detects if you're running MySQL-5.0.7 or later, and - does not scan for <literal>LIMIT ?[,?]</literal> in - statements being prepared, as the server supports those - types of queries now. - </para> - </listitem> - - <listitem> - <para> - <literal>VARBINARY</literal> data corrupted when using - server-side prepared statements and - <literal>ResultSet.getBytes()</literal>. (Bug #11115) - </para> - </listitem> - - <listitem> - <para> - <literal>Connection.setCatalog()</literal> is now aware of - the <literal>useLocalSessionState</literal> configuration - property, which when set to <literal>true</literal> will - prevent the driver from sending <literal>USE ...</literal> - to the server if the requested catalog is the same as the - current catalog. - </para> - </listitem> - - <listitem> - <para> - Added the following configuration bundles, use one or many - via the <literal>useConfigs</literal> configuration - property: - </para> - - <itemizedlist> - - <listitem> - <para> - <literal>maxPerformance</literal> — maximum - performance without being reckless - </para> - </listitem> - - <listitem> - <para> - <literal>solarisMaxPerformance</literal> — maximum - performance for Solaris, avoids syscalls where it can - </para> - </listitem> - - <listitem> - <para> - <literal>3-0-Compat</literal> — Compatibility with - Connector/J 3.0.x functionality - </para> - </listitem> - - </itemizedlist> - </listitem> - - <listitem> - <para> - Added <literal>maintainTimeStats</literal> configuration - property (defaults to <literal>true</literal>), which tells - the driver whether or not to keep track of the last query - time and the last successful packet sent to the server's - time. If set to <literal>false</literal>, removes two - syscalls per query. - </para> - </listitem> - - <listitem> - <para> - <literal>autoReconnect</literal> ping causes exception on - connection startup. (Bug #11259) - </para> - </listitem> - - <listitem> - <para> - Connector/J dumping query into - <literal>SQLException</literal> twice. (Bug #11360) - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>PreparedStatement.setClob()</literal> not - accepting <literal>null</literal> as a parameter. - </para> - </listitem> - - <listitem> - <para> - Production package doesn't include JBoss integration - classes. (Bug #11411) - </para> - </listitem> - - <listitem> - <para> - Removed nonsensical <quote>costly type conversion</quote> - warnings when using usage advisor. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-8"> - <title>Changes in MySQL Connector/J 3.1.8-stable (14 April 2005) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.8:connector-j:all"/> - <listitem> - <para> - Fixed <literal>DatabaseMetaData.getTables()</literal> - returning views when they were not asked for as one of the - requested table types. - </para> - </listitem> - - <listitem> - <para> - Added support for new precision-math - <literal>DECIMAL</literal> type in MySQL 5.0.3 and up. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSet.getTime()</literal> on a - <literal>NULL</literal> value for server-side prepared - statements throws NPE. - </para> - </listitem> - - <listitem> - <para> - Made <literal>Connection.ping()</literal> a public method. - </para> - </listitem> - - <listitem> - <para> - <literal>DATE_FORMAT()</literal> queries returned as - <literal>BLOB</literal>s from - <literal>getObject()</literal>. (Bug #8868) - </para> - </listitem> - - <listitem> - <para> - <literal>ServerPreparedStatements</literal> now correctly - <quote>stream</quote> - <literal>BLOB</literal>/<literal>CLOB</literal> data to the - server. You can configure the threshold chunk size using the - JDBC URL property <literal>blobSendChunkSize</literal> (the - default is 1MB). - </para> - </listitem> - - <listitem> - <para> - <literal>BlobFromLocator</literal> now uses correct - identifier quoting when generating prepared statements. - </para> - </listitem> - - <listitem> - <para> - Server-side session variables can be preset at connection - time by passing them as a comma-delimited list for the - connection property <literal>sessionVariables</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed regression in <literal>ping()</literal> for users - using <literal>autoReconnect=true</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatement.addBatch()</literal> doesn't work - with server-side prepared statements and streaming - <literal>BINARY</literal> data. (Bug #9040) - </para> - </listitem> - - <listitem> - <para> - <literal>DBMD.supportsMixedCase*Identifiers()</literal> - returns wrong value on servers running on case-sensitive - filesystems. (Bug #8800) - </para> - </listitem> - - <listitem> - <para> - Cannot use <literal>UTF-8</literal> for characterSetResults - configuration property. (Bug #9206) - </para> - </listitem> - - <listitem> - <para> - A continuation of Bug #8868, where functions used in queries - that should return non-string types when resolved by - temporary tables suddenly become opaque binary strings - (work-around for server limitation). Also fixed fields with - type of <literal>CHAR(n) CHARACTER SET BINARY</literal> to - return correct/matching classes for - <literal>RSMD.getColumnClassName()</literal> and - <literal>ResultSet.getObject()</literal>. (Bug #9236) - </para> - </listitem> - - <listitem> - <para> - <literal>DBMD.supportsResultSetConcurrency()</literal> not - returning <literal>true</literal> for forward-only/read-only - result sets (we obviously support this). (Bug #8792) - </para> - </listitem> - - <listitem> - <para> - <literal>DATA_TYPE</literal> column from - <literal>DBMD.getBestRowIdentifier()</literal> causes - <literal>ArrayIndexOutOfBoundsException</literal> when - accessed (and in fact, didn't return any value). (Bug #8803) - </para> - </listitem> - - <listitem> - <para> - Check for empty strings (<literal>''</literal>) when - converting - <literal>CHAR</literal>/<literal>VARCHAR</literal> column - data to numbers, throw exception if - <literal>emptyStringsConvertToZero</literal> configuration - property is set to <literal>false</literal> (for - backward-compatibility with 3.0, it is now set to - <literal>true</literal> by default, but will most likely - default to <literal>false</literal> in 3.2). - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatement.getMetaData()</literal> inserts - blank row in database under certain conditions when not - using server-side prepared statements. (Bug #9320) - </para> - </listitem> - - <listitem> - <para> - <literal>Connection.canHandleAsPreparedStatement()</literal> - now makes <quote>best effort</quote> to distinguish - <literal>LIMIT</literal> clauses with placeholders in them - from ones without in order to have fewer false positives - when generating work-arounds for statements the server - cannot currently handle as server-side prepared statements. - </para> - </listitem> - - <listitem> - <para> - Fixed <filename>build.xml</filename> to not compile - <literal>log4j</literal> logging if <literal>log4j</literal> - not available. - </para> - </listitem> - - <listitem> - <para> - Added support for the c3p0 connection pool's - (<ulink url="http://c3p0.sf.net/"/>) validation/connection - checker interface which uses the lightweight - <literal>COM_PING</literal> call to the server if available. - To use it, configure your c3p0 connection pool's - <literal>connectionTesterClassName</literal> property to use - <literal>com.mysql.jdbc.integration.c3p0.MysqlConnectionTester</literal>. - </para> - </listitem> - - <listitem> - <para> - Better detection of <literal>LIMIT</literal> inside/outside - of quoted strings so that the driver can more correctly - determine whether a prepared statement can be prepared on - the server or not. - </para> - </listitem> - - <listitem> - <para> - Stored procedures with same name in different databases - confuse the driver when it tries to determine parameter - counts/types. (Bug #9319) - </para> - </listitem> - - <listitem> - <para> - Added finalizers to <literal>ResultSet</literal> and - <literal>Statement</literal> implementations to be JDBC - spec-compliant, which requires that if not explicitly - closed, these resources should be closed upon garbage - collection. - </para> - </listitem> - - <listitem> - <para> - Stored procedures with <literal>DECIMAL</literal> parameters - with storage specifications that contained - <quote><literal>,</literal></quote> in them would fail. (Bug - #9682) - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatement.setObject(int, Object, int type, - int scale)</literal> now uses scale value for - <literal>BigDecimal</literal> instances. - </para> - </listitem> - - <listitem> - <para> - <literal>Statement.getMoreResults()</literal> could throw - NPE when existing result set was - <literal>.close()</literal>d. (Bug #9704) - </para> - </listitem> - - <listitem> - <para> - The performance metrics feature now gathers information - about number of tables referenced in a SELECT. - </para> - </listitem> - - <listitem> - <para> - The logging system is now automatically configured. If the - value has been set by the user, via the URL property - <literal>logger</literal> or the system property - <literal>com.mysql.jdbc.logger</literal>, then use that, - otherwise, autodetect it using the following steps: - </para> - - <orderedlist> - - <listitem> - <para> - Log4j, if it's available, - </para> - </listitem> - - <listitem> - <para> - Then JDK1.4 logging, - </para> - </listitem> - - <listitem> - <para> - Then fallback to our <literal>STDERR</literal> logging. - </para> - </listitem> - - </orderedlist> - </listitem> - - <listitem> - <para> - <literal>DBMD.getTables()</literal> shouldn't return tables - if views are asked for, even if the database version doesn't - support views. (Bug #9778) - </para> - </listitem> - - <listitem> - <para> - Fixed driver not returning <literal>true</literal> for - <literal>-1</literal> when - <literal>ResultSet.getBoolean()</literal> was called on - result sets returned from server-side prepared statements. - </para> - </listitem> - - <listitem> - <para> - Added a <filename>Manifest.MF</filename> file with - implementation information to the <filename>.jar</filename> - file. - </para> - </listitem> - - <listitem> - <para> - More tests in <literal>Field.isOpaqueBinary()</literal> to - distinguish opaque binary (that is, fields with type - <literal>CHAR(n)</literal> and <literal>CHARACTER SET - BINARY</literal>) from output of various scalar and - aggregate functions that return strings. - </para> - </listitem> - - <listitem> - <para> - Should accept <literal>null</literal> for catalog (meaning - use current) in DBMD methods, even though it's not - JDBC-compliant for legacy's sake. Disable by setting - connection property - <literal>nullCatalogMeansCurrent</literal> to - <literal>false</literal> (which will be the default value in - C/J 3.2.x). (Bug #9917) - </para> - </listitem> - - <listitem> - <para> - Should accept <literal>null</literal> for name patterns in - DBMD (meaning <quote><literal>%</literal></quote>), even - though it isn't JDBC compliant, for legacy's sake. Disable - by setting connection property - <literal>nullNamePatternMatchesAll</literal> to - <literal>false</literal> (which will be the default value in - C/J 3.2.x). (Bug #9769) - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-7"> - <title>Changes in MySQL Connector/J 3.1.7-stable (18 February 2005) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.7:connector-j:all"/> - <listitem> - <para> - Timestamp key column data needed <literal>_binary</literal> - stripped for - <literal>UpdatableResultSet.refreshRow()</literal>. (Bug - #7686) - </para> - </listitem> - - <listitem> - <para> - Timestamps converted incorrectly to strings with server-side - prepared statements and updatable result sets. (Bug #7715) - </para> - </listitem> - - <listitem> - <para> - Detect new <literal>sql_mode</literal> variable in string - form (it used to be integer) and adjust quoting method for - strings appropriately. - </para> - </listitem> - - <listitem> - <para> - Added <literal>holdResultsOpenOverStatementClose</literal> - property (default is <literal>false</literal>), that keeps - result sets open over statement.close() or new execution on - same statement (suggested by Kevin Burton). - </para> - </listitem> - - <listitem> - <para> - Infinite recursion when <quote>falling back</quote> to - master in failover configuration. (Bug #7952) - </para> - </listitem> - - <listitem> - <para> - Disable multi-statements (if enabled) for MySQL-4.1 versions - prior to version 4.1.10 if the query cache is enabled, as - the server returns wrong results in this configuration. - </para> - </listitem> - - <listitem> - <para> - Fixed duplicated code in - <literal>configureClientCharset()</literal> that prevented - <literal>useOldUTF8Behavior=true</literal> from working - properly. - </para> - </listitem> - - <listitem> - <para> - Removed <literal>dontUnpackBinaryResults</literal> - functionality, the driver now always stores results from - server-side prepared statements as is from the server and - unpacks them on demand. - </para> - </listitem> - - <listitem> - <para> - Emulated locators corrupt binary data when using server-side - prepared statements. (Bug #8096) - </para> - </listitem> - - <listitem> - <para> - Fixed synchronization issue with - <literal>ServerPreparedStatement.serverPrepare()</literal> - that could cause deadlocks/crashes if connection was shared - between threads. - </para> - </listitem> - - <listitem> - <para> - By default, the driver now scans SQL you are preparing via - all variants of - <literal>Connection.prepareStatement()</literal> to - determine if it is a supported type of statement to prepare - on the server side, and if it is not supported by the - server, it instead prepares it as a client-side emulated - prepared statement. You can disable this by passing - <literal>emulateUnsupportedPstmts=false</literal> in your - JDBC URL. (Bug #4718) - </para> - </listitem> - - <listitem> - <para> - Remove <literal>_binary</literal> introducer from parameters - used as in/out parameters in - <literal>CallableStatement</literal>. - </para> - </listitem> - - <listitem> - <para> - Always return <literal>byte[]</literal>s for output - parameters registered as <literal>*BINARY</literal>. - </para> - </listitem> - - <listitem> - <para> - Send correct value for <quote>boolean</quote> - <literal>true</literal> to server for - <literal>PreparedStatement.setObject(n, "true", - Types.BIT)</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed bug with Connection not caching statements from - <literal>prepareStatement()</literal> when the statement - wasn't a server-side prepared statement. - </para> - </listitem> - - <listitem> - <para> - Choose correct <quote>direction</quote> to apply time - adjustments when both client and server are in GMT time zone - when using <literal>ResultSet.get(..., cal)</literal> and - <literal>PreparedStatement.set(...., cal)</literal>. - </para> - </listitem> - - <listitem> - <para> - Added <literal>dontTrackOpenResources</literal> option - (default is <literal>false</literal>, to be JDBC compliant), - which helps with memory use for non-well-behaved apps (that - is, applications that don't close - <literal>Statement</literal> objects when they should). - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getString()</literal> doesn't maintain - format stored on server, bug fix only enabled when - <literal>noDatetimeStringSync</literal> property is set to - <literal>true</literal> (the default is - <literal>false</literal>). (Bug #8428) - </para> - </listitem> - - <listitem> - <para> - Fixed NPE in <literal>ResultSet.realClose()</literal> when - using usage advisor and result set was already closed. - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatements</literal> not creating streaming - result sets. (Bug #8487) - </para> - </listitem> - - <listitem> - <para> - Don't pass <literal>NULL</literal> to - <literal>String.valueOf()</literal> in - <literal>ResultSet.getNativeConvertToString()</literal>, as - it stringifies it (that is, returns - <literal>null</literal>), which is not correct for the - method in question. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getBigDecimal()</literal> throws - exception when rounding would need to occur to set scale. - The driver now chooses a rounding mode of <quote>half - up</quote> if non-rounding - <literal>BigDecimal.setScale()</literal> fails. (Bug #8424) - </para> - </listitem> - - <listitem> - <para> - Added <literal>useLocalSessionState</literal> configuration - property, when set to <literal>true</literal> the JDBC - driver trusts that the application is well-behaved and only - sets autocommit and transaction isolation levels using the - methods provided on <literal>java.sql.Connection</literal>, - and therefore can manipulate these values in many cases - without incurring round-trips to the database server. - </para> - </listitem> - - <listitem> - <para> - Added <literal>enableStreamingResults()</literal> to - <literal>Statement</literal> for connection pool - implementations that check - <literal>Statement.setFetchSize()</literal> for - specification-compliant values. Call - <literal>Statement.setFetchSize(>=0)</literal> to disable - the streaming results for that statement. - </para> - </listitem> - - <listitem> - <para> - Added support for <literal>BIT</literal> type in - MySQL-5.0.3. The driver will treat - <literal>BIT(1-8)</literal> as the JDBC standard - <literal>BIT</literal> type (which maps to - <literal>java.lang.Boolean</literal>), as the server does - not currently send enough information to determine the size - of a bitfield when < 9 bits are declared. - <literal>BIT(>9)</literal> will be treated as - <literal>VARBINARY</literal>, and will return - <literal>byte[]</literal> when - <literal>getObject()</literal> is called. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-6"> - <title>Changes in MySQL Connector/J 3.1.6-stable (23 December 2004) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.6:connector-j:all"/> - <listitem> - <para> - Fixed hang on <literal>SocketInputStream.read()</literal> - with <literal>Statement.setMaxRows()</literal> and multiple - result sets when driver has to truncate result set directly, - rather than tacking a <literal>LIMIT - <replaceable>n</replaceable></literal> on the end of it. - </para> - </listitem> - - <listitem> - <para> - <literal>DBMD.getProcedures()</literal> doesn't respect - catalog parameter. (Bug #7026) - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-5"> - <title>Changes in MySQL Connector/J 3.1.5-gamma (02 December 2004) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.5:connector-j:all"/> - <listitem> - <para> - Fix comparisons made between string constants and dynamic - strings that are converted with either - <literal>toUpperCase()</literal> or - <literal>toLowerCase()</literal> to use - <literal>Locale.ENGLISH</literal>, as some locales - <quote>override</quote> case rules for English. Also use - <literal>StringUtils.indexOfIgnoreCase()</literal> instead - of <literal>.toUpperCase().indexOf()</literal>, avoids - creating a very short-lived transient - <literal>String</literal> instance. - </para> - </listitem> - - <listitem> - <para> - Server-side prepared statements did not honor - <literal>zeroDateTimeBehavior</literal> property, and would - cause class-cast exceptions when using - <literal>ResultSet.getObject()</literal>, as the all-zero - string was always returned. (Bug #5235) - </para> - </listitem> - - <listitem> - <para> - 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 <quote>Wrong arguments to - mysql_stmt_execute()</quote>. - </para> - </listitem> - - <listitem> - <para> - Handle case when string representation of timestamp contains - trailing <quote><literal>.</literal></quote> with no numbers - following it. - </para> - </listitem> - - <listitem> - <para> - Inefficient detection of pre-existing string instances in - <literal>ResultSet.getNativeString()</literal>. (Bug #5706) - </para> - </listitem> - - <listitem> - <para> - Don't throw exceptions for - <literal>Connection.releaseSavepoint()</literal>. - </para> - </listitem> - - <listitem> - <para> - Use a per-session <literal>Calendar</literal> instance by - default when decoding dates from - <literal>ServerPreparedStatements</literal> (set to old, - less performant behavior by setting property - <literal>dynamicCalendars=true</literal>). - </para> - </listitem> - - <listitem> - <para> - Added experimental configuration property - <literal>dontUnpackBinaryResults</literal>, which delays - unpacking binary result set values until they're asked for, - and only creates object instances for non-numerical values - (it is set to <literal>false</literal> by default). For some - usecase/jvm combinations, this is friendlier on the garbage - collector. - </para> - </listitem> - - <listitem> - <para> - <literal>UNSIGNED BIGINT</literal> unpacked incorrectly from - server-side prepared statement result sets. (Bug #5729) - </para> - </listitem> - - <listitem> - <para> - <literal>ServerSidePreparedStatement</literal> allocating - short-lived objects unnecessarily. (Bug #6225) - </para> - </listitem> - - <listitem> - <para> - Removed unwanted new <literal>Throwable()</literal> in - <literal>ResultSet</literal> 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. - </para> - </listitem> - - <listitem> - <para> - Fixed too-early creation of <literal>StringBuffer</literal> - in <literal>EscapeProcessor.escapeSQL()</literal>, also - return <literal>String</literal> when escaping not needed - (to avoid unnecessary object allocations). Found while - profiling for Bug #6359. - </para> - </listitem> - - <listitem> - <para> - Use null-safe-equals for key comparisons in updatable result - sets. - </para> - </listitem> - - <listitem> - <para> - <literal>SUM()</literal> on <literal>DECIMAL</literal> with - server-side prepared statement ignores scale if zero-padding - is needed (this ends up being due to conversion to - <literal>DOUBLE</literal> by server, which when converted to - a string to parse into <literal>BigDecimal</literal>, loses - all <quote>padding</quote> zeros). (Bug #6537) - </para> - </listitem> - - <listitem> - <para> - Use - <literal>DatabaseMetaData.getIdentifierQuoteString()</literal> - when building DBMD queries. - </para> - </listitem> - - <listitem> - <para> - Use 1MB packet for sending file for <literal>LOAD DATA LOCAL - INFILE</literal> if that is < - <literal>max_allowed_packet</literal> on server. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSetMetaData.getColumnDisplaySize()</literal> - returns incorrect values for multi-byte charsets. (Bug - #6399) - </para> - </listitem> - - <listitem> - <para> - Make auto-deserialization of - <literal>java.lang.Objects</literal> stored in - <literal>BLOB</literal> columns configurable via - <literal>autoDeserialize</literal> property (defaults to - <literal>false</literal>). - </para> - </listitem> - - <listitem> - <para> - Re-work <literal>Field.isOpaqueBinary()</literal> to detect - <literal>CHAR(<replaceable>n</replaceable>) CHARACTER SET - BINARY</literal> to support fixed-length binary fields for - <literal>ResultSet.getObject()</literal>. - </para> - </listitem> - - <listitem> - <para> - Use our own implementation of buffered input streams to get - around blocking behavior of - <literal>java.io.BufferedInputStream</literal>. Disable this - with <literal>useReadAheadInput=false</literal>. - </para> - </listitem> - - <listitem> - <para> - 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 - <emphasis>all</emphasis> IP addresses for a given host, and - stops on the first one that <literal>accepts()</literal> a - <literal>socket.connect()</literal>. (Bug #6348) - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-4"> - <title>Changes in MySQL Connector/J 3.1.4-beta (04 September 2004) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.4:connector-j:all"/> - <listitem> - <para> - Connector/J 3.1.3 beta does not handle integers correctly - (caused by changes to support unsigned reads in - <literal>Buffer.readInt()</literal> -> - <literal>Buffer.readShort()</literal>). (Bug #4510) - </para> - </listitem> - - <listitem> - <para> - Added support in - <literal>DatabaseMetaData.getTables()</literal> and - <literal>getTableTypes()</literal> for views, which are now - available in MySQL server 5.0.x. - </para> - </listitem> - - <listitem> - <para> - <literal>ServerPreparedStatement.execute*()</literal> - sometimes threw - <literal>ArrayIndexOutOfBoundsException</literal> when - unpacking field metadata. (Bug #4642) - </para> - </listitem> - - <listitem> - <para> - Optimized integer number parsing, enable <quote>old</quote> - slower integer parsing using JDK classes via - <literal>useFastIntParsing=false</literal> property. - </para> - </listitem> - - <listitem> - <para> - Added <literal>useOnlyServerErrorMessages</literal> - property, which causes message text in exceptions generated - by the server to only contain the text sent by the server - (as opposed to the SQLState's <quote>standard</quote> - description, followed by the server's error message). This - property is set to <literal>true</literal> by default. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.wasNull()</literal> does not work for - primatives if a previous <literal>null</literal> was - returned. (Bug #4689) - </para> - </listitem> - - <listitem> - <para> - Track packet sequence numbers if - <literal>enablePacketDebug=true</literal>, and throw an - exception if packets received out-of-order. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getObject()</literal> returns wrong type - for strings when using prepared statements. (Bug #4482) - </para> - </listitem> - - <listitem> - <para> - Calling <literal>MysqlPooledConnection.close()</literal> - twice (even though an application error), caused NPE. Fixed. - </para> - </listitem> - - <listitem> - <para> - <literal>ServerPreparedStatements</literal> dealing with - return of <literal>DECIMAL</literal> type don't work. (Bug - #5012) - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getObject()</literal> doesn't return type - <literal>Boolean</literal> for pseudo-bit types from - prepared statements on 4.1.x (shortcut for avoiding extra - type conversion when using binary-encoded result sets - obscured test in <literal>getObject()</literal> for - <quote>pseudo</quote> bit type). (Bug #5032) - </para> - </listitem> - - <listitem> - <para> - You can now use URLs in <literal>LOAD DATA LOCAL - INFILE</literal> statements, and the driver will use Java's - built-in handlers for retreiving the data and sending it to - the server. This feature is not enabled by default, you must - set the <literal>allowUrlInLocalInfile</literal> connection - property to <literal>true</literal>. - </para> - </listitem> - - <listitem> - <para> - The driver is more strict about truncation of numerics on - <literal>ResultSet.get*()</literal>, and will throw an - <literal>SQLException</literal> when truncation is detected. - You can disable this by setting - <literal>jdbcCompliantTruncation</literal> to - <literal>false</literal> (it is enabled by default, as this - functionality is required for JDBC compliance). - </para> - </listitem> - - <listitem> - <para> - Added three ways to deal with all-zero datetimes when - reading them from a <literal>ResultSet</literal>: - <literal>exception</literal> (the default), which throws an - <literal>SQLException</literal> with an SQLState of - <literal>S1009</literal>; <literal>convertToNull</literal>, - which returns <literal>NULL</literal> instead of the date; - and <literal>round</literal>, which rounds the date to the - nearest closest value which is - <literal>'0001-01-01'</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ServerPreparedStatement</literal> to read - prepared statement metadata off the wire, even though it's - currently a placeholder instead of using - <literal>MysqlIO.clearInputStream()</literal> which didn't - work at various times because data wasn't available to read - from the server yet. This fixes sporadic errors users were - having with <literal>ServerPreparedStatements</literal> - throwing <literal>ArrayIndexOutOfBoundExceptions</literal>. - </para> - </listitem> - - <listitem> - <para> - Use <literal>com.mysql.jdbc.Message</literal>'s classloader - when loading resource bundle, should fix sporadic issues - when the caller's classloader can't locate the resource - bundle. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-3"> - <title>Changes in MySQL Connector/J 3.1.3-beta (07 July 2004) + - <itemizedlist> - - <listitem> - <para> - Mangle output parameter names for - <literal>CallableStatements</literal> so they will not clash - with user variable names. - </para> - </listitem> - - <listitem> - <para> - Added support for <literal>INOUT</literal> parameters in - <literal>CallableStatements</literal>. - </para> - </listitem> - - <listitem> - <para> - Null bitmask sent for server-side prepared statements was - incorrect. (Bug #4119) - </para> - </listitem> - - <listitem> - <para> - Use SQL Standard SQL states by default, unless - <literal>useSqlStateCodes</literal> property is set to - <literal>false</literal>. - </para> - </listitem> - - <listitem> - <para> - Added packet debuging code (see the - <literal>enablePacketDebug</literal> property - documentation). - </para> - </listitem> - - <listitem> - <para> - Added constants for MySQL error numbers (publicly - accessible, see - <literal>com.mysql.jdbc.MysqlErrorNumbers</literal>), and - the ability to generate the mappings of vendor error codes - to SQLStates that the driver uses (for documentation - purposes). - </para> - </listitem> - - <listitem> - <para> - Externalized more messages (on-going effort). - </para> - </listitem> - - <listitem> - <para> - Error in retrieval of <literal>mediumint</literal> column - with prepared statements and binary protocol. (Bug #4311) - </para> - </listitem> - - <listitem> - <para> - Support new time zone variables in MySQL-4.1.3 when - <literal>useTimezone=true</literal>. - </para> - </listitem> - - <listitem> - <para> - Support for unsigned numerics as return types from prepared - statements. This also causes a change in - <literal>ResultSet.getObject()</literal> for the - <literal>bigint unsigned</literal> type, which used to - return <literal>BigDecimal</literal> instances, it now - returns instances of - <literal>java.lang.BigInteger</literal>. - </para> - </listitem> - - </itemizedlist> - + <para condition="dynamic:changelog:entrylist" role="3.1.3:connector-j:all"/> </section> <section id="cj-news-3-1-2"> - <title>Changes in MySQL Connector/J 3.1.2-alpha (09 June 2004) - + - <listitem> - <para> - Fixed stored procedure parameter parsing info when size was - specified for a parameter (for example, - <literal>char()</literal>, <literal>varchar()</literal>). - </para> - </listitem> + <para condition="dynamic:changelog:entrylist" role="3.1.2:connector-j:all"/> - <listitem> - <para> - Enabled callable statement caching via - <literal>cacheCallableStmts</literal> property. - </para> - </listitem> - - <listitem> - <para> - Fixed case when no output parameters specified for a stored - procedure caused a bogus query to be issued to retrieve out - parameters, leading to a syntax error from the server. - </para> - </listitem> - - <listitem> - <para> - Fixed case when no parameters could cause a - <literal>NullPointerException</literal> in - <literal>CallableStatement.setOutputParameters()</literal>. - </para> - </listitem> - - <listitem> - <para> - Removed wrapping of exceptions in - <literal>MysqlIO.changeUser()</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed sending of split packets for large queries, enabled - nio ability to send large packets as well. - </para> - </listitem> - - <listitem> - <para> - Added <literal>.toString()</literal> functionality to - <literal>ServerPreparedStatement</literal>, which should - help if you're trying to debug a query that is a prepared - statement (it shows SQL as the server would process). - </para> - </listitem> - - <listitem> - <para> - Added <literal>gatherPerformanceMetrics</literal> property, - along with properties to control when/where this info gets - logged (see docs for more info). - </para> - </listitem> - - <listitem> - <para> - <literal>ServerPreparedStatements</literal> weren't actually - de-allocating server-side resources when - <literal>.close()</literal> was called. - </para> - </listitem> - - <listitem> - <para> - Added <literal>logSlowQueries</literal> property, along with - <literal>slowQueriesThresholdMillis</literal> property to - control when a query should be considered - <quote>slow.</quote> - </para> - </listitem> - - <listitem> - <para> - Correctly map output parameters to position given in - <literal>prepareCall()</literal> versus. order implied - during <literal>registerOutParameter()</literal>. (Bug - #3146) - </para> - </listitem> - - <listitem> - <para> - Correctly detect initial character set for servers >= - 4.1.0. - </para> - </listitem> - - <listitem> - <para> - Cleaned up detection of server properties. - </para> - </listitem> - - <listitem> - <para> - Support placeholder for parameter metadata for server >= - 4.1.2. - </para> - </listitem> - - <listitem> - <para> - <literal>getProcedures()</literal> does not return any - procedures in result set. (Bug #3539) - </para> - </listitem> - - <listitem> - <para> - <literal>getProcedureColumns()</literal> doesn't work with - wildcards for procedure name. (Bug #3540) - </para> - </listitem> - - <listitem> - <para> - <literal>DBMD.getSQLStateType()</literal> returns incorrect - value. (Bug #3520) - </para> - </listitem> - - <listitem> - <para> - Added <literal>connectionCollation</literal> property to - cause driver to issue <literal>set - collation_connection=...</literal> query on connection init - if default collation for given charset is not appropriate. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>DatabaseMetaData.getProcedures()</literal> - when run on MySQL-5.0.0 (output of <literal>SHOW PROCEDURE - STATUS</literal> changed between 5.0.0 and 5.0.1. - </para> - </listitem> - - <listitem> - <para> - <literal>getWarnings()</literal> returns - <literal>SQLWarning</literal> instead of - <literal>DataTruncation</literal>. (Bug #3804) - </para> - </listitem> - - <listitem> - <para> - Don't enable server-side prepared statements for server - version 5.0.0 or 5.0.1, as they aren't compatible with the - '4.1.2+' style that the driver uses (the driver expects - information to come back that isn't there, so it hangs). - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-1"> - <title>Changes in MySQL Connector/J 3.1.1-alpha (14 February 2004) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.1:connector-j:all"/> - <listitem> - <para> - Fixed bug with <literal>UpdatableResultSets</literal> not - using client-side prepared statements. - </para> - </listitem> - - <listitem> - <para> - Fixed character encoding issues when converting bytes to - ASCII when MySQL doesn't provide the character set, and the - JVM is set to a multi-byte encoding (usually affecting - retrieval of numeric values). - </para> - </listitem> - - <listitem> - <para> - Unpack <quote>unknown</quote> data types from server - prepared statements as <literal>Strings</literal>. - </para> - </listitem> - - <listitem> - <para> - Implemented long data (Blobs, Clobs, InputStreams, Readers) - for server prepared statements. - </para> - </listitem> - - <listitem> - <para> - Implemented <literal>Statement.getWarnings()</literal> for - MySQL-4.1 and newer (using <literal>SHOW - WARNINGS</literal>). - </para> - </listitem> - - <listitem> - <para> - Default result set type changed to - <literal>TYPE_FORWARD_ONLY</literal> (JDBC compliance). - </para> - </listitem> - - <listitem> - <para> - Centralized setting of result set type and concurrency. - </para> - </listitem> - - <listitem> - <para> - Refactored how connection properties are set and exposed as - <literal>DriverPropertyInfo</literal> as well as - <literal>Connection</literal> and - <literal>DataSource</literal> properties. - </para> - </listitem> - - <listitem> - <para> - Support for NIO. Use <literal>useNIO=true</literal> on - platforms that support NIO. - </para> - </listitem> - - <listitem> - <para> - Support for transaction savepoints (MySQL >= 4.0.14 or - 4.1.1). - </para> - </listitem> - - <listitem> - <para> - Support for <literal>mysql_change_user()</literal>. See the - <literal>changeUser()</literal> method in - <literal>com.mysql.jdbc.Connection</literal>. - </para> - </listitem> - - <listitem> - <para> - Reduced number of methods called in average query to be more - efficient. - </para> - </listitem> - - <listitem> - <para> - Prepared <literal>Statements</literal> will be re-prepared - on auto-reconnect. Any errors encountered are postponed - until first attempt to re-execute the re-prepared statement. - </para> - </listitem> - - <listitem> - <para> - Ensure that warnings are cleared before executing queries on - prepared statements, as-per JDBC spec (now that we support - warnings). - </para> - </listitem> - - <listitem> - <para> - Support <quote>old</quote> <literal>profileSql</literal> - capitalization in <literal>ConnectionProperties</literal>. - This property is deprecated, you should use - <literal>profileSQL</literal> if possible. - </para> - </listitem> - - <listitem> - <para> - Optimized <literal>Buffer.readLenByteArray()</literal> to - return shared empty byte array when length is 0. - </para> - </listitem> - - <listitem> - <para> - Allow contents of - <literal>PreparedStatement.setBlob()</literal> to be - retained between calls to <literal>.execute*()</literal>. - </para> - </listitem> - - <listitem> - <para> - Deal with 0-length tokens in - <literal>EscapeProcessor</literal> (caused by callable - statement escape syntax). - </para> - </listitem> - - <listitem> - <para> - Check for closed connection on delete/update/insert row - operations in <literal>UpdatableResultSet</literal>. - </para> - </listitem> - - <listitem> - <para> - Fix support for table aliases when checking for all primary - keys in <literal>UpdatableResultSet</literal>. - </para> - </listitem> - - <listitem> - <para> - Removed <literal>useFastDates</literal> connection property. - </para> - </listitem> - - <listitem> - <para> - Correctly initialize datasource properties from JNDI Refs, - including explicitly specified URLs. - </para> - </listitem> - - <listitem> - <para> - <literal>DatabaseMetaData</literal> now reports - <literal>supportsStoredProcedures()</literal> for MySQL - versions >= 5.0.0 - </para> - </listitem> - - <listitem> - <para> - Fixed stack overflow in - <literal>Connection.prepareCall()</literal> (bad merge). - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>IllegalAccessError</literal> to - <literal>Calendar.getTimeInMillis()</literal> in - <literal>DateTimeValue</literal> (for JDK < 1.4). - </para> - </listitem> - - <listitem> - <para> - <literal>DatabaseMetaData.getColumns()</literal> is not - returning correct column ordinal info for - non-<literal>'%'</literal> column name patterns. (Bug #1673) - </para> - </listitem> - - <listitem> - <para> - Merged fix of datatype mapping from MySQL type - <literal>FLOAT</literal> to - <literal>java.sql.Types.REAL</literal> from 3.0 branch. - </para> - </listitem> - - <listitem> - <para> - Detect collation of column for - <literal>RSMD.isCaseSensitive()</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed sending of queries larger than 16M. - </para> - </listitem> - - <listitem> - <para> - Added named and indexed input/output parameter support to - <literal>CallableStatement</literal>. MySQL-5.0.x or newer. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>NullPointerException</literal> in - <literal>ServerPreparedStatement.setTimestamp()</literal>, - as well as year and month descrepencies in - <literal>ServerPreparedStatement.setTimestamp()</literal>, - <literal>setDate()</literal>. - </para> - </listitem> - - <listitem> - <para> - Added ability to have multiple database/JVM targets for - compliance and regression/unit tests in - <filename>build.xml</filename>. - </para> - </listitem> - - <listitem> - <para> - Fixed NPE and year/month bad conversions when accessing some - datetime functionality in - <literal>ServerPreparedStatements</literal> and their - resultant result sets. - </para> - </listitem> - - <listitem> - <para> - Display where/why a connection was implicitly closed (to aid - debugging). - </para> - </listitem> - - <listitem> - <para> - <literal>CommunicationsException</literal> implemented, that - tries to determine why communications was lost with a - server, and displays possible reasons when - <literal>.getMessage()</literal> is called. - </para> - </listitem> - - <listitem> - <para> - <literal>NULL</literal> values for numeric types in binary - encoded result sets causing - <literal>NullPointerExceptions</literal>. (Bug #2359) - </para> - </listitem> - - <listitem> - <para> - Implemented <literal>Connection.prepareCall()</literal>, and - <literal>DatabaseMetaData</literal>. - <literal>getProcedures()</literal> and - <literal>getProcedureColumns()</literal>. - </para> - </listitem> - - <listitem> - <para> - Reset <literal>long binary</literal> parameters in - <literal>ServerPreparedStatement</literal> when - <literal>clearParameters()</literal> is called, by sending - <literal>COM_RESET_STMT</literal> to the server. - </para> - </listitem> - - <listitem> - <para> - Merged prepared statement caching, and - <literal>.getMetaData()</literal> support from 3.0 branch. - </para> - </listitem> - - <listitem> - <para> - Fixed off-by-1900 error in some cases for years in - <literal>TimeUtil.fastDate</literal>/<literal>TimeCreate()</literal> - when unpacking results from server-side prepared statements. - </para> - </listitem> - - <listitem> - <para> - Fixed charset conversion issue in - <literal>getTables()</literal>. (Bug #2502) - </para> - </listitem> - - <listitem> - <para> - Implemented multiple result sets returned from a statement - or stored procedure. - </para> - </listitem> - - <listitem> - <para> - Server-side prepared statements were not returning datatype - <literal>YEAR</literal> correctly. (Bug #2606) - </para> - </listitem> - - <listitem> - <para> - Enabled streaming of result sets from server-side prepared - statements. - </para> - </listitem> - - <listitem> - <para> - Class-cast exception when using scrolling result sets and - server-side prepared statements. (Bug #2623) - </para> - </listitem> - - <listitem> - <para> - Merged unbuffered input code from 3.0. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ConnectionProperties</literal> that weren't - properly exposed via accessors, cleaned up - <literal>ConnectionProperties</literal> code. - </para> - </listitem> - - <listitem> - <para> - <literal>NULL</literal> fields were not being encoded - correctly in all cases in server-side prepared statements. - (Bug #2671) - </para> - </listitem> - - <listitem> - <para> - Fixed rare buffer underflow when writing numbers into - buffers for sending prepared statement execution requests. - </para> - </listitem> - - <listitem> - <para> - Use DocBook version of docs for shipped versions of drivers. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-1-0"> - <title>Changes in MySQL Connector/J 3.1.0-alpha (18 February 2003) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.1.0:connector-j:all"/> - <listitem> - <para> - Added <literal>requireSSL</literal> property. - </para> - </listitem> - - <listitem> - <para> - Added <literal>useServerPrepStmts</literal> property - (default <literal>false</literal>). The driver will use - server-side prepared statements when the server version - supports them (4.1 and newer) when this property is set to - <literal>true</literal>. It is currently set to - <literal>false</literal> by default until all bind/fetch - functionality has been implemented. Currently only DML - prepared statements are implemented for 4.1 server-side - prepared statements. - </para> - </listitem> - - <listitem> - <para> - Track open <literal>Statements</literal>, close all when - <literal>Connection.close()</literal> is called (JDBC - compliance). - </para> - </listitem> - - </itemizedlist> - </section> </section> @@ -3916,2443 +327,147 @@ <section id="cj-news-3-0-17"> - <title>Changes in MySQL Connector/J 3.0.17-ga (23 June 2005) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.17:connector-j:all"/> - <listitem> - <para> - <literal>Timestamp</literal>/<literal>Time</literal> - conversion goes in the wrong <quote>direction</quote> when - <literal>useTimeZone=true</literal> and server time zone - differs from client time zone. (Bug #5874) - </para> - </listitem> - <listitem> - <para> - <literal>DatabaseMetaData.getIndexInfo()</literal> ignored - <literal>unique</literal> parameter. (Bug #7081) - </para> - </listitem> - - <listitem> - <para> - Support new protocol type - <literal>MYSQL_TYPE_VARCHAR</literal>. - </para> - </listitem> - - <listitem> - <para> - Added <literal>useOldUTF8Behavior</literal>' configuration - property, which causes JDBC driver to act like it did with - MySQL-4.0.x and earlier when the character encoding is - <literal>utf-8</literal> when connected to MySQL-4.1 or - newer. - </para> - </listitem> - - <listitem> - <para> - Statements created from a pooled connection were returning - physical connection instead of logical connection when - <literal>getConnection()</literal> was called. (Bug #7316) - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatements</literal> don't encode Big5 (and - other multi-byte) character sets correctly in static SQL - strings. (Bug #7033) - </para> - </listitem> - - <listitem> - <para> - Connections starting up failed-over (due to down master) - never retry master. (Bug #6966) - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatement.fixDecimalExponent()</literal> - adding extra <literal>+</literal>, making number unparseable - by MySQL server. (Bug #7061) - </para> - </listitem> - - <listitem> - <para> - Timestamp key column data needed <literal>_binary</literal> - stripped for - <literal>UpdatableResultSet.refreshRow()</literal>. (Bug - #7686) - </para> - </listitem> - - <listitem> - <para> - Backported SQLState codes mapping from Connector/J 3.1, - enable with <literal>useSqlStateCodes=true</literal> as a - connection property, it defaults to <literal>false</literal> - in this release, so that we don't break legacy applications - (it defaults to <literal>true</literal> starting with - Connector/J 3.1). - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatement.fixDecimalExponent()</literal> - adding extra <literal>+</literal>, making number unparseable - by MySQL server. (Bug #7601) - </para> - </listitem> - - <listitem> - <para> - Escape sequence {fn convert(..., type)} now supports - ODBC-style types that are prepended by - <literal>SQL_</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed duplicated code in - <literal>configureClientCharset()</literal> that prevented - <literal>useOldUTF8Behavior=true</literal> from working - properly. - </para> - </listitem> - - <listitem> - <para> - Handle streaming result sets with more than 2 billion rows - properly by fixing wraparound of row number counter. - </para> - </listitem> - - <listitem> - <para> - <literal>MS932</literal>, <literal>SHIFT_JIS</literal>, and - <literal>Windows_31J</literal> not recognized as aliases for - <literal>sjis</literal>. (Bug #7607) - </para> - </listitem> - - <listitem> - <para> - Adding <literal>CP943</literal> to aliases for - <literal>sjis</literal>. (Bug #6549, fixed while fixing Bug - #7607) - </para> - </listitem> - - <listitem> - <para> - Which requires hex escaping of binary data when using - multi-byte charsets with prepared statements. (Bug #8064) - </para> - </listitem> - - <listitem> - <para> - <literal>NON_UNIQUE</literal> column from - <literal>DBMD.getIndexInfo()</literal> returned inverted - value. (Bug #8812) - </para> - </listitem> - - <listitem> - <para> - Workaround for server Bug #9098: Default values of - <literal>CURRENT_*</literal> for <literal>DATE</literal>, - <literal>TIME</literal>, <literal>DATETIME</literal>, and - <literal>TIMESTAMP</literal> columns can't be distinguished - from <literal>string</literal> values, so - <literal>UpdatableResultSet.moveToInsertRow()</literal> - generates bad SQL for inserting default values. - </para> - </listitem> - - <listitem> - <para> - <literal>EUCKR</literal> charset is sent as <literal>SET - NAMES euc_kr</literal> which MySQL-4.1 and newer doesn't - understand. (Bug #8629) - </para> - </listitem> - - <listitem> - <para> - <literal>DatabaseMetaData.supportsSelectForUpdate()</literal> - returns correct value based on server version. - </para> - </listitem> - - <listitem> - <para> - Use hex escapes for - <literal>PreparedStatement.setBytes()</literal> for - double-byte charsets including <quote>aliases</quote> - <literal>Windows-31J</literal>, <literal>CP934</literal>, - <literal>MS932</literal>. - </para> - </listitem> - - <listitem> - <para> - Added support for the <literal>EUC_JP_Solaris</literal> - character encoding, which maps to a MySQL encoding of - <literal>eucjpms</literal> (backported from 3.1 branch). - This only works on servers that support - <literal>eucjpms</literal>, namely 5.0.3 or later. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-16"> - <title>Changes in MySQL Connector/J 3.0.16-ga (15 November 2004) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.16:connector-j:all"/> - <listitem> - <para> - Re-issue character set configuration commands when re-using - pooled connections and/or - <literal>Connection.changeUser()</literal> when connected to - MySQL-4.1 or newer. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSetMetaData.isReadOnly()</literal> to - detect non-writable columns when connected to MySQL-4.1 or - newer, based on existence of <quote>original</quote> table - and column names. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.updateByte()</literal> when on insert row - throws <literal>ArrayOutOfBoundsException</literal>. (Bug - #5664) - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>DatabaseMetaData.getTypes()</literal> - returning incorrect (this is, non-negative) scale for the - <literal>NUMERIC</literal> type. - </para> - </listitem> - - <listitem> - <para> - Off-by-one bug in - <literal>Buffer.readString(<replaceable>string</replaceable>)</literal>. - (Bug #5664) - </para> - </listitem> - - <listitem> - <para> - Made <literal>TINYINT(1)</literal> -> - <literal>BIT</literal>/<literal>Boolean</literal> conversion - configurable via <literal>tinyInt1isBit</literal> property - (default <literal>true</literal> to be JDBC compliant out of - the box). - </para> - </listitem> - - <listitem> - <para> - Only set <literal>character_set_results</literal> during - connection establishment if server version >= 4.1.1. - </para> - </listitem> - - <listitem> - <para> - Fixed regression where <literal>useUnbufferedInput</literal> - was defaulting to <literal>false</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getTimestamp()</literal> on a column with - <literal>TIME</literal> in it fails. (Bug #5664) - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-15"> - <title>Changes in MySQL Connector/J 3.0.15-production (04 September 2004) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.15:connector-j:all"/> - <listitem> - <para> - <literal>StringUtils.escapeEasternUnicodeByteStream</literal> - was still broken for GBK. (Bug #4010) - </para> - </listitem> - - <listitem> - <para> - Failover for <literal>autoReconnect</literal> not using port - numbers for any hosts, and not retrying all hosts. - (<emphasis role="bold">Warning</emphasis>: This required a - change to the <literal>SocketFactory</literal> - <literal>connect()</literal> method signature, which is now - <literal>public Socket connect(String host, int portNumber, - Properties props)</literal>; therefore, any third-party - socket factories will have to be changed to support this - signature. (Bug #4334) - </para> - </listitem> - - <listitem> - <para> - Logical connections created by - <literal>MysqlConnectionPoolDataSource</literal> will now - issue a <literal>rollback()</literal> when they are closed - and sent back to the pool. If your application - server/connection pool already does this for you, you can - set the <literal>rollbackOnPooledClose</literal> property to - <literal>false</literal> to avoid the overhead of an extra - <literal>rollback()</literal>. - </para> - </listitem> - - <listitem> - <para> - Removed redundant calls to <literal>checkRowPos()</literal> - in <literal>ResultSet</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>DOUBLE</literal> mapped twice in - <literal>DBMD.getTypeInfo()</literal>. (Bug #4742) - </para> - </listitem> - - <listitem> - <para> - Added FLOSS license exemption. - </para> - </listitem> - - <listitem> - <para> - Calling <literal>.close()</literal> twice on a - <literal>PooledConnection</literal> causes NPE. (Bug #4808) - </para> - </listitem> - - <listitem> - <para> - <literal>DBMD.getColumns()</literal> returns incorrect JDBC - type for unsigned columns. This affects type mappings for - all numeric types in the - <literal>RSMD.getColumnType()</literal> and - <literal>RSMD.getColumnTypeNames()</literal> methods as - well, to ensure that <quote>like</quote> types from - <literal>DBMD.getColumns()</literal> match up with what - <literal>RSMD.getColumnType()</literal> and - <literal>getColumnTypeNames()</literal> return. (Bug #4138, - Bug #4860) - </para> - </listitem> - - <listitem> - <para> - <quote>Production</quote> is now <quote>GA</quote> (General - Availability) in naming scheme of distributions. - </para> - </listitem> - - <listitem> - <para> - <literal>RSMD.getPrecision()</literal> returning 0 for - non-numeric types (should return max length in chars for - non-binary types, max length in bytes for binary types). - This fix also fixes mapping of - <literal>RSMD.getColumnType()</literal> and - <literal>RSMD.getColumnTypeName()</literal> for the - <literal>BLOB</literal> types based on the length sent from - the server (the server doesn't distinguish between - <literal>TINYBLOB</literal>, <literal>BLOB</literal>, - <literal>MEDIUMBLOB</literal> or <literal>LONGBLOB</literal> - at the network protocol level). (Bug #4880) - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet</literal> should release - <literal>Field[]</literal> instance in - <literal>.close()</literal>. (Bug #5022) - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getMetaData()</literal> should not return - incorrectly initialized metadata if the result set has been - closed, but should instead throw an - <literal>SQLException</literal>. Also fixed for - <literal>getRow()</literal> and - <literal>getWarnings()</literal> and traversal methods by - calling <literal>checkClosed()</literal> before operating on - instance-level fields that are nullified during - <literal>.close()</literal>. (Bug #5069) - </para> - </listitem> - - <listitem> - <para> - Parse new time zone variables from 4.1.x servers. - </para> - </listitem> - - <listitem> - <para> - Use <literal>_binary</literal> introducer for - <literal>PreparedStatement.setBytes()</literal> and - <literal>set*Stream()</literal> when connected to - MySQL-4.1.x or newer to avoid misinterpretation during - character conversion. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-14"> - <title>Changes in MySQL Connector/J 3.0.14-production (28 May 2004) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.14:connector-j:all"/> - <listitem> - <para> - Fixed URL parsing error. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-13"> - <title>Changes in MySQL Connector/J 3.0.13-production (27 May 2004) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.13:connector-j:all"/> - <listitem> - <para> - Using a <literal>MySQLDatasource</literal> without server - name fails. (Bug #3848) - </para> - </listitem> - - <listitem> - <para> - <literal>No Database Selected</literal> when using - <literal>MysqlConnectionPoolDataSource</literal>. (Bug - #3920) - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatement.getGeneratedKeys()</literal> - method returns only 1 result for batched insertions. (Bug - #3873) - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-12"> - <title>Changes in MySQL Connector/J 3.0.12-production (18 May 2004) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.12:connector-j:all"/> - <listitem> - <para> - Add unsigned attribute to - <literal>DatabaseMetaData.getColumns()</literal> output in - the <literal>TYPE_NAME</literal> column. - </para> - </listitem> - - <listitem> - <para> - Added <literal>failOverReadOnly</literal> property, to allow - end-user to configure state of connection - (read-only/writable) when failed over. - </para> - </listitem> - - <listitem> - <para> - Backported <quote>change user</quote> and <quote>reset - server state</quote> functionality from 3.1 branch, to allow - clients of <literal>MysqlConnectionPoolDataSource</literal> - to reset server state on <literal>getConnection()</literal> - on a pooled connection. - </para> - </listitem> - - <listitem> - <para> - Don't escape SJIS/GBK/BIG5 when using MySQL-4.1 or newer. - </para> - </listitem> - - <listitem> - <para> - Allow <literal>url</literal> parameter for - <literal>MysqlDataSource</literal> and - <literal>MysqlConnectionPool</literal> - <literal>DataSource</literal> so that passing of other - properties is possible from inside appservers. - </para> - </listitem> - - <listitem> - <para> - Map duplicate key and foreign key errors to SQLState of - <literal>23000</literal>. - </para> - </listitem> - - <listitem> - <para> - Backport documentation tooling from 3.1 branch. - </para> - </listitem> - - <listitem> - <para> - Return creating statement for <literal>ResultSets</literal> - created by <literal>getGeneratedKeys()</literal>. (Bug - #2957) - </para> - </listitem> - - <listitem> - <para> - Allow <literal>java.util.Date</literal> to be sent in as - parameter to - <literal>PreparedStatement.setObject()</literal>, converting - it to a <literal>Timestamp</literal> to maintain full - precision. (Bug #103). - </para> - </listitem> - - <listitem> - <para> - Don't truncate <literal>BLOB</literal> or - <literal>CLOB</literal> values when using - <literal>setBytes()</literal> and/or - <literal>setBinary/CharacterStream()</literal>. (Bug #2670). - </para> - </listitem> - - <listitem> - <para> - Dynamically configure character set mappings for field-level - character sets on MySQL-4.1.0 and newer using <literal>SHOW - COLLATION</literal> when connecting. - </para> - </listitem> - - <listitem> - <para> - Map <literal>binary</literal> character set to - <literal>US-ASCII</literal> to support - <literal>DATETIME</literal> charset recognition for servers - >= 4.1.2. - </para> - </listitem> - - <listitem> - <para> - Use <literal>SET character_set_results</literal> during - initialization to allow any charset to be returned to the - driver for result sets. - </para> - </listitem> - - <listitem> - <para> - Use <literal>charsetnr</literal> returned during connect to - encode queries before issuing <literal>SET NAMES</literal> - on MySQL >= 4.1.0. - </para> - </listitem> - - <listitem> - <para> - Add helper methods to <literal>ResultSetMetaData</literal> - (<literal>getColumnCharacterEncoding()</literal> and - <literal>getColumnCharacterSet()</literal>) to allow - end-users to see what charset the driver thinks it should be - using for the column. - </para> - </listitem> - - <listitem> - <para> - Only set <literal>character_set_results</literal> for MySQL - >= 4.1.0. - </para> - </listitem> - - <listitem> - <para> - <literal>StringUtils.escapeSJISByteStream()</literal> not - covering all eastern double-byte charsets correctly. (Bug - #3511) - </para> - </listitem> - - <listitem> - <para> - Renamed - <literal>StringUtils.escapeSJISByteStream()</literal> to - more appropriate - <literal>escapeEasternUnicodeByteStream()</literal>. - </para> - </listitem> - - <listitem> - <para> - Not specifying database in URL caused - <literal>MalformedURL</literal> exception. (Bug #3554) - </para> - </listitem> - - <listitem> - <para> - Auto-convert MySQL encoding names to Java encoding names if - used for <literal>characterEncoding</literal> property. - </para> - </listitem> - - <listitem> - <para> - Added encoding names that are recognized on some JVMs to fix - case where they were reverse-mapped to MySQL encoding names - incorrectly. - </para> - </listitem> - - <listitem> - <para> - Use <literal>junit.textui.TestRunner</literal> for all unit - tests (to allow them to be run from the command line outside - of Ant or Eclipse). - </para> - </listitem> - - <listitem> - <para> - <literal>UpdatableResultSet</literal> not picking up default - values for <literal>moveToInsertRow()</literal>. (Bug #3557) - </para> - </listitem> - - <listitem> - <para> - Inconsistent reporting of data type. The server still - doesn't return all types for *BLOBs *TEXT correctly, so the - driver won't return those correctly. (Bug #3570) - </para> - </listitem> - - <listitem> - <para> - <literal>DBMD.getSQLStateType()</literal> returns incorrect - value. (Bug #3520) - </para> - </listitem> - - <listitem> - <para> - Fixed regression in - <literal>PreparedStatement.setString()</literal> and eastern - character encodings. - </para> - </listitem> - - <listitem> - <para> - Made <literal>StringRegressionTest</literal> 4.1-unicode - aware. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-11"> - <title>Changes in MySQL Connector/J 3.0.11-stable (19 February 2004) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.11:connector-j:all"/> - <listitem> - <para> - Trigger a <literal>SET NAMES utf8</literal> when encoding is - forced to <literal>utf8</literal> <emphasis>or</emphasis> - <literal>utf-8</literal> via the - <literal>characterEncoding</literal> property. Previously, - only the Java-style encoding name of - <literal>utf-8</literal> would trigger this. - </para> - </listitem> - - <listitem> - <para> - <literal>AutoReconnect</literal> time was growing faster - than exponentially. (Bug #2447) - </para> - </listitem> - - <listitem> - <para> - Fixed failover always going to last host in list. (Bug - #2578) - </para> - </listitem> - - <listitem> - <para> - Added <literal>useUnbufferedInput</literal> parameter, and - now use it by default (due to JVM issue - <ulink url="http://developer.java.sun.com/developer/bugParade/bugs/4401235.html"/>) - </para> - </listitem> - - <listitem> - <para> - Detect <literal>on</literal>/<literal>off</literal> or - <literal>1</literal>, <literal>2</literal>, - <literal>3</literal> form of - <literal>lower_case_table_names</literal> value on server. - </para> - </listitem> - - <listitem> - <para> - Return <literal>java.lang.Integer</literal> for - <literal>TINYINT</literal> and <literal>SMALLINT</literal> - types from - <literal>ResultSetMetaData.getColumnClassName()</literal>. - (Bug #2852) - </para> - </listitem> - - <listitem> - <para> - Return <literal>java.lang.Double</literal> for - <literal>FLOAT</literal> type from - <literal>ResultSetMetaData.getColumnClassName()</literal>. - (Bug #2855) - </para> - </listitem> - - <listitem> - <para> - Return <literal>[B</literal> instead of - <literal>java.lang.Object</literal> for - <literal>BINARY</literal>, <literal>VARBINARY</literal> and - <literal>LONGVARBINARY</literal> types from - <literal>ResultSetMetaData.getColumnClassName()</literal> - (JDBC compliance). - </para> - </listitem> - - <listitem> - <para> - Issue connection events on all instances created from a - <literal>ConnectionPoolDataSource</literal>. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-10"> - <title>Changes in MySQL Connector/J 3.0.10-stable (13 January 2004) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.10:connector-j:all"/> - <listitem> - <para> - Don't count quoted IDs when inside a 'string' in - <literal>PreparedStatement</literal> parsing. (Bug #1511) - </para> - </listitem> - - <listitem> - <para> - <quote>Friendlier</quote> exception message for - <literal>PacketTooLargeException</literal>. (Bug #1534) - </para> - </listitem> - - <listitem> - <para> - Backported fix for aliased tables and - <literal>UpdatableResultSets</literal> in - <literal>checkUpdatability()</literal> method from 3.1 - branch. - </para> - </listitem> - - <listitem> - <para> - Fix for <literal>ArrayIndexOutOfBounds</literal> exception - when using <literal>Statement.setMaxRows()</literal>. (Bug - #1695) - </para> - </listitem> - - <listitem> - <para> - Barge blobs and split packets not being read correctly. (Bug - #1576) - </para> - </listitem> - - <listitem> - <para> - Fixed regression of - <literal>Statement.getGeneratedKeys()</literal> and - <literal>REPLACE</literal> statements. - </para> - </listitem> - - <listitem> - <para> - Subsequent call to <literal>ResultSet.updateFoo()</literal> - causes NPE if result set is not updatable. (Bug #1630) - </para> - </listitem> - - <listitem> - <para> - Fix for 4.1.1-style authentication with no password. - </para> - </listitem> - - <listitem> - <para> - Foreign Keys column sequence is not consistent in - <literal>DatabaseMetaData.getImported/Exported/CrossReference()</literal>. - (Bug #1731) - </para> - </listitem> - - <listitem> - <para> - <literal>DatabaseMetaData.getSystemFunction()</literal> - returning bad function <literal>VResultsSion</literal>. (Bug - #1775) - </para> - </listitem> - - <listitem> - <para> - Cross-database updatable result sets are not checked for - updatability correctly. (Bug #1592) - </para> - </listitem> - - <listitem> - <para> - <literal>DatabaseMetaData.getColumns()</literal> should - return <literal>Types.LONGVARCHAR</literal> for MySQL - <literal>LONGTEXT</literal> type. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getObject()</literal> on - <literal>TINYINT</literal> and <literal>SMALLINT</literal> - columns should return Java type <literal>Integer</literal>. - (Bug #1913) - </para> - </listitem> - - <listitem> - <para> - Added <literal>alwaysClearStream</literal> connection - property, which causes the driver to always empty any - remaining data on the input stream before each query. - </para> - </listitem> - - <listitem> - <para> - Added more descriptive error message <literal>Server - Configuration Denies Access to DataSource</literal>, as well - as retrieval of message from server. - </para> - </listitem> - - <listitem> - <para> - Autoreconnect code didn't set catalog upon reconnect if it - had been changed. - </para> - </listitem> - - <listitem> - <para> - Implement <literal>ResultSet.updateClob()</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSetMetaData.isCaseSensitive()</literal> - returned wrong value for - <literal>CHAR</literal>/<literal>VARCHAR</literal> columns. - </para> - </listitem> - - <listitem> - <para> - Connection property <literal>maxRows</literal> not honored. - (Bug #1933) - </para> - </listitem> - - <listitem> - <para> - Statements being created too many times in - <literal>DBMD.extractForeignKeyFromCreateTable()</literal>. - (Bug #1925) - </para> - </listitem> - - <listitem> - <para> - Support escape sequence {fn convert ... }. (Bug #1914) - </para> - </listitem> - - <listitem> - <para> - <literal>ArrayIndexOutOfBounds</literal> when parameter - number == number of parameters + 1. (Bug #1958) - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.findColumn()</literal> should use first - matching column name when there are duplicate column names - in <literal>SELECT</literal> query (JDBC-compliance). (Bug - #2006) - </para> - </listitem> - - <listitem> - <para> - Removed static synchronization bottleneck from - <literal>PreparedStatement.setTimestamp()</literal>. - </para> - </listitem> - - <listitem> - <para> - Removed static synchronization bottleneck from instance - factory method of - <literal>SingleByteCharsetConverter</literal>. - </para> - </listitem> - - <listitem> - <para> - Enable caching of the parsing stage of prepared statements - via the <literal>cachePrepStmts</literal>, - <literal>prepStmtCacheSize</literal>, and - <literal>prepStmtCacheSqlLimit</literal> properties - (disabled by default). - </para> - </listitem> - - <listitem> - <para> - Speed up parsing of <literal>PreparedStatements</literal>, - try to use one-pass whenever possible. - </para> - </listitem> - - <listitem> - <para> - Fixed security exception when used in Applets (applets can't - read the system property <literal>file.encoding</literal> - which is needed for <literal>LOAD DATA LOCAL - INFILE</literal>). - </para> - </listitem> - - <listitem> - <para> - Use constants for SQLStates. - </para> - </listitem> - - <listitem> - <para> - Map charset <literal>ko18_ru</literal> to - <literal>ko18r</literal> when connected to MySQL-4.1.0 or - newer. - </para> - </listitem> - - <listitem> - <para> - Ensure that <literal>Buffer.writeString()</literal> saves - room for the <literal>\0</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed exception <literal>Unknown character set - 'danish'</literal> on connect with JDK-1.4.0 - </para> - </listitem> - - <listitem> - <para> - Fixed mappings in SQLError to report deadlocks with - SQLStates of <literal>41000</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>maxRows</literal> property would affect internal - statements, so check it for all statement creation internal - to the driver, and set to 0 when it is not. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-9"> - <title>Changes in MySQL Connector/J 3.0.9-stable (07 October 2003) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.9:connector-j:all"/> - <listitem> - <para> - Faster date handling code in <literal>ResultSet</literal> - and <literal>PreparedStatement</literal> (no longer uses - <literal>Date</literal> methods that synchronize on static - calendars). - </para> - </listitem> - - <listitem> - <para> - Fixed test for end of buffer in - <literal>Buffer.readString()</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSet.previous()</literal> behavior to - move current position to before result set when on first row - of result set. (Bug #496) - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>Statement</literal> and - <literal>PreparedStatement</literal> issuing bogus queries - when <literal>setMaxRows()</literal> had been used and a - <literal>LIMIT</literal> clause was present in the query. - </para> - </listitem> - - <listitem> - <para> - <literal>refreshRow</literal> didn't work when primary key - values contained values that needed to be escaped (they - ended up being doubly escaped). (Bug #661) - </para> - </listitem> - - <listitem> - <para> - Support <literal>InnoDB</literal> contraint names when - extracting foreign key information in - <literal>DatabaseMetaData</literal> (implementing ideas from - Parwinder Sekhon). (Bug #517, Bug #664) - </para> - </listitem> - - <listitem> - <para> - Backported 4.1 protocol changes from 3.1 branch (server-side - SQL states, new field information, larger client capability - flags, connect-with-database, and so forth). - </para> - </listitem> - - <listitem> - <para> - Fix <literal>UpdatableResultSet</literal> to return values - for <literal>get<replaceable>XXX</replaceable>()</literal> - when on insert row. (Bug #675) - </para> - </listitem> - - <listitem> - <para> - The <literal>insertRow</literal> in an - <literal>UpdatableResultSet</literal> is now loaded with the - default column values when - <literal>moveToInsertRow()</literal> is called. (Bug #688) - </para> - </listitem> - - <listitem> - <para> - <literal>DatabaseMetaData.getColumns()</literal> wasn't - returning <literal>NULL</literal> for default values that - are specified as <literal>NULL</literal>. - </para> - </listitem> - - <listitem> - <para> - Change default statement type/concurrency to - <literal>TYPE_FORWARD_ONLY</literal> and - <literal>CONCUR_READ_ONLY</literal> (spec compliance). - </para> - </listitem> - - <listitem> - <para> - Don't try and reset isolation level on reconnect if MySQL - doesn't support them. - </para> - </listitem> - - <listitem> - <para> - Don't wrap <literal>SQLExceptions</literal> in - <literal>RowDataDynamic</literal>. - </para> - </listitem> - - <listitem> - <para> - Don't change timestamp TZ twice if - <literal>useTimezone==true</literal>. (Bug #774) - </para> - </listitem> - - <listitem> - <para> - Fixed regression in large split-packet handling. (Bug #848) - </para> - </listitem> - - <listitem> - <para> - Better diagnostic error messages in exceptions for - <quote>streaming</quote> result sets. - </para> - </listitem> - - <listitem> - <para> - Issue exception on - <literal>ResultSet.get<replaceable>XXX</replaceable>()</literal> - on empty result set (wasn't caught in some cases). - </para> - </listitem> - - <listitem> - <para> - Don't hide messages from exceptions thrown in I/O layers. - </para> - </listitem> - - <listitem> - <para> - Don't fire connection closed events when closing pooled - connections, or on - <literal>PooledConnection.getConnection()</literal> with - already open connections. (Bug #884) - </para> - </listitem> - - <listitem> - <para> - Clip +/- INF (to smallest and largest representative values - for the type in MySQL) and NaN (to 0) for - <literal>setDouble</literal>/<literal>setFloat()</literal>, - and issue a warning on the statement when the server does - not support +/- INF or NaN. - </para> - </listitem> - - <listitem> - <para> - Double-escaping of <literal>'\'</literal> when charset is - SJIS or GBK and <literal>'\'</literal> appears in - non-escaped input. (Bug #879) - </para> - </listitem> - - <listitem> - <para> - When emptying input stream of unused rows for - <quote>streaming</quote> result sets, have the current - thread <literal>yield()</literal> every 100 rows in order to - not monopolize CPU time. - </para> - </listitem> - - <listitem> - <para> - <literal>DatabaseMetaData.getColumns()</literal> getting - confused about the keyword <quote>set</quote> in character - columns. (Bug #1099) - </para> - </listitem> - - <listitem> - <para> - Fixed deadlock issue with - <literal>Statement.setMaxRows()</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>CLOB.truncate()</literal>. (Bug #1130) - </para> - </listitem> - - <listitem> - <para> - Optimized <literal>CLOB.setChracterStream()</literal>. (Bug - #1131) - </para> - </listitem> - - <listitem> - <para> - Made <literal>databaseName</literal>, - <literal>portNumber</literal>, and - <literal>serverName</literal> optional parameters for - <literal>MysqlDataSourceFactory</literal>. (Bug #1246) - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.get/setString</literal> mashing char 127. - (Bug #1247) - </para> - </listitem> - - <listitem> - <para> - Backported authentication changes for 4.1.1 and newer from - 3.1 branch. - </para> - </listitem> - - <listitem> - <para> - Added <literal>com.mysql.jdbc.util.BaseBugReport</literal> - to help creation of testcases for bug reports. - </para> - </listitem> - - <listitem> - <para> - Added property to <quote>clobber</quote> streaming results, - by setting the <literal>clobberStreamingResults</literal> - property to <literal>true</literal> (the default is - <literal>false</literal>). This will cause a - <quote>streaming</quote> <literal>ResultSet</literal> to be - automatically closed, and any oustanding data still - streaming from the server to be discarded if another query - is executed before all the data has been read from the - server. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-8"> - <title>Changes in MySQL Connector/J 3.0.8-stable (23 May 2003) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.8:connector-j:all"/> - <listitem> - <para> - Allow bogus URLs in - <literal>Driver.getPropertyInfo()</literal>. - </para> - </listitem> - - <listitem> - <para> - Return list of generated keys when using multi-value - <literal>INSERTS</literal> with - <literal>Statement.getGeneratedKeys()</literal>. - </para> - </listitem> - - <listitem> - <para> - Use JVM charset with filenames and <literal>LOAD DATA - [LOCAL] INFILE</literal>. - </para> - </listitem> - - <listitem> - <para> - Fix infinite loop with - <literal>Connection.cleanup()</literal>. - </para> - </listitem> - - <listitem> - <para> - Changed Ant target <literal>compile-core</literal> to - <literal>compile-driver</literal>, and made testsuite - compilation a separate target. - </para> - </listitem> - - <listitem> - <para> - Fixed result set not getting set for - <literal>Statement.executeUpdate()</literal>, which affected - <literal>getGeneratedKeys()</literal> and - <literal>getUpdateCount()</literal> in some cases. - </para> - </listitem> - - <listitem> - <para> - Unicode character 0xFFFF in a string would cause the driver - to throw an <literal>ArrayOutOfBoundsException</literal>. - (Bug #378). - </para> - </listitem> - - <listitem> - <para> - Return correct number of generated keys when using - <literal>REPLACE</literal> statements. - </para> - </listitem> - - <listitem> - <para> - Fix problem detecting server character set in some cases. - </para> - </listitem> - - <listitem> - <para> - Fix row data decoding error when using - <emphasis>very</emphasis> large packets. - </para> - </listitem> - - <listitem> - <para> - Optimized row data decoding. - </para> - </listitem> - - <listitem> - <para> - Issue exception when operating on an already closed prepared - statement. - </para> - </listitem> - - <listitem> - <para> - Fixed SJIS encoding bug, thanks to Naoto Sato. - </para> - </listitem> - - <listitem> - <para> - Optimized usage of <literal>EscapeProcessor</literal>. - </para> - </listitem> - - <listitem> - <para> - Allow multiple calls to - <literal>Statement.close()</literal>. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-7"> - <title>Changes in MySQL Connector/J 3.0.7-stable (08 April 2003) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.7:connector-j:all"/> - <listitem> - <para> - Fixed <literal>MysqlPooledConnection.close()</literal> - calling wrong event type. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>StringIndexOutOfBoundsException</literal> in - <literal>PreparedStatement.setClob()</literal>. - </para> - </listitem> - - <listitem> - <para> - 4.1 Column Metadata fixes. - </para> - </listitem> - - <listitem> - <para> - Remove synchronization from - <literal>Driver.connect()</literal> and - <literal>Driver.acceptsUrl()</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>IOExceptions</literal> during a transaction now - cause the <literal>Connection</literal> to be closed. - </para> - </listitem> - - <listitem> - <para> - Fixed missing conversion for <literal>YEAR</literal> type in - <literal>ResultSetMetaData.getColumnTypeName()</literal>. - </para> - </listitem> - - <listitem> - <para> - Don't pick up indexes that start with <literal>pri</literal> - as primary keys for - <literal>DBMD.getPrimaryKeys()</literal>. - </para> - </listitem> - - <listitem> - <para> - Throw <literal>SQLExceptions</literal> when trying to do - operations on a forcefully closed - <literal>Connection</literal> (that is, when a communication - link failure occurs). - </para> - </listitem> - - <listitem> - <para> - You can now toggle profiling on/off using - <literal>Connection.setProfileSql(boolean)</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed charset issues with database metadata (charset was not - getting set correctly). - </para> - </listitem> - - <listitem> - <para> - Updatable <literal>ResultSets</literal> can now be created - for aliased tables/columns when connected to MySQL-4.1 or - newer. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>LOAD DATA LOCAL INFILE</literal> bug when - file > <literal>max_allowed_packet</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed escaping of 0x5c (<literal>'\'</literal>) character - for GBK and Big5 charsets. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSet.getTimestamp()</literal> when - underlying field is of type <literal>DATE</literal>. - </para> - </listitem> - - <listitem> - <para> - Ensure that packet size from - <literal>alignPacketSize()</literal> does not exceed - <literal>max_allowed_packet</literal> (JVM bug) - </para> - </listitem> - - <listitem> - <para> - Don't reset <literal>Connection.isReadOnly()</literal> when - autoReconnecting. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-6"> - <title>Changes in MySQL Connector/J 3.0.6-stable (18 February 2003) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.6:connector-j:all"/> - <listitem> - <para> - Fixed <literal>ResultSetMetaData</literal> to return - <literal>""</literal> when catalog not known. Fixes - <literal>NullPointerExceptions</literal> with Sun's - <literal>CachedRowSet</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>DBMD.getTypeInfo()</literal> and - <literal>DBMD.getColumns()</literal> returning different - value for precision in <literal>TEXT</literal> and - <literal>BLOB</literal> types. - </para> - </listitem> - - <listitem> - <para> - Allow ignoring of warning for <quote>non transactional - tables</quote> during rollback (compliance/usability) by - setting <literal>ignoreNonTxTables</literal> property to - <literal>true</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>SQLExceptions</literal> getting swallowed on - initial connect. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>Statement.setMaxRows()</literal> to stop - sending <literal>LIMIT</literal> type queries when not - needed (performance). - </para> - </listitem> - - <listitem> - <para> - Clean up <literal>Statement</literal> query/method mismatch - tests (that is, <literal>INSERT</literal> not allowed with - <literal>.executeQuery()</literal>). - </para> - </listitem> - - <listitem> - <para> - More checks added in <literal>ResultSet</literal> traversal - method to catch when in closed state. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSetMetaData.isWritable()</literal> to - return correct value. - </para> - </listitem> - - <listitem> - <para> - Add <quote>window</quote> of different - <literal>NULL</literal> sorting behavior to - <literal>DBMD.nullsAreSortedAtStart</literal> (4.0.2 to - 4.0.10, true; otherwise, no). - </para> - </listitem> - - <listitem> - <para> - Implemented <literal>Blob.setBytes()</literal>. You still - need to pass the resultant <literal>Blob</literal> back into - an updatable <literal>ResultSet</literal> or - <literal>PreparedStatement</literal> to persist the changes, - because MySQL does not support <quote>locators</quote>. - </para> - </listitem> - - <listitem> - <para> - Backported 4.1 charset field info changes from Connector/J - 3.1. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-5"> - <title>Changes in MySQL Connector/J 3.0.5-gamma (22 January 2003) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.5:connector-j:all"/> - <listitem> - <para> - Fixed <literal>Buffer.fastSkipLenString()</literal> causing - <literal>ArrayIndexOutOfBounds</literal> exceptions with - some queries when unpacking fields. - </para> - </listitem> - - <listitem> - <para> - Implemented an empty <literal>TypeMap</literal> for - <literal>Connection.getTypeMap()</literal> so that some - third-party apps work with MySQL (IBM WebSphere 5.0 - Connection pool). - </para> - </listitem> - - <listitem> - <para> - Added missing <literal>LONGTEXT</literal> type to - <literal>DBMD.getColumns()</literal>. - </para> - </listitem> - - <listitem> - <para> - Retrieve <literal>TX_ISOLATION</literal> from database for - <literal>Connection.getTransactionIsolation()</literal> when - the MySQL version supports it, instead of an instance - variable. - </para> - </listitem> - - <listitem> - <para> - Quote table names in - <literal>DatabaseMetaData.getColumns()</literal>, - <literal>getPrimaryKeys()</literal>, - <literal>getIndexInfo()</literal>, - <literal>getBestRowIdentifier()</literal>. - </para> - </listitem> - - <listitem> - <para> - Greatly reduce memory required for - <literal>setBinaryStream()</literal> in - <literal>PreparedStatements</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSet.isBeforeFirst()</literal> for empty - result sets. - </para> - </listitem> - - <listitem> - <para> - Added update options for foreign key metadata. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-4"> - <title>Changes in MySQL Connector/J 3.0.4-gamma (06 January 2003) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.4:connector-j:all"/> - <listitem> - <para> - Added quoted identifiers to database names for - <literal>Connection.setCatalog</literal>. - </para> - </listitem> - - <listitem> - <para> - Added support for quoted identifiers in - <literal>PreparedStatement</literal> parser. - </para> - </listitem> - - <listitem> - <para> - Streamlined character conversion and - <literal>byte[]</literal> handling in - <literal>PreparedStatements</literal> for - <literal>setByte()</literal>. - </para> - </listitem> - - <listitem> - <para> - Reduce memory footprint of - <literal>PreparedStatements</literal> by sharing outbound - packet with <literal>MysqlIO</literal>. - </para> - </listitem> - - <listitem> - <para> - Added <literal>strictUpdates</literal> property to allow - control of amount of checking for <quote>correctness</quote> - of updatable result sets. Set this to - <literal>false</literal> if you want faster updatable result - sets and you know that you create them from - <literal>SELECT</literal> statements on tables with primary - keys and that you have selected all primary keys in your - query. - </para> - </listitem> - - <listitem> - <para> - Added support for 4.0.8-style large packets. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>PreparedStatement.executeBatch()</literal> - parameter overwriting. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-3"> - <title>Changes in MySQL Connector/J 3.0.3-dev (17 December 2002) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.3:connector-j:all"/> - <listitem> - <para> - Changed <literal>charsToByte</literal> in - <literal>SingleByteCharConverter</literal> to be non-static. - </para> - </listitem> - - <listitem> - <para> - Changed <literal>SingleByteCharConverter</literal> to use - lazy initialization of each converter. - </para> - </listitem> - - <listitem> - <para> - Fixed charset handling in <literal>Fields.java</literal>. - </para> - </listitem> - - <listitem> - <para> - Implemented <literal>Connection.nativeSQL()</literal>. - </para> - </listitem> - - <listitem> - <para> - More robust escape tokenizer: Recognize - <literal>--</literal> comments, and allow nested escape - sequences (see - <literal>testsuite.EscapeProcessingTest</literal>). - </para> - </listitem> - - <listitem> - <para> - <literal>DBMD.getImported/ExportedKeys()</literal> now - handles multiple foreign keys per table. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSetMetaData.getPrecision()</literal> - returning incorrect values for some floating-point types. - </para> - </listitem> - - <listitem> - <para> - Fixed - <literal>ResultSetMetaData.getColumnTypeName()</literal> - returning <literal>BLOB</literal> for - <literal>TEXT</literal> and <literal>TEXT</literal> for - <literal>BLOB</literal> types. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>Buffer.isLastDataPacket()</literal> for 4.1 - and newer servers. - </para> - </listitem> - - <listitem> - <para> - Added <literal>CLIENT_LONG_FLAG</literal> to be able to get - more column flags (<literal>isAutoIncrement()</literal> - being the most important). - </para> - </listitem> - - <listitem> - <para> - Because of above, implemented - <literal>ResultSetMetaData.isAutoIncrement()</literal> to - use <literal>Field.isAutoIncrement()</literal>. - </para> - </listitem> - - <listitem> - <para> - Honor <literal>lower_case_table_names</literal> when enabled - in the server when doing table name comparisons in - <literal>DatabaseMetaData</literal> methods. - </para> - </listitem> - - <listitem> - <para> - Some MySQL-4.1 protocol support (extended field info from - selects). - </para> - </listitem> - - <listitem> - <para> - Use non-aliased table/column names and database names to - fullly qualify tables and columns in - <literal>UpdatableResultSet</literal> (requires MySQL-4.1 or - newer). - </para> - </listitem> - - <listitem> - <para> - Allow user to alter behavior of - <literal>Statement</literal>/ - <literal>PreparedStatement.executeBatch()</literal> via - <literal>continueBatchOnError</literal> property (defaults - to <literal>true</literal>). - </para> - </listitem> - - <listitem> - <para> - Check for connection closed in more - <literal>Connection</literal> methods - (<literal>createStatement</literal>, - <literal>prepareStatement</literal>, - <literal>setTransactionIsolation</literal>, - <literal>setAutoCommit</literal>). - </para> - </listitem> - - <listitem> - <para> - More robust implementation of updatable result sets. Checks - that <emphasis>all</emphasis> primary keys of the table have - been selected. - </para> - </listitem> - - <listitem> - <para> - <literal>LOAD DATA LOCAL INFILE ...</literal> now works, if - your server is configured to allow it. Can be turned off - with the <literal>allowLoadLocalInfile</literal> property - (see the <filename>README</filename>). - </para> - </listitem> - - <listitem> - <para> - Substitute <literal>'?'</literal> for unknown character - conversions in single-byte character sets instead of - <literal>'\0'</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>NamedPipeSocketFactory</literal> now works (only - intended for Windows), see <filename>README</filename> for - instructions. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-2"> - <title>Changes in MySQL Connector/J 3.0.2-dev (08 November 2002) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.2:connector-j:all"/> - <listitem> - <para> - Fixed issue with updatable result sets and - <literal>PreparedStatements</literal> not working. - </para> - </listitem> - - <listitem> - <para> - Fixed - <literal>ResultSet.setFetchDirection(FETCH_UNKNOWN)</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed issue when calling - <literal>Statement.setFetchSize()</literal> when using - arbitrary values. - </para> - </listitem> - - <listitem> - <para> - Fixed incorrect conversion in - <literal>ResultSet.getLong()</literal>. - </para> - </listitem> - - <listitem> - <para> - Implemented <literal>ResultSet.updateBlob()</literal>. - </para> - </listitem> - - <listitem> - <para> - Removed duplicate code from - <literal>UpdatableResultSet</literal> (it can be inherited - from <literal>ResultSet</literal>, the extra code for each - method to handle updatability I thought might someday be - necessary has not been needed). - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>UnsupportedEncodingException</literal> thrown - when <quote>forcing</quote> a character encoding via - properties. - </para> - </listitem> - - <listitem> - <para> - Fixed various non-ASCII character encoding issues. - </para> - </listitem> - - <listitem> - <para> - Added driver property - <literal>useHostsInPrivileges</literal>. Defaults to - <literal>true</literal>. Affects whether or not - <literal>@hostname</literal> will be used in - <literal>DBMD.getColumn/TablePrivileges</literal>. - </para> - </listitem> - - <listitem> - <para> - All <literal>DBMD</literal> result set columns describing - schemas now return <literal>NULL</literal> to be more - compliant with the behavior of other JDBC drivers for other - database systems (MySQL does not support schemas). - </para> - </listitem> - - <listitem> - <para> - Added SSL support. See <filename>README</filename> for - information on how to use it. - </para> - </listitem> - - <listitem> - <para> - Properly restore connection properties when autoReconnecting - or failing-over, including <literal>autoCommit</literal> - state, and isolation level. - </para> - </listitem> - - <listitem> - <para> - Use <literal>SHOW CREATE TABLE</literal> when possible for - determining foreign key information for - <literal>DatabaseMetaData</literal>. Also allows cascade - options for <literal>DELETE</literal> information to be - returned. - </para> - </listitem> - - <listitem> - <para> - Escape <literal>0x5c</literal> character in strings for the - SJIS charset. - </para> - </listitem> - - <listitem> - <para> - Fixed start position off-by-1 error in - <literal>Clob.getSubString()</literal>. - </para> - </listitem> - - <listitem> - <para> - Implemented <literal>Clob.truncate()</literal>. - </para> - </listitem> - - <listitem> - <para> - Implemented <literal>Clob.setString()</literal>. - </para> - </listitem> - - <listitem> - <para> - Implemented <literal>Clob.setAsciiStream()</literal>. - </para> - </listitem> - - <listitem> - <para> - Implemented <literal>Clob.setCharacterStream()</literal>. - </para> - </listitem> - - <listitem> - <para> - Added <literal>com.mysql.jdbc.MiniAdmin</literal> class, - which allows you to send <literal>shutdown</literal> command - to MySQL server. This is intended to be used when - <quote>embedding</quote> Java and MySQL server together in - an end-user application. - </para> - </listitem> - - <listitem> - <para> - Added <literal>connectTimeout</literal> parameter that - allows users of JDK-1.4 and newer to specify a maxium time - to wait to establish a connection. - </para> - </listitem> - - <listitem> - <para> - Failover and <literal>autoReconnect</literal> work only when - the connection is in an <literal>autoCommit(false)</literal> - state, in order to stay transaction-safe. - </para> - </listitem> - - <listitem> - <para> - Added <literal>queriesBeforeRetryMaster</literal> property - that specifies how many queries to issue when failed over - before attempting to reconnect to the master (defaults to - 50). - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>DBMD.supportsResultSetConcurrency()</literal> - so that it returns <literal>true</literal> for - <literal>ResultSet.TYPE_SCROLL_INSENSITIVE</literal> and - <literal>ResultSet.CONCUR_READ_ONLY</literal> or - <literal>ResultSet.CONCUR_UPDATABLE</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSet.isLast()</literal> for empty result - sets (should return <literal>false</literal>). - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatement</literal> now honors stream - lengths in setBinary/Ascii/Character Stream() unless you set - the connection property - <literal>useStreamLengthsInPrepStmts</literal> to - <literal>false</literal>. - </para> - </listitem> - - <listitem> - <para> - Removed some not-needed temporary object creation by smarter - use of <literal>Strings</literal> in - <literal>EscapeProcessor</literal>, - <literal>Connection</literal> and - <literal>DatabaseMetaData</literal> classes. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-1"> - <title>Changes in MySQL Connector/J 3.0.1-dev (21 September 2002) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.1:connector-j:all"/> - <listitem> - <para> - Fixed <literal>ResultSet.getRow()</literal> off-by-one bug. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>RowDataStatic.getAt()</literal> off-by-one - bug. - </para> - </listitem> - - <listitem> - <para> - Added limited <literal>Clob</literal> functionality - (<literal>ResultSet.getClob()</literal>, - <literal>PreparedStatemtent.setClob()</literal>, - <literal>PreparedStatement.setObject(Clob)</literal>. - </para> - </listitem> - - <listitem> - <para> - Added <literal>socketTimeout</literal> parameter to URL. - </para> - </listitem> - - <listitem> - <para> - <literal>Connection.isClosed()</literal> no longer - <quote>pings</quote> the server. - </para> - </listitem> - - <listitem> - <para> - <literal>Connection.close()</literal> issues - <literal>rollback()</literal> when - <literal>getAutoCommit()</literal> is - <literal>false</literal>. - </para> - </listitem> - - <listitem> - <para> - Added <literal>paranoid</literal> parameter, which sanitizes - error messages by removing <quote>sensitive</quote> - information from them (such as hostnames, ports, or - usernames), as well as clearing <quote>sensitive</quote> - data structures when possible. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSetMetaData.isSigned()</literal> for - <literal>TINYINT</literal> and <literal>BIGINT</literal>. - </para> - </listitem> - - <listitem> - <para> - Charsets now automatically detected. Optimized code for - single-byte character set conversion. - </para> - </listitem> - - <listitem> - <para> - Implemented - <literal>ResultSet.getCharacterStream()</literal>. - </para> - </listitem> - - <listitem> - <para> - Added <literal>LOCAL TEMPORARY</literal> to table types in - <literal>DatabaseMetaData.getTableTypes()</literal>. - </para> - </listitem> - - <listitem> - <para> - Massive code clean-up to follow Java coding conventions (the - time had come). - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-3-0-0"> - <title>Changes in MySQL Connector/J 3.0.0-dev (31 July 2002) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="3.0.0:connector-j:all"/> - <listitem> - <para> - <emphasis role="bold">!!! LICENSE CHANGE !!!</emphasis> The - driver is now GPL. If you need non-GPL licenses, please - contact me <literal><mark@stripped></literal>. - </para> - </listitem> - - <listitem> - <para> - JDBC-3.0 functionality including - <literal>Statement/PreparedStatement.getGeneratedKeys()</literal> - and <literal>ResultSet.getURL()</literal>. - </para> - </listitem> - - <listitem> - <para> - Performance enchancements: Driver is now 50−100% - faster in most situations, and creates fewer temporary - objects. - </para> - </listitem> - - <listitem> - <para> - Repackaging: New driver name is - <literal>com.mysql.jdbc.Driver</literal>, old name still - works, though (the driver is now provided by MySQL-AB). - </para> - </listitem> - - <listitem> - <para> - Better checking for closed connections in - <literal>Statement</literal> and - <literal>PreparedStatement</literal>. - </para> - </listitem> - - <listitem> - <para> - Support for streaming (row-by-row) result sets (see - <filename>README</filename>) Thanks to Doron. - </para> - </listitem> - - <listitem> - <para> - Support for large packets (new addition to MySQL-4.0 - protocol), see <filename>README</filename> for more - information. - </para> - </listitem> - - <listitem> - <para> - JDBC Compliance: Passes all tests besides stored procedure - tests. - </para> - </listitem> - - <listitem> - <para> - Fix and sort primary key names in - <literal>DBMetaData</literal> (SF bugs 582086 and 582086). - </para> - </listitem> - - <listitem> - <para> - Float types now reported as - <literal>java.sql.Types.FLOAT</literal> (SF bug 579573). - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getTimestamp()</literal> now works for - <literal>DATE</literal> types (SF bug 559134). - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getDate/Time/Timestamp</literal> now - recognizes all forms of invalid values that have been set to - all zeros by MySQL (SF bug 586058). - </para> - </listitem> - - <listitem> - <para> - Testsuite now uses Junit (which you can get from - <ulink url="http://www.junit.org"/>. - </para> - </listitem> - - <listitem> - <para> - The driver now only works with JDK-1.2 or newer. - </para> - </listitem> - - <listitem> - <para> - Added multi-host failover support (see - <filename>README</filename>). - </para> - </listitem> - - <listitem> - <para> - General source-code cleanup. - </para> - </listitem> - - <listitem> - <para> - Overall speed improvements via controlling transient object - creation in <literal>MysqlIO</literal> class when reading - packets. - </para> - </listitem> - - <listitem> - <para> - Performance improvements in string handling and field - metadata creation (lazily instantiated) contributed by Alex - Twisleton-Wykeham-Fiennes. - </para> - </listitem> - - </itemizedlist> - </section> </section> @@ -6363,825 +478,98 @@ <section id="cj-news-2-0-14"> - <title>Changes in MySQL Connector/J 2.0.14 (16 May 2002) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="2.0.14:connector-j:all"/> - <listitem> - <para> - More code cleanup. - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatement</literal> now releases resources - on <literal>.close()</literal>. (SF bug 553268) - </para> - </listitem> - - <listitem> - <para> - Quoted identifiers not used if server version does not - support them. Also, if server started with - <option>--ansi</option> or - <option>--sql-mode=ANSI_QUOTES</option>, - <quote><literal>"</literal></quote> will be used as an - identifier quote character, otherwise - <quote><literal>'</literal></quote> will be used. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getDouble()</literal> now uses code built - into JDK to be more precise (but slower). - </para> - </listitem> - - <listitem> - <para> - <literal>LogicalHandle.isClosed()</literal> calls through to - physical connection. - </para> - </listitem> - - <listitem> - <para> - Added SQL profiling (to <literal>STDERR</literal>). Set - <literal>profileSql=true</literal> in your JDBC URL. See - <filename>README</filename> for more information. - </para> - </listitem> - - <listitem> - <para> - Fixed typo for <literal>relaxAutoCommit</literal> parameter. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-2-0-13"> - <title>Changes in MySQL Connector/J 2.0.13 (24 April 2002) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="2.0.13:connector-j:all"/> - <listitem> - <para> - More code cleanup. - </para> - </listitem> - - <listitem> - <para> - Fixed unicode chars being read incorrectly. (SF bug 541088) - </para> - </listitem> - - <listitem> - <para> - Faster blob escaping for <literal>PrepStmt</literal>. - </para> - </listitem> - - <listitem> - <para> - Added - <literal>set</literal>/<literal>getPortNumber()</literal> to - <literal>DataSource(s)</literal>. (SF bug 548167) - </para> - </listitem> - - <listitem> - <para> - Added <literal>setURL()</literal> to - <literal>MySQLXADataSource</literal>. (SF bug 546019) - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatement.toString()</literal> fixed. (SF - bug 534026) - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSetMetaData.getColumnClassName()</literal> - now implemented. - </para> - </listitem> - - <listitem> - <para> - Rudimentary version of - <literal>Statement.getGeneratedKeys()</literal> from - JDBC-3.0 now implemented (you need to be using JDK-1.4 for - this to work, I believe). - </para> - </listitem> - - <listitem> - <para> - <literal>DBMetaData.getIndexInfo()</literal> - bad PAGES - fixed. (SF BUG 542201) - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-2-0-12"> - <title>Changes in MySQL Connector/J 2.0.12 (07 April 2002) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="2.0.12:connector-j:all"/> - <listitem> - <para> - General code cleanup. - </para> - </listitem> - - <listitem> - <para> - Added <literal>getIdleFor()</literal> method to - <literal>Connection</literal> and - <literal>MysqlLogicalHandle</literal>. - </para> - </listitem> - - <listitem> - <para> - Relaxed synchronization in all classes, should fix 520615 - and 520393. - </para> - </listitem> - - <listitem> - <para> - Added <literal>getTable/ColumnPrivileges()</literal> to DBMD - (fixes 484502). - </para> - </listitem> - - <listitem> - <para> - Added new types to <literal>getTypeInfo()</literal>, fixed - existing types thanks to Al Davis and Kid Kalanon. - </para> - </listitem> - - <listitem> - <para> - Added support for <literal>BIT</literal> types (51870) to - <literal>PreparedStatement</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>getRow()</literal> bug (527165) in - <literal>ResultSet</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixes for <literal>ResultSet</literal> updatability in - <literal>PreparedStatement</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed time zone off-by-1-hour bug in - <literal>PreparedStatement</literal> (538286, 528785). - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet</literal>: Fixed updatability (values - being set to <literal>null</literal> if not updated). - </para> - </listitem> - - <listitem> - <para> - <literal>DataSources</literal> - fixed - <literal>setUrl</literal> bug (511614, 525565), wrong - datasource class name (532816, 528767). - </para> - </listitem> - - <listitem> - <para> - Added identifier quoting to all - <literal>DatabaseMetaData</literal> methods that need them - (should fix 518108). - </para> - </listitem> - - <listitem> - <para> - Added support for <literal>YEAR</literal> type (533556). - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.insertRow()</literal> should now detect - auto_increment fields in most cases and use that value in - the new row. This detection will not work in multi-valued - keys, however, due to the fact that the MySQL protocol does - not return this information. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.refreshRow()</literal> implemented. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>testsuite.Traversal</literal> - <literal>afterLast()</literal> bug, thanks to Igor Lastric. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-2-0-11"> - <title>Changes in MySQL Connector/J 2.0.11 (27 January 2002) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="2.0.11:connector-j:all"/> - <listitem> - <para> - Fixed missing <literal>DELETE_RULE</literal> value in - <literal>DBMD.getImported/ExportedKeys()</literal> and - <literal>getCrossReference()</literal>. - </para> - </listitem> - - <listitem> - <para> - Full synchronization of <literal>Statement.java</literal>. - </para> - </listitem> - - <listitem> - <para> - More changes to fix <literal>Unexpected end of input - stream</literal> errors when reading <literal>BLOB</literal> - values. This should be the last fix. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-2-0-10"> - <title>Changes in MySQL Connector/J 2.0.10 (24 January 2002) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="2.0.10:connector-j:all"/> - <listitem> - <para> - Fixed spurious <literal>Unexpected end of input - stream</literal> errors in <literal>MysqlIO</literal> (bug - 507456). - </para> - </listitem> - - <listitem> - <para> - Fixed null-pointer-exceptions when using - <literal>MysqlConnectionPoolDataSource</literal> with - Websphere 4 (bug 505839). - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-2-0-9"> - <title>Changes in MySQL Connector/J 2.0.9 (13 January 2002) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="2.0.9:connector-j:all"/> - <listitem> - <para> - <command>Ant</command> build was corrupting included - <filename>jar</filename> files, fixed (bug 487669). - </para> - </listitem> - - <listitem> - <para> - Fixed extra memory allocation in - <literal>MysqlIO.readPacket()</literal> (bug 488663). - </para> - </listitem> - - <listitem> - <para> - Implementation of - <literal>DatabaseMetaData.getExported/ImportedKeys()</literal> - and <literal>getCrossReference()</literal>. - </para> - </listitem> - - <listitem> - <para> - Full synchronization on methods modifying instance and - class-shared references, driver should be entirely - thread-safe now (please let me know if you have problems). - </para> - </listitem> - - <listitem> - <para> - <literal>DataSource</literal> implementations moved to - <literal>org.gjt.mm.mysql.jdbc2.optional</literal> package, - and (initial) implementations of - <literal>PooledConnectionDataSource</literal> and - <literal>XADataSource</literal> are in place (thanks to Todd - Wolff for the implementation and testing of - <literal>PooledConnectionDataSource</literal> with IBM - WebSphere 4). - </para> - </listitem> - - <listitem> - <para> - Added detection of network connection being closed when - reading packets (thanks to Todd Lizambri). - </para> - </listitem> - - <listitem> - <para> - Fixed quoting error with escape processor (bug 486265). - </para> - </listitem> - - <listitem> - <para> - Report batch update support through - <literal>DatabaseMetaData</literal> (bug 495101). - </para> - </listitem> - - <listitem> - <para> - Fixed off-by-one-hour error in - <literal>PreparedStatement.setTimestamp()</literal> (bug - 491577). - </para> - </listitem> - - <listitem> - <para> - Removed concatenation support from driver (the - <literal>||</literal> operator), as older versions of - VisualAge seem to be the only thing that use it, and it - conflicts with the logical <literal>||</literal> operator. - You will need to start <command>mysqld</command> with the - <option>--ansi</option> flag to use the - <literal>||</literal> operator as concatenation (bug - 491680). - </para> - </listitem> - - <listitem> - <para> - Fixed casting bug in <literal>PreparedStatement</literal> - (bug 488663). - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-2-0-8"> - <title>Changes in MySQL Connector/J 2.0.8 (25 November 2001) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="2.0.8:connector-j:all"/> - <listitem> - <para> - Batch updates now supported (thanks to some inspiration from - Daniel Rall). - </para> - </listitem> - - <listitem> - <para> - <literal>XADataSource</literal>/<literal>ConnectionPoolDataSource</literal> - code (experimental) - </para> - </listitem> - - <listitem> - <para> - <literal>PreparedStatement.setAnyNumericType()</literal> now - handles positive exponents correctly (adds - <literal>+</literal> so MySQL can understand it). - </para> - </listitem> - - <listitem> - <para> - <literal>DatabaseMetaData.getPrimaryKeys()</literal> and - <literal>getBestRowIdentifier()</literal> are now more - robust in identifying primary keys (matches regardless of - case or abbreviation/full spelling of <literal>Primary - Key</literal> in <literal>Key_type</literal> column). - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-2-0-7"> - <title>Changes in MySQL Connector/J 2.0.7 (24 October 2001) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="2.0.7:connector-j:all"/> - <listitem> - <para> - <literal>PreparedStatement.setCharacterStream()</literal> - now implemented - </para> - </listitem> - - <listitem> - <para> - Fixed dangling socket problem when in high availability - (<literal>autoReconnect=true</literal>) mode, and finalizer - for <literal>Connection</literal> will close any dangling - sockets on GC. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSetMetaData.getPrecision()</literal> - returning one less than actual on newer versions of MySQL. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getBlob()</literal> now returns - <literal>null</literal> if column value was - <literal>null</literal>. - </para> - </listitem> - - <listitem> - <para> - Character sets read from database if - <literal>useUnicode=true</literal> and - <literal>characterEncoding</literal> is not set. (thanks to - Dmitry Vereshchagin) - </para> - </listitem> - - <listitem> - <para> - Initial transaction isolation level read from database (if - avaialable). (thanks to Dmitry Vereshchagin) - </para> - </listitem> - - <listitem> - <para> - Fixed - <literal>DatabaseMetaData.supportsTransactions()</literal>, - and <literal>supportsTransactionIsolationLevel()</literal> - and <literal>getTypeInfo()</literal> - <literal>SQL_DATETIME_SUB</literal> and - <literal>SQL_DATA_TYPE</literal> fields not being readable. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>PreparedStatement</literal> generating SQL - that would end up with syntax errors for some queries. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSet.isAfterLast()</literal> always - returning <literal>false</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed time zone issue in - <literal>PreparedStatement.setTimestamp()</literal>. (thanks - to Erik Olofsson) - </para> - </listitem> - - <listitem> - <para> - Captialize type names when - <literal>captializeTypeNames=true</literal> is passed in URL - or properties (for WebObjects. (thanks to Anjo Krank) - </para> - </listitem> - - <listitem> - <para> - Updatable result sets now correctly handle - <literal>NULL</literal> values in fields. - </para> - </listitem> - - <listitem> - <para> - PreparedStatement.setDouble() now uses full-precision - doubles (reverting a fix made earlier to truncate them). - </para> - </listitem> - - <listitem> - <para> - PreparedStatement.setBoolean() will use 1/0 for values if - your MySQL version is 3.21.23 or higher. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-2-0-6"> - <title>Changes in MySQL Connector/J 2.0.6 (16 June 2001) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="2.0.6:connector-j:all"/> - <listitem> - <para> - Fixed <literal>PreparedStatement</literal> parameter - checking. - </para> - </listitem> - - <listitem> - <para> - Fixed case-sensitive column names in - <literal>ResultSet.java</literal>. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-2-0-5"> - <title>Changes in MySQL Connector/J 2.0.5 (13 June 2001) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="2.0.5:connector-j:all"/> - <listitem> - <para> - Fixed <literal>ResultSet.getBlob()</literal> - <literal>ArrayIndex</literal> out-of-bounds. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ResultSetMetaData.getColumnTypeName</literal> - for <literal>TEXT</literal>/<literal>BLOB</literal>. - </para> - </listitem> - - <listitem> - <para> - Fixed <literal>ArrayIndexOutOfBounds</literal> when sending - large <literal>BLOB</literal> queries. (Max size packet was - not being set) - </para> - </listitem> - - <listitem> - <para> - Added <literal>ISOLATION</literal> level support to - <literal>Connection.setIsolationLevel()</literal> - </para> - </listitem> - - <listitem> - <para> - Fixed NPE on - <literal>PreparedStatement.executeUpdate()</literal> when - all columns have not been set. - </para> - </listitem> - - <listitem> - <para> - Fixed data parsing of <literal>TIMESTAMP</literal> values - with 2-digit years. - </para> - </listitem> - - <listitem> - <para> - Added <literal>Byte</literal> to - <literal>PreparedStatement.setObject()</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.getBoolean()</literal> now recognizes - <literal>-1</literal> as <literal>true</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet</literal> has +/-Inf/inf support. - </para> - </listitem> - - <listitem> - <para> - <literal>ResultSet.insertRow()</literal> works now, even if - not all columns are set (they will be set to - <literal>NULL</literal>). - </para> - </listitem> - - <listitem> - <para> - <literal>DataBaseMetaData.getCrossReference()</literal> no - longer <literal>ArrayIndexOOB</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>getObject()</literal> on - <literal>ResultSet</literal> correctly does - <literal>TINYINT</literal>-><literal>Byte</literal> and - <literal>SMALLINT</literal>-><literal>Short</literal>. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-2-0-3"> - <title>Changes in MySQL Connector/J 2.0.3 (03 December 2000) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="2.0.3:connector-j:all"/> - <listitem> - <para> - Implemented <literal>getBigDecimal()</literal> without scale - component for JDBC2. - </para> - </listitem> - - <listitem> - <para> - Fixed composite key problem with updatable result sets. - </para> - </listitem> - - <listitem> - <para> - Added detection of -/+INF for doubles. - </para> - </listitem> - - <listitem> - <para> - Faster ASCII string operations. - </para> - </listitem> - - <listitem> - <para> - Fixed incorrect detection of - <literal>MAX_ALLOWED_PACKET</literal>, so sending large - blobs should work now. - </para> - </listitem> - - <listitem> - <para> - Fixed off-by-one error in <literal>java.sql.Blob</literal> - implementation code. - </para> - </listitem> - - <listitem> - <para> - Added <literal>ultraDevHack</literal> URL parameter, set to - <literal>true</literal> to allow (broken) Macromedia - UltraDev to use the driver. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-2-0-1"> - <title>Changes in MySQL Connector/J 2.0.1 (06 April 2000) + - <itemizedlist> + <para condition="dynamic:changelog:entrylist" role="2.0.1:connector-j:all"/> - <listitem> - <para> - Fixed <literal>RSMD.isWritable()</literal> returning wrong - value. Thanks to Moritz Maass. - </para> - </listitem> - - <listitem> - <para> - Cleaned up exception handling when driver connects. - </para> - </listitem> - - <listitem> - <para> - Columns that are of type <literal>TEXT</literal> now return - as <literal>Strings</literal> when you use - <literal>getObject()</literal>. - </para> - </listitem> - - <listitem> - <para> - <literal>DatabaseMetaData.getPrimaryKeys()</literal> now - works correctly with respect to <literal>key_seq</literal>. - Thanks to Brian Slesinsky. - </para> - </listitem> - - <listitem> - <para> - No escape processing is done on - <literal>PreparedStatements</literal> anymore per JDBC spec. - </para> - </listitem> - - <listitem> - <para> - Fixed many JDBC-2.0 traversal, positioning bugs, especially - with respect to empty result sets. Thanks to Ron Smits, Nick - Brook, Cessar Garcia and Carlos Martinez. - </para> - </listitem> - - <listitem> - <para> - Fixed some issues with updatability support in - <literal>ResultSet</literal> when using multiple primary - keys. - </para> - </listitem> - - </itemizedlist> - </section> <section id="cj-news-2-0pre5">