PostgreSQL > JDBC Driver
 

History of Changes

RSS

Version 9.1dev-900 (2011-04-18)

  • add Add support for setting application_name on both connection startup and later through Connection.setClientInfo. (jurka)
  • add Fetch all metadata for the ResultSet in one query instead of making a trip for each attribute of each column. (jurka)
  • add Bring getSchemas up to JDBC 4 compliance. Return the additional TABLE_CATALOG column that was added in JDBC 3. Additionally support the getSchemas method added in JDBC 4 which filters the returned schemas. (jurka)
  • add Bring getProcedures/getProcedureColumns up to JDBC 4 compliance. Both methods have added a SPECIFIC_NAME column that can be used to differentiate between overloaded functions. getProcedureColumns has added some other additional columns to describe the datatype being returned. (jurka) Thanks to Thor Michael Store.
  • add Update the date tests for changes in the 1.6 JVM. Older versions allowed five digit years and single digit days and months. The latest code only allows a strict yyyy-mm-dd. This changed somewhere between 1.6.0_11 and 1.6.0_21. (jurka) Thanks to Mike Fowler.
  • add Allow the driver to support setObject with Types.DISTINCT. We report metadata indicating that values are of this type, so we'd better accept it coming back in. (jurka) Thanks to Vitalii Tymchyshyn.
  • add Support building with the 1.7 JDK. (jurka)
  • add Support returning generated keys from batch statement execution. Unfortunately we need to disable the actual batching that the driver does behind the scenes because now that it is returning potentially large result values we must avoid a deadlock. (jurka)
  • update Update default permissions to account for changes in different server versions. 8.2 removed the rule permission while 8.4 added a trunctate permission. (jurka)
  • update Newer server versions (9.0+) allow extra_float_digits to be set to 3 instead of the old limit of 2 to get the maximum precsion of floating point values out of the server. (jurka)
  • update Use slightly different SQL State error codes for the different types of connection setup failures to indicate which can be retried and which cannot. (jurka) Thanks to Donald Fraser and Kevin Grittner.
  • fix Report permission metadata for a table with no permissions correctly. (jurka) Thanks to danap.
  • fix Ensure that an XAConnection throws SQLExceptions appropriately even though it's a proxy class. Before this change it was throwing an InvocationTargetException instead of the actual cause. (jurka) Thanks to Yaocl.
  • fix Make updatable ResultSets work with SQLXML data. (jurka) Thanks to Michael Musset.
  • fix If a domain has a not null constraint, report that information in the metadata for both DatabaseMetaData.getColumns and ResultSetMetaData.isNullable. (jurka) Thanks to Thomas Kellerer.
  • fix In DatabaseMetaData.getSchemas, return the user's own temp schemas, but no others. Previously it wasn't returning the users own temp schema, but was showing all toast temp schemas. (jurka) Thanks to Thomas Kellerer.
  • fix Change ResultSetMetaData to return information on serial datatypes in getColumnTypeName to match up with the behavior of DatabaseMetaData.getColumns. (jurka)
  • fix Fix literals that are injected into a SQL query to contain the PG specific E'' marker if they are using the non-standard-conforming-strings backslash escaping. This will get rid of the warnings from escape_string_warning. (jurka)
  • fix Clear the generated keys associated with a Statement at the next execution. If the next execution doesn't want generated keys, we don't want to leave the old keys around. (jurka)
  • fix The 9.1 server canonicalizes the client_encoding setting, so if we ask for unicode we get utf8. This confused the driver because previous versions just echo back what we asked for. Ask for the canonical name now. (jurka)
  • fix When running tests, don't assume that we know the server's default transaction isolation level. (jurka) Thanks to Kevin Grittner.

Version 9.0-801 (2010-09-20)

  • add Implement returning ASC/DESC order information in getIndexInfo. (jurka)
  • add Support PreparedStatement.setObject(int, Character). (jurka) Thanks to Vitalii Tymchyshyn.
  • fix Work around a bug in the server's implementation of the binary copy protocol. (jurka) Thanks to Matthew Wakeling.
  • fix Make ResultSetMetaData.getColumnType match the results of DatabaseMetaData.getColumns.DATA_TYPE for domain and composite types. (jurka) Thanks to Thomas Kellerer.
  • fix Fix DatabaseMetaData.getColumns for 7.2 servers. This was accidentally broken in the previous release. (jurka)
  • fix Fix a minor concurrency issue during the setup for processing escape functions. (jurka) Thanks to Pierre Queinnec.
  • fix Fix DatabaseMetaData routines that return index information for a change in the 9.0 server that no longer renames the pg_attribute entries for the index, but only adjust the table's attributes on a column renmae. (jurka) Thanks to Adam Rauch.
  • fix Track the tail of the SQLWarning chain so we can quickly add a new element to it instead of having to walk the entire chain from the head. This is important for the performance of handling plpgsql functions which do a ton of RAISE NOTICES which get translated into warnings. (jurka) Thanks to Altaf Malik.

Version 9.0-dev800 (2010-05-11)

  • add Support reading the new hex escaped bytea format. (jurka)
  • add Add support for returning the new TRUNCATE privilege, that was added in 8.4, to the list of known table privileges. (jurka) Thanks to Thomas Kellerer.
  • add Add the partial index constraint to the FILTER_CONDITION column returned by DatabaseMetaData.getIndexInfo. (jurka) Thanks to Mark Kirkwood.
  • add Japanese translation of error messages. (jurka) Thanks to Hiroshi Saito.
  • add Bulgarian translation of error messages. (jurka) Thanks to Viktor Usunov.
  • add Add some more specific types to the return value for DatabaseMetaData.getTables. Return composite types, temporary views, and temporary sequences with TABLE_TYPE values specifically for them. (jurka) Thanks to Thomas Kellerer.
  • add Add loglevel and protocolversion options to DataSources. (jurka)
  • fix Remove an unused Sun specific import that prevented compilation on non-Sun JDKs. (jurka) Thanks to Tom Lane.
  • fix Change the processing of Statement.executeUpdate to complain if any of the results of a multi-statement query string return a ResultSet. Previously we were only checking the first result which resulted in silent partial execution of later SELECT statements. (jurka) Thanks to Joseph Shraibman.
  • fix Check that a Connection hasn't been closed before allowing any operations on it. (jurka) Thanks to Kevin Grittner.
  • fix Don't allow rollback or commit when a Connection is in autocommit mode. (jurka) Thanks to Kevin Grittner.
  • fix Change the SQLStates reported for using a closed Connection and closed ResultSet to be more consistent. Report connection_does_not_exist (08003) for a closed Connection and object_not_in_state (55000) for a ResultSet. (jurka)
  • fix When a COPY operation is the first statement issued in a transaction, it was not sending the BEGIN necessary to start the transaction. (jurka) Thanks to Maciek Sakrejda.
  • fix The 8.4 release added some code to avoid re-describing a statement if we already had the type information available by copying the resolved type information from the query to the parameters. Its goal was just to overwrite parameters without a type (unknown), but it was actually overwriting all types which could change the query's desired behavior. (jurka) Thanks to Hiroshi Saito.
  • fix Fix the ORDINAL_POSITION in the DatabaseMetaData.getColumns. Previously we were returning simply pg_attribute.attnum, but that doesn't work in the presence of dropped columns because later columns don't get their attnum decremented if a preceding column is dropped. Instead use the row_number window function for 8.4 and later servers to figure out the live column position. (jurka)
  • fix Always specify an XA error code when creating an XAException. Otherwise a transaction manager won't know what to do with the error and may have to asssume the worst. (jurka) Thanks to Heikki Linnakangas, Justin Bertram.
  • fix LOB truncation didn't allow truncating to zero length because it was improperly using the positioning length checks which don't allow a zero length. (jurka) Thanks to Simon Kissane.
  • fix Protocol sync was lost when a batch statement parameter had an embedded null byte. (jurka) Thanks to Pierre Queinnec.
  • fix Fix a problem using the Copy API to copy data to the server from a Reader. After reading data out of the Reader and into a buffer, we were sending the entire buffer on to the server, not just the subset of it that was filled by the read operation. (jurka) Thanks to Leonardo F.
  • fix A XA transaction should not change the autocommit setting of a Connection. Ensure that we restore this property correctly after the XA transaction completes. (jurka) Thanks to Heikki Linnakangas, Achilleas Mantzios.
  • fix PoolingDataSources were not picking up all of the properties that were set for them. Notably it would not give you a SSL connection when asked. (jurka) Thanks to Eric Jain.
  • fix When setNull is called with a TIME or TIMESTAMP type we cannot pass that type information on to the backend because we really don't know whether it is with or without a time zone. For a NULL value it doesn't matter, but we can't establish a type because a later call with a non-null value using the same PreparedStatement can potentially end up using a specific type that is incorrect. (jurka) Thanks to Martti Jeenicke.

Version 8.4-702 (2010-05-11)

  • add Add support for returning the new TRUNCATE privilege, that was added in 8.4, to the list of known table privileges. (jurka) Thanks to Thomas Kellerer.
  • add Add the partial index constraint to the FILTER_CONDITION column returned by DatabaseMetaData.getIndexInfo. (jurka) Thanks to Mark Kirkwood.
  • add Japanese translation of error messages. (jurka) Thanks to Hiroshi Saito.
  • add Bulgarian translation of error messages. (jurka) Thanks to Viktor Usunov.
  • add Add some more specific types to the return value for DatabaseMetaData.getTables. Return composite types, temporary views, and temporary sequences with TABLE_TYPE values specifically for them. (jurka) Thanks to Thomas Kellerer.
  • fix Remove an unused Sun specific import that prevented compilation on non-Sun JDKs. (jurka) Thanks to Tom Lane.
  • fix Change the processing of Statement.executeUpdate to complain if any of the results of a multi-statement query string return a ResultSet. Previously we were only checking the first result which resulted in silent partial execution of later SELECT statements. (jurka) Thanks to Joseph Shraibman.
  • fix When a COPY operation is the first statement issued in a transaction, it was not sending the BEGIN necessary to start the transaction. (jurka) Thanks to Maciek Sakrejda.
  • fix The 8.4 release added some code to avoid re-describing a statement if we already had the type information available by copying the resolved type information from the query to the parameters. Its goal was just to overwrite parameters without a type (unknown), but it was actually overwriting all types which could change the query's desired behavior. (jurka) Thanks to Hiroshi Saito.
  • fix Fix the ORDINAL_POSITION in the DatabaseMetaData.getColumns. Previously we were returning simply pg_attribute.attnum, but that doesn't work in the presence of dropped columns because later columns don't get their attnum decremented if a preceding column is dropped. Instead use the row_number window function for 8.4 and later servers to figure out the live column position. (jurka)
  • fix Always specify an XA error code when creating an XAException. Otherwise a transaction manager won't know what to do with the error and may have to asssume the worst. (jurka) Thanks to Heikki Linnakangas, Justin Bertram.
  • fix LOB truncation didn't allow truncating to zero length because it was improperly using the positioning length checks which don't allow a zero length. (jurka) Thanks to Simon Kissane.
  • fix Protocol sync was lost when a batch statement parameter had an embedded null byte. (jurka) Thanks to Pierre Queinnec.
  • fix Fix a problem using the Copy API to copy data to the server from a Reader. After reading data out of the Reader and into a buffer, we were sending the entire buffer on to the server, not just the subset of it that was filled by the read operation. (jurka) Thanks to Leonardo F.
  • fix A XA transaction should not change the autocommit setting of a Connection. Ensure that we restore this property correctly after the XA transaction completes. (jurka) Thanks to Heikki Linnakangas, Achilleas Mantzios.
  • fix PoolingDataSources were not picking up all of the properties that were set for them. Notably it would not give you a SSL connection when asked. (jurka) Thanks to Eric Jain.
  • fix When setNull is called with a TIME or TIMESTAMP type we cannot pass that type information on to the backend because we really don't know whether it is with or without a time zone. For a NULL value it doesn't matter, but we can't establish a type because a later call with a non-null value using the same PreparedStatement can potentially end up using a specific type that is incorrect. (jurka) Thanks to Martti Jeenicke.

Version 8.3-606 (2010-05-11)

  • add Add some more specific types to the return value for DatabaseMetaData.getTables. Return composite types, temporary views, and temporary sequences with TABLE_TYPE values specifically for them. (jurka) Thanks to Thomas Kellerer.
  • fix Change the processing of Statement.executeUpdate to complain if any of the results of a multi-statement query string return a ResultSet. Previously we were only checking the first result which resulted in silent partial execution of later SELECT statements. (jurka) Thanks to Joseph Shraibman.
  • fix Always specify an XA error code when creating an XAException. Otherwise a transaction manager won't know what to do with the error and may have to asssume the worst. (jurka) Thanks to Heikki Linnakangas, Justin Bertram.
  • fix LOB truncation didn't allow truncating to zero length because it was improperly using the positioning length checks which don't allow a zero length. (jurka) Thanks to Simon Kissane.
  • fix A XA transaction should not change the autocommit setting of a Connection. Ensure that we restore this property correctly after the XA transaction completes. (jurka) Thanks to Heikki Linnakangas, Achilleas Mantzios.
  • fix PoolingDataSources were not picking up all of the properties that were set for them. Notably it would not give you a SSL connection when asked. (jurka) Thanks to Eric Jain.
  • fix When setNull is called with a TIME or TIMESTAMP type we cannot pass that type information on to the backend because we really don't know whether it is with or without a time zone. For a NULL value it doesn't matter, but we can't establish a type because a later call with a non-null value using the same PreparedStatement can potentially end up using a specific type that is incorrect. (jurka) Thanks to Martti Jeenicke.

Version 8.2-511 (2010-05-11)

  • add Add some more specific types to the return value for DatabaseMetaData.getTables. Return composite types, temporary views, and temporary sequences with TABLE_TYPE values specifically for them. (jurka) Thanks to Thomas Kellerer.
  • fix Change the processing of Statement.executeUpdate to complain if any of the results of a multi-statement query string return a ResultSet. Previously we were only checking the first result which resulted in silent partial execution of later SELECT statements. (jurka) Thanks to Joseph Shraibman.
  • fix Always specify an XA error code when creating an XAException. Otherwise a transaction manager won't know what to do with the error and may have to asssume the worst. (jurka) Thanks to Heikki Linnakangas, Justin Bertram.
  • fix A XA transaction should not change the autocommit setting of a Connection. Ensure that we restore this property correctly after the XA transaction completes. (jurka) Thanks to Heikki Linnakangas, Achilleas Mantzios.
  • fix PoolingDataSources were not picking up all of the properties that were set for them. Notably it would not give you a SSL connection when asked. (jurka) Thanks to Eric Jain.
  • fix When setNull is called with a TIME or TIMESTAMP type we cannot pass that type information on to the backend because we really don't know whether it is with or without a time zone. For a NULL value it doesn't matter, but we can't establish a type because a later call with a non-null value using the same PreparedStatement can potentially end up using a specific type that is incorrect. (jurka) Thanks to Martti Jeenicke.

Version 8.1-415 (2010-05-11)

  • fix Change the processing of Statement.executeUpdate to complain if any of the results of a multi-statement query string return a ResultSet. Previously we were only checking the first result which resulted in silent partial execution of later SELECT statements. (jurka) Thanks to Joseph Shraibman.
  • fix Always specify an XA error code when creating an XAException. Otherwise a transaction manager won't know what to do with the error and may have to asssume the worst. (jurka) Thanks to Heikki Linnakangas, Justin Bertram.
  • fix A XA transaction should not change the autocommit setting of a Connection. Ensure that we restore this property correctly after the XA transaction completes. (jurka) Thanks to Heikki Linnakangas, Achilleas Mantzios.
  • fix When setNull is called with a TIME or TIMESTAMP type we cannot pass that type information on to the backend because we really don't know whether it is with or without a time zone. For a NULL value it doesn't matter, but we can't establish a type because a later call with a non-null value using the same PreparedStatement can potentially end up using a specific type that is incorrect. (jurka) Thanks to Martti Jeenicke.

Version 8.0-325 (2010-05-11)

  • fix Change the processing of Statement.executeUpdate to complain if any of the results of a multi-statement query string return a ResultSet. Previously we were only checking the first result which resulted in silent partial execution of later SELECT statements. (jurka) Thanks to Joseph Shraibman.
  • fix When setNull is called with a TIME or TIMESTAMP type we cannot pass that type information on to the backend because we really don't know whether it is with or without a time zone. For a NULL value it doesn't matter, but we can't establish a type because a later call with a non-null value using the same PreparedStatement can potentially end up using a specific type that is incorrect. (jurka) Thanks to Martti Jeenicke.

Version 8.4-701 (2009-07-01)

  • add Add support for GSSAPI authentication. (jurka)
  • add Implement support for generated keys for PreparedStatements in addition to the earlier support for plain Statements. (jurka)
  • add Speed up parsing of BigDecimal values in the common case of reasonably short, simple numbers. (jurka) Thanks to Heikki Linnakangas.
  • add Avoid sending extra Describe Portal messages to the server when we've already done this for the query. Caching the Field objects across executions will also speed up ResultSetMetaData calls. (jurka) Thanks to Heiiki Linnakangas.
  • add Avoid sending extra Describe Statement messages to the server when we've already done this for the query. (jurka)
  • add Add a connection parameter for setting a socket read timeout. This acts like a global query timeout that shuts down the connection if exceeded. This can be used to detect dead network connections if you can reasonably estimate the upper bound of your queries. (jurka) Thanks to Art Gramlich.
  • add Provide a way for the user to specify the desired length return value for metadata about types of unknown length. We've tried a number of things and can't keep everyone happy, so it's their problem now. (jurka)
  • add Implement support for COPY in the JDBC driver with a non-standard postgresql CopyManager API. This provides support for both copy from the server and to the server and operating in either a source or sink mode. (jurka) Thanks to Kalle Hallivuori.
  • update Updated Serbian translation. (jurka) Thanks to Bojan Skaljac.
  • update Updated Brazilian Portuguese translation. (jurka) Thanks to Euler Taveira de Oliveira.
  • update Updated Turkish translation. (jurka) Thanks to Devrim Gunduz.
  • fix Don't list toast table types in the output of DatabaseMetaData.getTypeInfo. (jurka)
  • fix The Statement and Connection proxies used for connection pooling code relied on the underlying real connection and statement code for equals and hashcode support. When the proxies are closed we discard the references to the real objects, so we can't rely on them for this support because we'll get a NullPointerException. (jurka) Thanks to Radu Buzila.
  • fix Not all datatypes use a comma for the array element delimiter. Lookup the appropriate delimiter in the system catalogs. (jurka)
  • fix DatabaseMetaData.getColumns was broken for the JDBC 3 and 4 drivers when running against 7.2 or older servers. (jurka)
  • fix Retrieve columns' default values from pg_attrdef.adbin rather than adsrc because adsrc can get out of date when dependent objects are renamed while adbin stays up to date. (jurka) Thanks to Dickson Guedes, Tom Lane.
  • fix Fix parsing of integer and long data. Some malformed inputs (only a negative sign) got treated as valid data. (jurka) Thanks to Heiiki Linnakangas.
  • fix Initialize BatchUpdateExceptions with the SQLState of the SQLException that they are wrapping. Code that inspects the SQLStates of SQLExceptions, but doesn't unwrap the nested exception will not understand the underlying cause and may make incorrect decisions about the severity of the error. (jurka) Thanks to Fujii Masao.
  • fix Initialize the prepareThreshold parameter for datasources to the same value that would be used by a non-DataSource created connection. By not setting it, it effectively turned off the use of named statments. (jurka)

Version 8.3-605 (2009-07-01)

  • fix The Statement and Connection proxies used for connection pooling code relied on the underlying real connection and statement code for equals and hashcode support. When the proxies are closed we discard the references to the real objects, so we can't rely on them for this support because we'll get a NullPointerException. (jurka) Thanks to Radu Buzila.
  • fix DatabaseMetaData.getColumns was broken for the JDBC 3 and 4 drivers when running against 7.2 or older servers. (jurka)
  • fix Retrieve columns' default values from pg_attrdef.adbin rather than adsrc because adsrc can get out of date when dependent objects are renamed while adbin stays up to date. (jurka) Thanks to Dickson Guedes, Tom Lane.
  • fix Fix parsing of integer and long data. Some malformed inputs (only a negative sign) got treated as valid data. (jurka) Thanks to Heiiki Linnakangas.
  • fix Initialize BatchUpdateExceptions with the SQLState of the SQLException that they are wrapping. Code that inspects the SQLStates of SQLExceptions, but doesn't unwrap the nested exception will not understand the underlying cause and may make incorrect decisions about the severity of the error. (jurka) Thanks to Fujii Masao.

Version 8.2-510 (2009-07-01)

  • fix The Statement and Connection proxies used for connection pooling code relied on the underlying real connection and statement code for equals and hashcode support. When the proxies are closed we discard the references to the real objects, so we can't rely on them for this support because we'll get a NullPointerException. (jurka) Thanks to Radu Buzila.
  • fix Retrieve columns' default values from pg_attrdef.adbin rather than adsrc because adsrc can get out of date when dependent objects are renamed while adbin stays up to date. (jurka) Thanks to Dickson Guedes, Tom Lane.
  • fix Fix parsing of integer and long data. Some malformed inputs (only a negative sign) got treated as valid data. (jurka) Thanks to Heiiki Linnakangas.
  • fix Initialize BatchUpdateExceptions with the SQLState of the SQLException that they are wrapping. Code that inspects the SQLStates of SQLExceptions, but doesn't unwrap the nested exception will not understand the underlying cause and may make incorrect decisions about the severity of the error. (jurka) Thanks to Fujii Masao.

Version 8.1-414 (2009-07-01)

  • fix The Statement and Connection proxies used for connection pooling code relied on the underlying real connection and statement code for equals and hashcode support. When the proxies are closed we discard the references to the real objects, so we can't rely on them for this support because we'll get a NullPointerException. (jurka) Thanks to Radu Buzila.
  • fix Retrieve columns' default values from pg_attrdef.adbin rather than adsrc because adsrc can get out of date when dependent objects are renamed while adbin stays up to date. (jurka) Thanks to Dickson Guedes, Tom Lane.
  • fix Initialize BatchUpdateExceptions with the SQLState of the SQLException that they are wrapping. Code that inspects the SQLStates of SQLExceptions, but doesn't unwrap the nested exception will not understand the underlying cause and may make incorrect decisions about the severity of the error. (jurka) Thanks to Fujii Masao.

Version 8.0-324 (2009-07-01)

  • fix The Statement and Connection proxies used for connection pooling code relied on the underlying real connection and statement code for equals and hashcode support. When the proxies are closed we discard the references to the real objects, so we can't rely on them for this support because we'll get a NullPointerException. (jurka) Thanks to Radu Buzila.
  • fix Retrieve columns' default values from pg_attrdef.adbin rather than adsrc because adsrc can get out of date when dependent objects are renamed while adbin stays up to date. (jurka) Thanks to Dickson Guedes, Tom Lane.
  • fix Initialize BatchUpdateExceptions with the SQLState of the SQLException that they are wrapping. Code that inspects the SQLStates of SQLExceptions, but doesn't unwrap the nested exception will not understand the underlying cause and may make incorrect decisions about the severity of the error. (jurka) Thanks to Fujii Masao.

Version 8.4dev-700 (2008-11-16)

  • add Add a configuration option to enable tcp keep alives. (jurka) Thanks to Toru Shimogaki.
  • add For array types, return information about their base types for things like getPrecision. (jurka)
  • add Add more detail to the exception when interpreting a server error message. (jurka) Thanks to Daniel Migowski.
  • add Make datasources support the compatible parameter. (jurka) Thanks to Achilleas Mantzios.
  • add Send initial connection startup parameters in UTF-8 rather than US-ASCII. The initial connection encoding is poorly defined as "whatever encoding the database is in" which we don't know until after the authentication phase is complete. UTF-8 supports everything ascii did and will now allow database names, user names, and passwords to contain non-ascii characaters as long as their database is in UTF-8, which is the most common case. (jurka)
  • add Map the database uuid type to java.util.UUID. This only works for relatively new server (8.3) and JDK (1.5) versions. (jurka)
  • add Change the output of PreparedStatement.toString for V3 protocol connections to output a textual representation of the query that is a legal query in most cases. Previously it didn't quote or escape parameters. It still doesn't correctly handle binary data and it may not be exactly the same as executing it by the PreparedStatement (which will have extra type information), but it is a nicer to work with. (jurka) Thanks to Michael Enke.
  • add Implement support for SQLXML. All of the underlying XML tools don't seem to support handling fragments, but these are allowed in the server xml type. I'm also not sure there aren't any encoding problems, but it mostly seems to work. (jurka)
  • add Implement basic generated keys support. It does not support returning columns by index because that requires complicated parsing of the query to determine the table being used. Right now it supports returning all columns and columns by name. (jurka)
  • remove Kill off JDBC2 specific code. Simplify the build system now that we require a 1.4 or higher JDK. (jurka)
  • update Make the build system aware of the 1.7 JDK (which icedtea reports itself as) and add an explicit check and complaint if we find a JDK that we don't support. (jurka)
  • update Refactor type information functions into a dedicated interface. This avoids making BaseConnection expose these and AbstractJdbc2Connection just proxy these to the real type information handing. Additionally now type information can be setup differently for each JDBC version which will be required for things like SQLXML support because the JDBC2 code can't use the java.sql.Types values for JDBC4. This removes the long deprecated functions in the public PGConnection interface, but hopefully no one is still using that. (jurka)
  • update Updated German translation. (jurka) Thanks to Andre Bialojahn.
  • fix Do comparison of identifiers in a known Locale (specificially US). In Turkish for example "id".toLowerCase().equals("ID".toLowerCase()) is false which makes looking up a column name case insensitively a problem. (jurka) Thanks to Mikko Tiihonen.
  • fix Avoid making a copy of the current row after each positioning command, for example next(). This is only needed if we have an updatable ResultSet and is just a waste otherwise. (jurka) Thanks to Gustav Trede.
  • fix Fix a deadlock that occurs when retrieving notifications. Normal query execution enters the QueryExecutor monitor and then calls a synchronized method in the ProtocolConnection to update the transaction state. Notification retrieval operates in the reverse order, entering the ProtocolConnection monitor and then calling a synchronized method in the QueryExecutor. Remove the QueryExecutor call from ProtocolConnection and make the higher level code responsible for calling it so we always acquire locks in the same order. (jurka) Thanks to Joao Rui Leal.
  • fix CallableStatement#getUpdateCount was returning 1 when a function returned a ResultSet. Return -1 instead. (jurka) Thanks to Sam Lawrence, Albe Laurenz.
  • fix The DataSource options for ssl where not correctly being serialized or included in the Reference. (jurka)
  • fix DatabaseMetaData.getTypeInfo provides two columns for indicating the prefix and suffix that should be wrapped around a literal when putting it into a query. Return the correct quoting (') for all non-numeric types. (jurka) Thanks to Mats Ekelund.
  • fix Accept UTF8 as an equivalent of UNICODE when trying to detect if client_encoding has changed to something the driver doesn't understand. Don't try to accept every possible spelling (UTF-8) as UTF8 is the server's canonical name and people shouldn't be messing with this anyway. (jurka)
  • fix Avoid looking up the UTF-8 Charset by name. When using multiple Charsets, this is a minor performance hit in the single threaded case and a big point of contention for multiple threads. (jurka) Thanks to Paul Lindner.
  • fix Adjust the deadlock avoidance code for the V3 protocol to be concerned with many statements in a single execute call in addition to the existing worry about many statements from an executeBatch call. This doesn't prevent all possible deadlocks as the deadlock avoidance calculation was written for batch execution which should not be returning ResultSets. If many long queries that return significant results are issued with a single execute we will still deadlock. (jurka)
  • fix DatabaseMetaData.getTypeInfo was reporting whether the type was signed or not, but the output column is really supposed to indicate whether the the type is unsigned or not. (jurka) Thanks to Mythili Gopalakrishnan.
  • fix Support a parameter (?) for the amount part of the timestampadd function. Previously we only supported literals. (jurka) Thanks to Christophe Janton.

Version 8.3-604 (2008-11-16)

  • update Make the build system aware of the 1.7 JDK (which icedtea reports itself as) and add an explicit check and complaint if we find a JDK that we don't support. (jurka)
  • update Updated German translation. (jurka) Thanks to Andre Bialojahn.
  • fix Do comparison of identifiers in a known Locale (specificially US). In Turkish for example "id".toLowerCase().equals("ID".toLowerCase()) is false which makes looking up a column name case insensitively a problem. (jurka) Thanks to Mikko Tiihonen.
  • fix Fix a deadlock that occurs when retrieving notifications. Normal query execution enters the QueryExecutor monitor and then calls a synchronized method in the ProtocolConnection to update the transaction state. Notification retrieval operates in the reverse order, entering the ProtocolConnection monitor and then calling a synchronized method in the QueryExecutor. Remove the QueryExecutor call from ProtocolConnection and make the higher level code responsible for calling it so we always acquire locks in the same order. (jurka) Thanks to Joao Rui Leal.
  • fix CallableStatement#getUpdateCount was returning 1 when a function returned a ResultSet. Return -1 instead. (jurka) Thanks to Sam Lawrence, Albe Laurenz.
  • fix The DataSource options for ssl where not correctly being serialized or included in the Reference. (jurka)
  • fix Accept UTF8 as an equivalent of UNICODE when trying to detect if client_encoding has changed to something the driver doesn't understand. Don't try to accept every possible spelling (UTF-8) as UTF8 is the server's canonical name and people shouldn't be messing with this anyway. (jurka)
  • fix Adjust the deadlock avoidance code for the V3 protocol to be concerned with many statements in a single execute call in addition to the existing worry about many statements from an executeBatch call. This doesn't prevent all possible deadlocks as the deadlock avoidance calculation was written for batch execution which should not be returning ResultSets. If many long queries that return significant results are issued with a single execute we will still deadlock. (jurka)
  • fix DatabaseMetaData.getTypeInfo was reporting whether the type was signed or not, but the output column is really supposed to indicate whether the the type is unsigned or not. (jurka) Thanks to Mythili Gopalakrishnan.
  • fix Support a parameter (?) for the amount part of the timestampadd function. Previously we only supported literals. (jurka) Thanks to Christophe Janton.

Version 8.2-509 (2008-11-16)

  • update Make the build system aware of the 1.7 JDK (which icedtea reports itself as) and add an explicit check and complaint if we find a JDK that we don't support. (jurka)
  • update Updated German translation. (jurka) Thanks to Andre Bialojahn.
  • fix Do comparison of identifiers in a known Locale (specificially US). In Turkish for example "id".toLowerCase().equals("ID".toLowerCase()) is false which makes looking up a column name case insensitively a problem. (jurka) Thanks to Mikko Tiihonen.
  • fix Fix a deadlock that occurs when retrieving notifications. Normal query execution enters the QueryExecutor monitor and then calls a synchronized method in the ProtocolConnection to update the transaction state. Notification retrieval operates in the reverse order, entering the ProtocolConnection monitor and then calling a synchronized method in the QueryExecutor. Remove the QueryExecutor call from ProtocolConnection and make the higher level code responsible for calling it so we always acquire locks in the same order. (jurka) Thanks to Joao Rui Leal.
  • fix CallableStatement#getUpdateCount was returning 1 when a function returned a ResultSet. Return -1 instead. (jurka) Thanks to Sam Lawrence, Albe Laurenz.
  • fix Accept UTF8 as an equivalent of UNICODE when trying to detect if client_encoding has changed to something the driver doesn't understand. Don't try to accept every possible spelling (UTF-8) as UTF8 is the server's canonical name and people shouldn't be messing with this anyway. (jurka)
  • fix Adjust the deadlock avoidance code for the V3 protocol to be concerned with many statements in a single execute call in addition to the existing worry about many statements from an executeBatch call. This doesn't prevent all possible deadlocks as the deadlock avoidance calculation was written for batch execution which should not be returning ResultSets. If many long queries that return significant results are issued with a single execute we will still deadlock. (jurka)
  • fix DatabaseMetaData.getTypeInfo was reporting whether the type was signed or not, but the output column is really supposed to indicate whether the the type is unsigned or not. (jurka) Thanks to Mythili Gopalakrishnan.
  • fix Support a parameter (?) for the amount part of the timestampadd function. Previously we only supported literals. (jurka) Thanks to Christophe Janton.

Version 8.1-413 (2008-11-16)

  • update Make the build system aware of the 1.7 JDK (which icedtea reports itself as) and add an explicit check and complaint if we find a JDK that we don't support. (jurka)
  • update Updated German translation. (jurka) Thanks to Andre Bialojahn.
  • fix Do comparison of identifiers in a known Locale (specificially US). In Turkish for example "id".toLowerCase().equals("ID".toLowerCase()) is false which makes looking up a column name case insensitively a problem. (jurka) Thanks to Mikko Tiihonen.
  • fix Fix a deadlock that occurs when retrieving notifications. Normal query execution enters the QueryExecutor monitor and then calls a synchronized method in the ProtocolConnection to update the transaction state. Notification retrieval operates in the reverse order, entering the ProtocolConnection monitor and then calling a synchronized method in the QueryExecutor. Remove the QueryExecutor call from ProtocolConnection and make the higher level code responsible for calling it so we always acquire locks in the same order. (jurka) Thanks to Joao Rui Leal.
  • fix CallableStatement#getUpdateCount was returning 1 when a function returned a ResultSet. Return -1 instead. (jurka) Thanks to Sam Lawrence, Albe Laurenz.
  • fix Accept UTF8 as an equivalent of UNICODE when trying to detect if client_encoding has changed to something the driver doesn't understand. Don't try to accept every possible spelling (UTF-8) as UTF8 is the server's canonical name and people shouldn't be messing with this anyway. (jurka)
  • fix Adjust the deadlock avoidance code for the V3 protocol to be concerned with many statements in a single execute call in addition to the existing worry about many statements from an executeBatch call. This doesn't prevent all possible deadlocks as the deadlock avoidance calculation was written for batch execution which should not be returning ResultSets. If many long queries that return significant results are issued with a single execute we will still deadlock. (jurka)

Version 8.0-323 (2008-11-16)

  • update Make the build system aware of the 1.7 JDK (which icedtea reports itself as) and add an explicit check and complaint if we find a JDK that we don't support. (jurka)
  • update Updated German translation. (jurka) Thanks to Andre Bialojahn.
  • fix Do comparison of identifiers in a known Locale (specificially US). In Turkish for example "id".toLowerCase().equals("ID".toLowerCase()) is false which makes looking up a column name case insensitively a problem. (jurka) Thanks to Mikko Tiihonen.
  • fix CallableStatement#getUpdateCount was returning 1 when a function returned a ResultSet. Return -1 instead. (jurka) Thanks to Sam Lawrence, Albe Laurenz.
  • fix Accept UTF8 as an equivalent of UNICODE when trying to detect if client_encoding has changed to something the driver doesn't understand. Don't try to accept every possible spelling (UTF-8) as UTF8 is the server's canonical name and people shouldn't be messing with this anyway. (jurka)
  • fix Adjust the deadlock avoidance code for the V3 protocol to be concerned with many statements in a single execute call in addition to the existing worry about many statements from an executeBatch call. This doesn't prevent all possible deadlocks as the deadlock avoidance calculation was written for batch execution which should not be returning ResultSets. If many long queries that return significant results are issued with a single execute we will still deadlock. (jurka)

Version 8.3-603 (2008-01-31)

  • add When PreparedStatement.setObject(int, Object, Types.OTHER) is issued, bind the String version of the object with an unspecified type. This makes it easier to use types that Java doesn't have a mapping for without enabling stringtype=unspecified for all driver calls. (jurka) Thanks to Matt Magoffin.
  • add Implement the new JDBC3 + JDBC4 columns that are now returned by DatabaseMetaData.getColumns. (jurka) Thanks to Christian Schroder.
  • add Throw an exception if people try to use setQueryTimeout with a non-zero value as it is not implemented. (jurka)
  • update Updated simplified and traditional Chinese translations. (jurka) Thanks to Kuo ChaoYi.
  • update Updated Brazilian Portuguese translation. (jurka) Thanks to Euler Taveira de Oliveira.
  • update Updated Turkish translation. (jurka) Thanks to Devrim Gunduz.
  • fix The JDBC spec says that when you have two duplicately named columns in a ResultSet, a search by name should return the first one. Previously our code was returning the second match. (jurka) Thanks to Magne Mahre.
  • fix While the driver currently doesn't support the copy protocol, it needs to understand it enough to ignore it. Now the connection will not be irreparably broken when a COPY request is sent. (jurka) Thanks to Altaf Malik.

Version 8.2-508 (2008-01-31)

  • update Updated Brazilian Portuguese translation. (jurka) Thanks to Euler Taveira de Oliveira.
  • fix While the driver currently doesn't support the copy protocol, it needs to understand it enough to ignore it. Now the connection will not be irreparably broken when a COPY request is sent. (jurka) Thanks to Altaf Malik.
  • fix Fix batch execution of CallableStatements. (davec)
  • fix The JDBC spec says that when you have two duplicately named columns in a ResultSet, a search by name should return the first one. Previously our code was returning the second match. (jurka) Thanks to Magne Mahre.

Version 8.1-412 (2008-01-31)

  • update Updated Brazilian Portuguese translation. (jurka) Thanks to Euler Taveira de Oliveira.
  • fix While the driver currently doesn't support the copy protocol, it needs to understand it enough to ignore it. Now the connection will not be irreparably broken when a COPY request is sent. (jurka) Thanks to Altaf Malik.
  • fix The JDBC spec says that when you have two duplicately named columns in a ResultSet, a search by name should return the first one. Previously our code was returning the second match. (jurka) Thanks to Magne Mahre.

Version 8.0-322 (2008-01-31)

  • update Updated Brazilian Portuguese translation. (jurka) Thanks to Euler Taveira de Oliveira.
  • fix While the driver currently doesn't support the copy protocol, it needs to understand it enough to ignore it. Now the connection will not be irreparably broken when a COPY request is sent. (jurka) Thanks to Altaf Malik.
  • fix The JDBC spec says that when you have two duplicately named columns in a ResultSet, a search by name should return the first one. Previously our code was returning the second match. (jurka) Thanks to Magne Mahre.

Version 8.3-dev602 (2007-12-02)

  • add Provide a minimal ClientInfo implementation because of complaints about exceptions continually being thrown on glassfish. (jurka)
  • add Set extra_float_digits=2 on connection startup so we get as much data about floats as possible. (jurka)
  • add Support multi-dimensional arrays and returning arrays of primitive server types as wrapped java Objects so that NULL values can be detected. Backwards compatibility is provided using the compatible=8.2 URL option to return arrays of primitive types. (jurka) Thanks to Marek Lewczuk.
  • add Implement the JDBC4 method Connection.createArrayOf. Now people can portably and easily handle array data. (jurka)
  • update Assorted cleanups to the source tree based on findbugs output. (jurka) Thanks to Mikko Tiihonen.
  • fix When doing batch execution we can have multiple Parse and DescribeStatement messages on the wire at the same time. When we finally get around to collecting the DescribeStatement results we must check whether they still apply to the currently parsed query. Otherwise we'll overwrite our type information with stale data that will cause failures down the line. (jurka) Thanks to Eric Faulhaber.
  • fix CallableStatements with OUT parameters that get executed more than prepareThreshold times failed if clearParameters() was called in between executions. When we've hit the prepareThreshold, we no longer send Parse messages which invoke SimpleParameterList.getTypeOID which has side effects required to setup the parameters correctly. Add an explicit convertFunctionOutParameters method to do this work instead that we call in all execution paths. (jurka) Thanks to Ludovico Bianchini.
  • fix The driver was incorrectly parsing identifiers that had parts that look like dollar quotes. Things like a$b$c are valid identifiers, not dollar quotes. When determining if a $ we've found is a dollar quote start, look at the preceding character and see if it is a valid identifier part to determine if we're in the midst of an identifier or are starting a new token. (jurka) Thanks to Michael Paesold.
  • fix Multiple calls to XAConnection.getConnection within the same user transaction ended up restarting the transaction on the server side as a result of manipulating the autocommit state. When retrieving a Connection, we must pay attention to whether a user transaction is in progress when setting the autocommit state. (jurka) Thanks to Heikki Linnakangas.
  • fix Make code that parses queries for updateable resultsets aware of the ONLY clause. (jurka) Thanks to Oleg Vasylenko.
  • fix While custom type maps are not implemented, the code to detect the caller trying to use them threw a ClassCastException. Correctly detect the attempted use of custom types and bail out with a SQLException. (jurka)
  • fix When dealing with OIDs larger than 2^31 we can't retrieve these as Java ints. Using long throughout the driver would be a pain, one reason is that you can't use a switch on a long variable. PG supports representing OIDs as signed ints (select '3000000000'::oid::int4), so retrieve the values as longs, but then cast to int to get the signed representation. (jurka) Thanks to Tom Lane, Quinton Dolan.

Version 8.2-507 (2007-12-02)

  • fix When doing batch execution we can have multiple Parse and DescribeStatement messages on the wire at the same time. When we finally get around to collecting the DescribeStatement results we must check whether they still apply to the currently parsed query. Otherwise we'll overwrite our type information with stale data that will cause failures down the line. (jurka) Thanks to Eric Faulhaber.
  • fix CallableStatements with OUT parameters that get executed more than prepareThreshold times failed if clearParameters() was called in between executions. When we've hit the prepareThreshold, we no longer send Parse messages which invoke SimpleParameterList.getTypeOID which has side effects required to setup the parameters correctly. Add an explicit convertFunctionOutParameters method to do this work instead that we call in all execution paths. (jurka) Thanks to Ludovico Bianchini.
  • fix The driver was incorrectly parsing identifiers that had parts that look like dollar quotes. Things like a$b$c are valid identifiers, not dollar quotes. When determining if a $ we've found is a dollar quote start, look at the preceding character and see if it is a valid identifier part to determine if we're in the midst of an identifier or are starting a new token. (jurka) Thanks to Michael Paesold.
  • fix Multiple calls to XAConnection.getConnection within the same user transaction ended up restarting the transaction on the server side as a result of manipulating the autocommit state. When retrieving a Connection, we must pay attention to whether a user transaction is in progress when setting the autocommit state. (jurka) Thanks to Heikki Linnakangas.
  • fix Support NULL array elements. (jurka) Thanks to Christian Schröder.
  • fix Make code that parses queries for updateable resultsets aware of the ONLY clause. (jurka) Thanks to Oleg Vasylenko.
  • fix While custom type maps are not implemented, the code to detect the caller trying to use them threw a ClassCastException. Correctly detect the attempted use of custom types and bail out with a SQLException. (jurka)

Version 8.1-411 (2007-12-02)

  • fix When doing batch execution we can have multiple Parse and DescribeStatement messages on the wire at the same time. When we finally get around to collecting the DescribeStatement results we must check whether they still apply to the currently parsed query. Otherwise we'll overwrite our type information with stale data that will cause failures down the line. (jurka) Thanks to Eric Faulhaber.
  • fix CallableStatements with OUT parameters that get executed more than prepareThreshold times failed if clearParameters() was called in between executions. When we've hit the prepareThreshold, we no longer send Parse messages which invoke SimpleParameterList.getTypeOID which has side effects required to setup the parameters correctly. Add an explicit convertFunctionOutParameters method to do this work instead that we call in all execution paths. (jurka) Thanks to Ludovico Bianchini.
  • fix Multiple calls to XAConnection.getConnection within the same user transaction ended up restarting the transaction on the server side as a result of manipulating the autocommit state. When retrieving a Connection, we must pay attention to whether a user transaction is in progress when setting the autocommit state. (jurka) Thanks to Heikki Linnakangas.
  • fix Make code that parses queries for updateable resultsets aware of the ONLY clause. (jurka) Thanks to Oleg Vasylenko.
  • fix While custom type maps are not implemented, the code to detect the caller trying to use them threw a ClassCastException. Correctly detect the attempted use of custom types and bail out with a SQLException. (jurka)

Version 8.0-321 (2007-12-02)

  • fix Make code that parses queries for updateable resultsets aware of the ONLY clause. (jurka) Thanks to Oleg Vasylenko.
  • fix While custom type maps are not implemented, the code to detect the caller trying to use them threw a ClassCastException. Correctly detect the attempted use of custom types and bail out with a SQLException. (jurka)

Version 8.3-dev601 (2007-07-31)

  • add Add SSL as an option for DataSources. (jurka) Thanks to Albe Laurenz.
  • add Add the proper META-INF entry for the driver jar file so that JDBC4 applications no longer have to say Class.forName() as the driver gets loaded automatically. (jurka)
  • add Pull the default login timeout from DriverManager.getLoginTimeout() if none has been specified as a URL parameter. (jurka) Thanks to Adrian Custer.
  • add Add support for returning function parameter names and directions to getProcedureColumns. (jurka) Thanks to Jeffrey Cox.
  • add Make setObject recognize a parameter of type java.lang.Byte. (jurka) Thanks to Boom Roos.
  • add Allow CallableStatements to use batch execution. (davec)
  • update Brazilian Portuguese translation update. (jurka) Thanks to Euler Taveira de Oliveira.
  • update French translation update. (jurka) Thanks to Xavier Poinsard.
  • update Make inner classes static where possible. (jurka) Thanks to Mikko Tiihonen.
  • update Serbian translation updates. (jurka) Thanks to Bojan Skaljac.
  • fix Empty finalize method still has a performance impact, so comment it out entirely. (jurka) Thanks to Mikko Tiihonen.
  • fix Updatable ResultSets did not work when updating bytea data and then retrieving it because we send the data to the server in binary format, but the ResultSet was expecting to read it in text format. So we need to convert the data from binary to text format before stuffing it into the ResultSet. (jurka) Thanks to Mikko Tiihonen.
  • fix ResultSet.updateNClob(String, Reader) goes into an infinite loop. It really meant to call updateNClob(int, Reader), but was calling itself instead. (jurka) Thanks to Mikko Tiihonen.
  • fix Do escape processing on batch Statements prior to execution. This already worked for PreparedStatements, but not plain Statements. (jurka) Thanks to Hui Ye.
  • fix Don't return quotes around identifiers in the results of DatabaseMetaData.getIndexInfo even if they would require quoting in SQL. (jurka) Thanks to Andrei Badea.
  • fix Change how PGobject and children support clone(), to get more reasonable behavior when extending these classes. Don't implement clone by calling the constructor because you get the wrong class when cloning a subclass. (jurka) Thanks to Russell Francis.
  • fix When retrieving the columns of a function that returns a complex type, don't retrieve system columns (like xmin/xmax/...) that you'll find if the type is from a table. (jurka)
  • fix The previous fix to try and set a XA based Connection's autocommit property correctly didn't quite work. Calling XAConnection.getConnection set autocommit to true even if we already had a transaction in progress. (jurka) Thanks to Luca Ferrari, Heikki Linnakangas.
  • fix Error message was reporting the wrong parameter type value in the V3 protocol's SimpleParameterList implementation. (jurka) Thanks to Nathan Keynes.
  • fix Explicitly state which source level we are compiling. Newer versions of gij/gcj run a 1.5 VM, but default to a 1.4 source level compile which tricks up our build system. This still doens't fix the case of running with a newer VM than compiler, but I don't see what we can do about that. (jurka) Thanks to Tom Lane, Oliver Jowett.

Version 8.2-506 (2007-07-31)

  • add Make setObject recognize a parameter of type java.lang.Byte. (jurka) Thanks to Boom Roos.
  • update Brazilian Portuguese translation update. (jurka) Thanks to Euler Taveira de Oliveira.
  • update Serbian translation updates. (jurka) Thanks to Bojan Skaljac.
  • fix Updatable ResultSets did not work when updating bytea data and then retrieving it because we send the data to the server in binary format, but the ResultSet was expecting to read it in text format. So we need to convert the data from binary to text format before stuffing it into the ResultSet. (jurka) Thanks to Mikko Tiihonen.
  • fix ResultSet.updateNClob(String, Reader) goes into an infinite loop. It really meant to call updateNClob(int, Reader), but was calling itself instead. (jurka) Thanks to Mikko Tiihonen.
  • fix Do escape processing on batch Statements prior to execution. This already worked for PreparedStatements, but not plain Statements. (jurka) Thanks to Hui Ye.
  • fix Don't return quotes around identifiers in the results of DatabaseMetaData.getIndexInfo even if they would require quoting in SQL. (jurka) Thanks to Andrei Badea.
  • fix When retrieving the columns of a function that returns a complex type, don't retrieve system columns (like xmin/xmax/...) that you'll find if the type is from a table. (jurka)
  • fix The previous fix to try and set a XA based Connection's autocommit property correctly didn't quite work. Calling XAConnection.getConnection set autocommit to true even if we already had a transaction in progress. (jurka) Thanks to Luca Ferrari, Heikki Linnakangas.
  • fix Error message was reporting the wrong parameter type value in the V3 protocol's SimpleParameterList implementation. (jurka) Thanks to Nathan Keynes.
  • fix Explicitly state which source level we are compiling. Newer versions of gij/gcj run a 1.5 VM, but default to a 1.4 source level compile which tricks up our build system. This still doens't fix the case of running with a newer VM than compiler, but I don't see what we can do about that. (jurka) Thanks to Tom Lane, Oliver Jowett.

Version 8.1-410 (2007-07-31)

  • add Make setObject recognize a parameter of type java.lang.Byte. (jurka) Thanks to Boom Roos.
  • fix Updatable ResultSets did not work when updating bytea data and then retrieving it because we send the data to the server in binary format, but the ResultSet was expecting to read it in text format. So we need to convert the data from binary to text format before stuffing it into the ResultSet. (jurka) Thanks to Mikko Tiihonen.
  • fix Do escape processing on batch Statements prior to execution. This already worked for PreparedStatements, but not plain Statements. (jurka) Thanks to Hui Ye.
  • fix Don't return quotes around identifiers in the results of DatabaseMetaData.getIndexInfo even if they would require quoting in SQL. (jurka) Thanks to Andrei Badea.
  • fix When retrieving the columns of a function that returns a complex type, don't retrieve system columns (like xmin/xmax/...) that you'll find if the type is from a table. (jurka)
  • fix The previous fix to try and set a XA based Connection's autocommit property correctly didn't quite work. Calling XAConnection.getConnection set autocommit to true even if we already had a transaction in progress. (jurka) Thanks to Luca Ferrari, Heikki Linnakangas.
  • fix Error message was reporting the wrong parameter type value in the V3 protocol's SimpleParameterList implementation. (jurka) Thanks to Nathan Keynes.
  • fix Backpatch fix to 8.1: Allow XAResource.start with TMJOIN in a limited set of circumstances to work with WebLogic. We allow TMJOIN only if the resource was previously ended and the Xid is the same as the current Xid. (jurka) Thanks to Jan de Visser and Heikki Linnakangas.
  • fix Backpatch fix to 8.1: A XAConnections default autocommit state should be true. The driver was previously setting autocommit to false and assuming it would stay that way. This caused two problems. First, some applications expected to be able to issue local autocommit transactions prior to begin(). Second, some TMs (Geronimo) set the autocommit state to true themselves, which causes problems as the driver did not expect it to be changed. This patch correctly disables and enables autocommit around begin, prepare, commit, and rollback methods. (jurka) Thanks to Allan Saddi.
  • fix Explicitly state which source level we are compiling. Newer versions of gij/gcj run a 1.5 VM, but default to a 1.4 source level compile which tricks up our build system. This still doens't fix the case of running with a newer VM than compiler, but I don't see what we can do about that. (jurka) Thanks to Tom Lane, Oliver Jowett.

Version 8.0-320 (2007-07-31)

  • add Make setObject recognize a parameter of type java.lang.Byte. (jurka) Thanks to Boom Roos.
  • fix Updatable ResultSets did not work when updating bytea data and then retrieving it because we send the data to the server in binary format, but the ResultSet was expecting to read it in text format. So we need to convert the data from binary to text format before stuffing it into the ResultSet. (jurka) Thanks to Mikko Tiihonen.
  • fix Do escape processing on batch Statements prior to execution. This already worked for PreparedStatements, but not plain Statements. (jurka) Thanks to Hui Ye.
  • fix When retrieving the columns of a function that returns a complex type, don't retrieve system columns (like xmin/xmax/...) that you'll find if the type is from a table. (jurka)
  • fix Error message was reporting the wrong parameter type value in the V3 protocol's SimpleParameterList implementation. (jurka) Thanks to Nathan Keynes.
  • fix Explicitly state which source level we are compiling. Newer versions of gij/gcj run a 1.5 VM, but default to a 1.4 source level compile which tricks up our build system. This still doens't fix the case of running with a newer VM than compiler, but I don't see what we can do about that. (jurka) Thanks to Tom Lane, Oliver Jowett.

Version 8.3-dev600 (2007-04-18)

  • add Initial Serbian translation. (jurka) Thanks to Bojan Skaljac.
  • add Implement the JDBC4 Blob/Clob free method. (jurka)
  • add Improve performance of PGStream code by reducing function call and casting overhead. (jurka) Thanks to Stephen Denne, Nelson Arape.
  • add Replace ad-hoc and missing identifier escaping with a utility method. (jurka)
  • add Implement large object truncation for 8.3 servers. Currently we truncate Clobs with a byte length instead of a character length until we figure out how to represent character sets in Clobs. (jurka)
  • add Add methods to PGInterval to combine and scale intervals. (jurka)
  • add Save JUnit output into files so they can be processed by tools. The given example is the Hudson CI tool, but it's likely that other tools also need a file to work on. (jurka) Thanks to Frank Spies.
  • add Implement ResultSet.updateArray by simply mapping it to updateObject which now works for arrays. (jurka)
  • fix Statement.getTime, .getDate, and .getTimestamp methods which are passed a Calendar object were rotating the timezone in the wrong direction. Rewrite this code to use the existing TimestampUtils methods to match the working code in ResultSets. (jurka) Thanks to Ravi Periasmy.
  • fix Produce the timezone that we send to the server in the same format that we can parse. This is important for updatable ResultSets as we must be able to parse the format we produce. (jurka) Thanks to Leon Do.
  • fix Make the default object return type of oids to be a Java Long instead of Integer because oids are unsigned and exceed the range of Integer. (jurka)
  • fix Make Large Object handling work when the oid counter has exceeded Integer.MAX_VALUE by handling oids as longs. (jurka)
  • fix Allow multiple streams on the same large object to be used in parallel by assigning each stream its own large object handle. (jurka)
  • fix Fix persistence of XA datasources. PGObjectFactory wasn't aware of PGXADataSource and can't be because of the requirements for different build versions. Add a new PGXADataSourceFactory to provide this functionality. (jurka) Thanks to Heikki Linnakangas.
  • fix Close ref cursors immediately after fetching the rows. In long running transactions leaving them open results in memory consumption. (davec) Thanks to Guillaume Smet.
  • fix Fix the error message generated by a CallableStatement not getting results that match the registered out parameters to report the correct parameter position. (jurka)
  • fix Interval formatting didn't work for negative seconds values greater than -1. It would format it as -.5, but interval input doesn't accept this, so write it as -0.5 instead. (jurka)
  • fix Change DatabaseMetaData.getSearchStringEscape to always return "\\" instead of "\\\\". Previously it was assuming that it would be fed directly into a query and it needed to escape itself for the backend's input parser. This doesn't work for things like PreparedStatement parameters or DatabaseMetaData methods that take patterns. (jurka) Thanks to Valery Meshkov.
  • fix Remove mapping of the rand escape function. Due to the change in the setseed backend function return value from int to void we cannot implement in the same way as for previous server versions. Also per discussion the old implementation looked wrong and the spec gives us very little insight into what it should actually do. (jurka)
  • fix Allow updatable ResultSets to update arrays. (jurka) Thanks to Vasylenko.
  • fix In an error message reporting an unparseable timestamp value the code was trying to put the unparseable portion into the error message, but used the wrong variable to get the correct length. (jurka)
  • fix Parse timezones that have offsets in seconds. 8.2 servers now return this information so we must be able to handle it. (jurka)

Version 8.2-505 (2007-04-18)

  • add Initial Serbian translation. (jurka) Thanks to Bojan Skaljac.
  • add Implement ResultSet.updateArray by simply mapping it to updateObject which now works for arrays. (jurka)
  • fix Statement.getTime, .getDate, and .getTimestamp methods which are passed a Calendar object were rotating the timezone in the wrong direction. Rewrite this code to use the existing TimestampUtils methods to match the working code in ResultSets. (jurka) Thanks to Ravi Periasmy.
  • fix Produce the timezone that we send to the server in the same format that we can parse. This is important for updatable ResultSets as we must be able to parse the format we produce. (jurka) Thanks to Leon Do.
  • fix Make Large Object handling work when the oid counter has exceeded Integer.MAX_VALUE by handling oids as longs. (jurka)
  • fix Fix persistence of XA datasources. PGObjectFactory wasn't aware of PGXADataSource and can't be because of the requirements for different build versions. Add a new PGXADataSourceFactory to provide this functionality. (jurka) Thanks to Heikki Linnakangas.
  • fix Fix the error message generated by a CallableStatement not getting results that match the registered out parameters to report the correct parameter position. (jurka)
  • fix Interval formatting didn't work for negative seconds values greater than -1. It would format it as -.5, but interval input doesn't accept this, so write it as -0.5 instead. (jurka)
  • fix Change DatabaseMetaData.getSearchStringEscape to always return "\\" instead of "\\\\". Previously it was assuming that it would be fed directly into a query and it needed to escape itself for the backend's input parser. This doesn't work for things like PreparedStatement parameters or DatabaseMetaData methods that take patterns. (jurka) Thanks to Valery Meshkov.
  • fix Allow updatable ResultSets to update arrays. (jurka) Thanks to Vasylenko.
  • fix In an error message reporting an unparseable timestamp value the code was trying to put the unparseable portion into the error message, but used the wrong variable to get the correct length. (jurka)
  • fix Parse timezones that have offsets in seconds. 8.2 servers now return this information so we must be able to handle it. (jurka)

Version 8.1-409 (2007-04-18)

  • add Implement ResultSet.updateArray by simply mapping it to updateObject which now works for arrays. (jurka)
  • fix Statement.getTime, .getDate, and .getTimestamp methods which are passed a Calendar object were rotating the timezone in the wrong direction. Rewrite this code to use the existing TimestampUtils methods to match the working code in ResultSets. (jurka) Thanks to Ravi Periasmy.
  • fix Produce the timezone that we send to the server in the same format that we can parse. This is important for updatable ResultSets as we must be able to parse the format we produce. (jurka) Thanks to Leon Do.
  • fix Fix persistence of XA datasources. PGObjectFactory wasn't aware of PGXADataSource and can't be because of the requirements for different build versions. Add a new PGXADataSourceFactory to provide this functionality. (jurka) Thanks to Heikki Linnakangas.
  • fix Fix the error message generated by a CallableStatement not getting results that match the registered out parameters to report the correct parameter position. (jurka)
  • fix Interval formatting didn't work for negative seconds values greater than -1. It would format it as -.5, but interval input doesn't accept this, so write it as -0.5 instead. (jurka)
  • fix Allow updatable ResultSets to update arrays. (jurka) Thanks to Vasylenko.
  • fix In an error message reporting an unparseable timestamp value the code was trying to put the unparseable portion into the error message, but used the wrong variable to get the correct length. (jurka)

Version 8.0-319 (2007-04-18)

  • add Implement ResultSet.updateArray by simply mapping it to updateObject which now works for arrays. (jurka)
  • fix Produce the timezone that we send to the server in the same format that we can parse. This is important for updatable ResultSets as we must be able to parse the format we produce. (jurka) Thanks to Leon Do.
  • fix Allow updatable ResultSets to update arrays. (jurka) Thanks to Vasylenko.

Version 8.2-504 (2006-12-01)

  • add Make the driver build under the 1.6 JDK. (jurka)
  • add Reduce memory usage when bytea data is retrieved from ResultSet.getBytes by using an extra pass over the data to determine the output buffer size ahead of time. (jurka) Thanks to Luis Vilar Flores.
  • add Improve performance when retrieving large ResultSets consisting of Strings, ints, and longs. Improve String retrieval by avoiding a copy from the network buffer and using it directly to create the String instance. Improve integer retrieval by using a custom byte to number conversion that uses knowledge of the encoding to avoid creating an intermediate String representation first. (jurka) Thanks to Mikko Tiihonen.
  • add Add support for parsing dollar quotes and comments. (jurka) Thanks to Michael Paesold.
  • add Improve the performance of getBoolean for false values by explicitly checking for false rather than generating a NumberFormatException. (jurka) Thanks to Eberhard Schulte.
  • add Make the driver operate correctly when standard_conforming_strings is on. (jurka) Thanks to Michael Paesold.
  • add Allow XAResource.start with TMJOIN in a limited set of circumstances to work with WebLogic. We allow TMJOIN only if the resource was previously ended and the Xid is the same as the current Xid. (jurka) Thanks to Jan de Visser and Heikki Linnakangas.
  • update Italian translation update. (jurka) Thanks to Giuseppe Sacco.
  • update Brazilian Portuguese translation update. (jurka) Thanks to Euler Taveira de Oliveira.
  • fix When issuing multiple queries on one statement the driver was not clearing some intermediate state between executions. When an update, insert, or delete followed a select, the select's results were still available and would be returned instead of the non-query's affected row count. (jurka) Thanks to Gilles Rayrat.
  • fix When the driver asks the server to resolve a type the resolved type is stored in the SimpleQuery object. When the statement is executed again the driver determines whether the existing types match or if it needs to be reprepared by comparing the current Statement's settings with the SimpleQuery. The Statement will have the unspecified oid while the SimpleQuery will have the resolved oid, so there will not be a match and the statement will needlessly be reprepared. Allow an unspecified oid to match any resolved type. (jurka) Thanks to Akira Sato.
  • fix When creating a ResultSet from a refcursor, respect the creating ResultSet's scollability setting. The way the ResultSet is created means that it will always be scrollable anyway, so there's no downside. We cannot support updatable refcursor ResultSets until we get updatable cursors. (jurka)
  • fix Fix a bug in function escape processing. When dealing with an invalid escape the code attempted to read until it hit the escape end and press on, but it forgot to increment its position counter. This lead to an infinite loop that eventually resulted in an out of memory error. (jurka)
  • fix Update the documentation to reflect the fact that the default prepareThreshold is five, not zero. (jurka)
  • fix Improve handling of incorrectly written user code using CallableStatements. Defend against trying to retrieve data before the statement is executed. (jurka)
  • fix Adjust precision returned by meta data methods to reflect the latest javadocs additional documentation. (jurka)
  • fix Correct error message in CallableStatement to identify the mismatch with the registered return type. (jurka)
  • fix Correct escaping of named savepoints which follow identifier, not literal rules. (jurka) Thanks to Michael Paesold.
  • fix XAConnections default autocommit state should be true. The driver was previously setting autocommit to false and assuming it would stay that way. This caused two problems. First, some applications expected to be able to issue local autocommit transactions prior to begin(). Second, some TMs (Geronimo) set the autocommit state to true themselves, which causes problems as the driver did not expect it to be changed. This patch correctly disables and enables autocommit around start, prepare, commit, and rollback methods. (jurka) Thanks to Allan Saddi.

Version 8.1-408 (2006-12-01)

  • update Italian translation update. (jurka) Thanks to Giuseppe Sacco.
  • update Brazilian Portuguese translation update. (jurka) Thanks to Euler Taveira de Oliveira.
  • fix When issuing multiple queries on one statement the driver was not clearing some intermediate state between executions. When an update, insert, or delete followed a select, the select's results were still available and would be returned instead of the non-query's affected row count. (jurka) Thanks to Gilles Rayrat.
  • fix When the driver asks the server to resolve a type the resolved type is stored in the SimpleQuery object. When the statement is executed again the driver determines whether the existing types match or if it needs to be reprepared by comparing the current Statement's settings with the SimpleQuery. The Statement will have the unspecified oid while the SimpleQuery will have the resolved oid, so there will not be a match and the statement will needlessly be reprepared. Allow an unspecified oid to match any resolved type. (jurka) Thanks to Akira Sato.
  • fix When creating a ResultSet from a refcursor, respect the creating ResultSet's scollability setting. The way the ResultSet is created means that it will always be scrollable anyway, so there's no downside. We cannot support updatable refcursor ResultSets until we get updatable cursors. (jurka)
  • fix Fix a bug in function escape processing. When dealing with an invalid escape the code attempted to read until it hit the escape end and press on, but it forgot to increment its position counter. This lead to an infinite loop that eventually resulted in an out of memory error. (jurka)
  • fix Update the documentation to reflect the fact that the default prepareThreshold is five, not zero. (jurka)
  • fix Correct error message in CallableStatement to identify the mismatch with the registered return type. (jurka)
  • fix Correct escaping of named savepoints which follow identifier, not literal rules. (jurka) Thanks to Michael Paesold.

Version 8.0-318 (2006-12-01)

  • update Brazilian Portuguese translation update. (jurka) Thanks to Euler Taveira de Oliveira.
  • fix When issuing multiple queries on one statement the driver was not clearing some intermediate state between executions. When an update, insert, or delete followed a select, the select's results were still available and would be returned instead of the non-query's affected row count. (jurka) Thanks to Gilles Rayrat.
  • fix When the driver asks the server to resolve a type the resolved type is stored in the SimpleQuery object. When the statement is executed again the driver determines whether the existing types match or if it needs to be reprepared by comparing the current Statement's settings with the SimpleQuery. The Statement will have the unspecified oid while the SimpleQuery will have the resolved oid, so there will not be a match and the statement will needlessly be reprepared. Allow an unspecified oid to match any resolved type. (jurka) Thanks to Akira Sato.
  • fix When creating a ResultSet from a refcursor, respect the creating ResultSet's scollability setting. The way the ResultSet is created means that it will always be scrollable anyway, so there's no downside. We cannot support updatable refcursor ResultSets until we get updatable cursors. (jurka)
  • fix Fix a bug in function escape processing. When dealing with an invalid escape the code attempted to read until it hit the escape end and press on, but it forgot to increment its position counter. This lead to an infinite loop that eventually resulted in an out of memory error. (jurka)
  • fix Update the documentation to reflect the fact that the default prepareThreshold is five, not zero. (jurka)
  • fix Correct escaping of named savepoints which follow identifier, not literal rules. (jurka) Thanks to Michael Paesold.

Version 8.2-dev503 (2006-05-23)

  • update Remove documentation's claim that we don't support functions with out parameters. (jurka)
  • update Updated German translation. (jurka) Thanks to Andre Bialojahn.
  • fix Using callable statements against older server versions (7.4 or 8.0) did not work because of recent changes to output parameter handling. 7.4 and 8.0 do not support function output parameters, but they still must support the functions return value. Every function must have either a return value or an output parameter so we force the minimum output parameter count to one. (jurka)

Version 8.1-407 (2006-05-23)

  • update Remove documentation's claim that we don't support functions with out parameters. (jurka)
  • update Updated German translation. (jurka) Thanks to Andre Bialojahn.
  • fix Using callable statements against older server versions (7.4 or 8.0) did not work because of recent changes to output parameter handling. 7.4 and 8.0 do not support function output parameters, but they still must support the functions return value. Every function must have either a return value or an output parameter so we force the minimum output parameter count to one. (jurka)
  • fix When running against a 8.1+ server with protocol version 2 we cannot handle output parameters and can only handle the traditional function return value. (jurka)

Version 8.0-317 (2006-05-23)

  • fix A bad merge of out of memory detection and zero testing resulted in incorrectly handing of null values. (jurka) Thanks to Glenn Holmer.

Version 8.2-dev502 (2006-05-22)

  • add Add a protocolVersion parameter to the test suite runner. This allows testing the V2 protocol path on newer server versions. Also fix tests that were incorrectly using the server version for protocol version dependent results. To give it a try, just add protocolVersion=2 to your build.local.properties. (jurka)
  • add Add escape sequences for timestamp addition and difference. (davec) Thanks to Xavier Poinsard.
  • update Updated German transalation. (jurka) Thanks to Andre Bialojahn.
  • fix Fix a couple of bugs in CallableStatement outputs. An oversight in the checking of actual results vs. what the caller specified for registerOutParameter was checking all register parameters against the first out parameter, not the parameter it actually corresponded with. Also with a function that has an in parameter and an out parameter, the out parameter will be registered at position 2, but will be returned in a result at position 1 because the first input parameter generates no output. The driver needs to correctly map between these two parameter offsets. (davec) Thanks to Luis Londono.
  • fix Error messages were not run through MessageFormat if it didn't have any parameters. This was a problem because all error messages are written expecting to be run through the formatter and use two single quotes when only one is desired in the output. Without being run through the formatter the two quotes appeared in the output. (jurka) Thanks to Giuseppe Sacco.
  • fix Add some more synchronization to the TypeInfoCache. We need synchronization around the PreparedStatements because they may not be used by two threads at the same time. Additional synchronization is applied to the maps to ensure that they are in sync with each other. Make _pgNameToSQLType static. (jurka) Thanks to Till Toenges.
  • fix An OutOfMemoryError during fe<->be communication leaves the protocol in an unknown state. This prevents the caller from even closing the connection. Checking every allocation is a lot of work, but the most likely error location is going to be when receiving large result sets. Put in checks around receiving row data to detect memory exhaustion, keep the protocol in a known state, and report the failure back to the user. (jurka) Thanks to David Blasby.
  • fix When we're unable to parse a timestamp value, the error message should print out the bad value. It was printing a char array which showed up as a useless [C@xxxx. (jurka) Thanks to Oliver Jowett.
  • fix gij/gcj has some JDK1.5 classes in it, but it only supports JDK1.4 as the default source level. This confuses older ant versions and our build script tries to compile a JDK1.5 version. Instead of letting ant detect the java version, let the jvm tell us that itself using java.specification.version as suggested by Heikki Linnakangas. Also put in a check for a JDK1.6 compile attempt and bail out with an explanatory unsupported error message instead of just failing at some random point. (jurka)
  • fix When a prepared statement uses different parameter types than what the statement was originally prepared for, the driver must replan the query for the new types. When doing this in batches the driver was not correctly freeing old plans. To cleanup prepared statements the driver records a reference to a query object in response to the ParseComplete message. The problem in this case was that since the driver sends multiple Parse messages before a Sync, when the driver receives the first ParseComplete message the query object now contains a reference to the latest parsed statement, not the first. So it was only cleaning up the last parsed statement not all of them. (jurka) Thanks to Peter Eisentraut.
  • fix When the Connection retrieved from XAConnection.getConnection() is closed we do not want to rollback the transaction because the underlying connection is not closed and the transaction is being managed by the XAResource, not the Connection. (jurka) Thanks to Niels Beekman.

Version 8.1-406 (2006-05-22)

  • update Updated German transalation. (jurka) Thanks to Andre Bialojahn.
  • fix Fix a couple of bugs in CallableStatement outputs. An oversight in the checking of actual results vs. what the caller specified for registerOutParameter was checking all register parameters against the first out parameter, not the parameter it actually corresponded with. Also with a function that has an in parameter and an out parameter, the out parameter will be registered at position 2, but will be returned in a result at position 1 because the first input parameter generates no output. The driver needs to correctly map between these two parameter offsets. (davec) Thanks to Luis Londono.
  • fix Error messages were not run through MessageFormat if it didn't have any parameters. This was a problem because all error messages are written expecting to be run through the formatter and use two single quotes when only one is desired in the output. Without being run through the formatter the two quotes appeared in the output. (jurka) Thanks to Giuseppe Sacco.
  • fix Add some more synchronization to the TypeInfoCache. We need synchronization around the PreparedStatements because they may not be used by two threads at the same time. Additional synchronization is applied to the maps to ensure that they are in sync with each other. Make _pgNameToSQLType static. (jurka) Thanks to Till Toenges.
  • fix An OutOfMemoryError during fe<->be communication leaves the protocol in an unknown state. This prevents the caller from even closing the connection. Checking every allocation is a lot of work, but the most likely error location is going to be when receiving large result sets. Put in checks around receiving row data to detect memory exhaustion, keep the protocol in a known state, and report the failure back to the user. (jurka) Thanks to David Blasby.
  • fix When we're unable to parse a timestamp value, the error message should print out the bad value. It was printing a char array which showed up as a useless [C@xxxx. (jurka) Thanks to Oliver Jowett.
  • fix gij/gcj has some JDK1.5 classes in it, but it only supports JDK1.4 as the default source level. This confuses older ant versions and our build script tries to compile a JDK1.5 version. Instead of letting ant detect the java version, let the jvm tell us that itself using java.specification.version as suggested by Heikki Linnakangas. Also put in a check for a JDK1.6 compile attempt and bail out with an explanatory unsupported error message instead of just failing at some random point. (jurka)
  • fix When a prepared statement uses different parameter types than what the statement was originally prepared for, the driver must replan the query for the new types. When doing this in batches the driver was not correctly freeing old plans. To cleanup prepared statements the driver records a reference to a query object in response to the ParseComplete message. The problem in this case was that since the driver sends multiple Parse messages before a Sync, when the driver receives the first ParseComplete message the query object now contains a reference to the latest parsed statement, not the first. So it was only cleaning up the last parsed statement not all of them. (jurka) Thanks to Peter Eisentraut.
  • fix When the Connection retrieved from XAConnection.getConnection() is closed we do not want to rollback the transaction because the underlying connection is not closed and the transaction is being managed by the XAResource, not the Connection. (jurka) Thanks to Niels Beekman.

Version 8.0-316 (2006-05-22)

  • fix Error messages were not run through MessageFormat if it didn't have any parameters. This was a problem because all error messages are written expecting to be run through the formatter and use two single quotes when only one is desired in the output. Without being run through the formatter the two quotes appeared in the output. (jurka) Thanks to Giuseppe Sacco.
  • fix An OutOfMemoryError during fe<->be communication leaves the protocol in an unknown state. This prevents the caller from even closing the connection. Checking every allocation is a lot of work, but the most likely error location is going to be when receiving large result sets. Put in checks around receiving row data to detect memory exhaustion, keep the protocol in a known state, and report the failure back to the user. (jurka) Thanks to David Blasby.
  • fix gij/gcj has some JDK1.5 classes in it, but it only supports JDK1.4 as the default source level. This confuses older ant versions and our build script tries to compile a JDK1.5 version. Instead of letting ant detect the java version, let the jvm tell us that itself using java.specification.version as suggested by Heikki Linnakangas. Also put in a check for a JDK1.6 compile attempt and bail out with an explanatory unsupported error message instead of just failing at some random point. (jurka)
  • fix When a prepared statement uses different parameter types than what the statement was originally prepared for, the driver must replan the query for the new types. When doing this in batches the driver was not correctly freeing old plans. To cleanup prepared statements the driver records a reference to a query object in response to the ParseComplete message. The problem in this case was that since the driver sends multiple Parse messages before a Sync, when the driver receives the first ParseComplete message the query object now contains a reference to the latest parsed statement, not the first. So it was only cleaning up the last parsed statement not all of them. (jurka) Thanks to Peter Eisentraut.

Version 8.2-dev501 (2006-02-09)

  • add Unify type metadata functions in TypeInfoCache. Previously ResultSetMetaData and DatabaseMetaData had their own inconsistent versions of these. Do not use pg_type.typlen when calculating display sizes. The backend storage size is unlikely to relate to the textual display size of a datatype. Add information for some more types interval, bit, varbit and do some recalculation of the display sizes for numeric, time, and timestamp datetypes. (jurka)
  • add Update getObject and getArray methods that take a map to only bail out with a not implemented exception if the supplied map is not null and not empty. Apparently Sun's WebRowSet implementation passes empty Maps to these methods. (jurka) Thanks to Gunnar Stefansson.
  • update Remove the length argument from Field constructor for manually created Fields. The length was inconsistently and incorrectly used and it is of little to us, so don't clutter things up by requiring one. (jurka)
  • update Italian translation updates. (jurka) Thanks to Giuseppe Sacco.
  • update Brazilian Portuguese translation updates. (jurka) Thanks to Euler Taveira de Oliveira.
  • fix Statement.cancel was prone to race conditions even with a single threaded client. It would fire off a cancel message without waiting for an acknowledgement of its success. This resulted in future queries being cancelled when the cancel message was received by the backend. Ensure we get an EOF from the server before returning from the cancel call. This still does nothing about multi-threaded race conditions. (jurka) Thanks to Oliver Jowett.
  • fix Fix the parameter indexing on CallableStatements that do not return any parameters. (davec)
  • fix The V2 protocol wasn't correctly handling EmptyQuery messages. It expected a four byte message length after the EmptyQuery message, but there is only a single null byte sent by the backend. (jurka)
  • fix When performing replace processing we must continue processing until we hit the end of a user supplied query, not just once we've detected the end of a valid query. Consider the example: SELECT a FROM t WHERE (1>0)) ORDER BY a; We must send the whole query to the backend, not just the section before the last closing parenthesis. (jurka) Thanks to Senden Kris.
  • fix escapeQuotes() in DatabaseMetaData was not correctly handling backslashes which would result in incorrect searches and has the potential for a SQL injection attack. (jurka) Thanks to Paolo Predonzani.
  • fix The TypeInfoCache had a static Map for the pg type name to java.sql.Types conversion, but it was being reinitialized for each new Connection. Even though its content is static make this an instance variable for simplicity. (jurka) Thanks to Till Toenges.

Version 8.1-405 (2006-02-09)

  • add Update getObject and getArray methods that take a map to only bail out with a not implemented exception if the supplied map is not null and not empty. Apparently Sun's WebRowSet implementation passes empty Maps to these methods. (jurka) Thanks to Gunnar Stefansson.
  • update Italian translation updates. (jurka) Thanks to Giuseppe Sacco.
  • update Brazilian Portuguese translation updates. (jurka) Thanks to Euler Taveira de Oliveira.
  • fix Correct the display size calculations for numeric data. Don't add precision and scale because scale is just a subset of precision. (jurka)
  • fix DatabaseMetaData.getTables should return all table type if passed null as for the types array. It was previously returning only those tables that psql's \d command would for a null type filter. (jurka) Thanks to Thomas Kellerer.
  • fix Statement.cancel was prone to race conditions even with a single threaded client. It would fire off a cancel message without waiting for an acknowledgement of its success. This resulted in future queries being cancelled when the cancel message was received by the backend. Ensure we get an EOF from the server before returning from the cancel call. This still does nothing about multi-threaded race conditions. (jurka) Thanks to Oliver Jowett.
  • fix Fix the parameter indexing on CallableStatements that do not return any parameters. (davec)
  • fix The V2 protocol wasn't correctly handling EmptyQuery messages. It expected a four byte message length after the EmptyQuery message, but there is only a single null byte sent by the backend. (jurka)
  • fix When performing replace processing we must continue processing until we hit the end of a user supplied query, not just once we've detected the end of a valid query. Consider the example: SELECT a FROM t WHERE (1>0)) ORDER BY a; We must send the whole query to the backend, not just the section before the last closing parenthesis. (jurka) Thanks to Senden Kris.
  • fix escapeQuotes() in DatabaseMetaData was not correctly handling backslashes which would result in incorrect searches and has the potential for a SQL injection attack. (jurka) Thanks to Paolo Predonzani.
  • fix The TypeInfoCache had a static Map for the pg type name to java.sql.Types conversion, but it was being reinitialized for each new Connection. Even though its content is static make this an instance variable for simplicity. (jurka) Thanks to Till Toenges.

Version 8.0-315 (2006-02-09)

  • add Update getObject and getArray methods that take a map to only bail out with a not implemented exception if the supplied map is not null and not empty. Apparently Sun's WebRowSet implementation passes empty Maps to these methods. (jurka) Thanks to Gunnar Stefansson.
  • update Brazilian Portuguese translation updates. (jurka) Thanks to Euler Taveira de Oliveira.
  • fix Correct the display size calculations for numeric data. Don't add precision and scale because scale is just a subset of precision. (jurka)
  • fix DatabaseMetaData.getTables should return all table type if passed null as for the types array. It was previously returning only those tables that psql's \d command would for a null type filter. (jurka) Thanks to Thomas Kellerer.
  • fix Statement.cancel was prone to race conditions even with a single threaded client. It would fire off a cancel message without waiting for an acknowledgement of its success. This resulted in future queries being cancelled when the cancel message was received by the backend. Ensure we get an EOF from the server before returning from the cancel call. This still does nothing about multi-threaded race conditions. (jurka) Thanks to Oliver Jowett.
  • fix The V2 protocol wasn't correctly handling EmptyQuery messages. It expected a four byte message length after the EmptyQuery message, but there is only a single null byte sent by the backend. (jurka)
  • fix When performing replace processing we must continue processing until we hit the end of a user supplied query, not just once we've detected the end of a valid query. Consider the example: SELECT a FROM t WHERE (1>0)) ORDER BY a; We must send the whole query to the backend, not just the section before the last closing parenthesis. (jurka) Thanks to Senden Kris.
  • fix escapeQuotes() in DatabaseMetaData was not correctly handling backslashes which would result in incorrect searches and has the potential for a SQL injection attack. (jurka) Thanks to Paolo Predonzani.

Version 8.2-dev500 (2005-11-29)

  • add Add a URL parameter to enable logging of Connections which are finalized, but not closed. This will help people debug leaks. (jurka) Thanks to rupa.
  • add Add a new parameter 'stringtype' (values 'varchar' or 'unspecified') to control how parameters set via setString() are bound. Fix V3 parameter logic so that prepared statements are not reused when a non-NULL UNSPECIFIED parameter is set over the top of a previous parameter. (oliver)
  • update Strip out call tracing debugging from DatabaseMetaData -- it is only half there, and it isn't really much use for debugging the driver. There are better approaches for tracing application calls into the driver, e.g. JTrace. Update comments. Update what the metadata claims in a couple of places: getMaxStatements() returns 0 -- we are only limited by heap size, not by e.g. a hard limit on the number of simultaneous statements on the DB side - supportsMultipleResultSets() returns true -- we support multiple results from execute(), e.g. multiple SELECT statements in one query. (oliver)
  • update Debug logging overhaul: Support for setting loglevel when running tests. Tests log to a separate file to avoid making ant run out of heap. Misc test tweaks to play nicely with logging. Add a Logger class that handles logging a per-connection ID and timestamp on each log line. There is one Logger instance per Connection, and one for the Driver itself. Rearrange per-connection initialization of log levels so it only affects logging on that one particular connection. Default log levels are taken from whatever is specified in the defaults property file, or the current driver-wide loglevel if no default is present. The driver-wide log level is also take from the default property file unless explicitly overridden by Driver.setLogLevel(). (oliver)
  • update Break most of AbstractJdbc2ResultSet.findColumn out into a separate findColumnIndex() method that does not throw if the column isn't found. Use that method directly in isUpdateable() when looking for the OID column to avoid creating/throwing/catching/discarding an exception unnecessarily. Clean up redundant try/catch and unnecessary nesting in updateRow(). (oliver) Thanks to Kevin Grittner.
  • fix Adjust ResultSetMetaData.getColumnDisplaySize to return Integer.MAX_VALUE instead of -1 for variable length fields. (jurka)
  • fix Correct the display size calculations for numeric data. Don't add precision and scale because scale is just a subset of precision. (jurka)
  • fix DatabaseMetaData.getTables should return all table type if passed null as for the types array. It was previously returning only those tables that psql's \d command would for a null type filter. (jurka) Thanks to Thomas Kellerer.

Version 8.1-404 (2005-11-06)

  • update Brazilian Portuguese translation updates. (jurka) Thanks to Euler Taveira de Oliveira.
  • update Turkish translation updates. (jurka) Thanks to Nicolai Tufar.
  • fix When formatting an interval value as text, override the system locale settings for DecimalFormat. We always want to use '.' as the decimal separator regardless of locale because that's what the server expects. (jurka)
  • fix When I added bounds checking for ResultSet.updateXXX methods, I accidentally removed bounds checking for getXXX methods. This resulted in an ArrayIndexOutOfBoundsException being thrown instead of the desired SQLException. (jurka)
  • fix The driver needs to break a statement into individual queries to use the V3 extended query protocol. The parsing code did not recognize multiple rule actions separated by semi-colons as one query. (jurka) Thanks to Jolly Chen.

Version 8.0-314 (2005-11-06)

  • fix When I added bounds checking for ResultSet.updateXXX methods, I accidentally removed bounds checking for getXXX methods. This resulted in an ArrayIndexOutOfBoundsException being thrown instead of the desired SQLException. (jurka)
  • fix The driver needs to break a statement into individual queries to use the V3 extended query protocol. The parsing code did not recognize multiple rule actions separated by semi-colons as one query. (jurka) Thanks to Jolly Chen.

Version 8.1-dev403 (2005-10-30)

  • add XADataSource implementation. (davec) Thanks to Heikki Linnakangas.
  • update Improve performance of locating placeholders in queries. (davec) Thanks to Sergei Rogovskiy.
  • update Improve performance of timestamp and currency parsing. (davec) Thanks to Ken Geis.
  • update French translation updates. (jurka) Thanks to Xavier Poinsard.

Version 404 (2005-11-06)

  • update Brazilian Portuguese translation updates. (jurka) Thanks to Euler Taveira de Oliveira.
  • update Turkish translation updates. (jurka) Thanks to Nicolai Tufar.
  • fix When formatting an interval value as text, override the system locale settings for DecimalFormat. We always want to use '.' as the decimal separator regardless of locale because that's what the server expects. (jurka)
  • fix When I added bounds checking for ResultSet.updateXXX methods, I accidentally removed bounds checking for getXXX methods. This resulted in an ArrayIndexOutOfBoundsException being thrown instead of the desired SQLException. (jurka)
  • fix The driver needs to break a statement into individual queries to use the V3 extended query protocol. The parsing code did not recognize multiple rule actions separated by semi-colons as one query. (jurka) Thanks to Jolly Chen.

Version 314 (2005-11-06)

  • fix When I added bounds checking for ResultSet.updateXXX methods, I accidentally removed bounds checking for getXXX methods. This resulted in an ArrayIndexOutOfBoundsException being thrown instead of the desired SQLException. (jurka)
  • fix The driver needs to break a statement into individual queries to use the V3 extended query protocol. The parsing code did not recognize multiple rule actions separated by semi-colons as one query. (jurka) Thanks to Jolly Chen.

Version 8.1-dev403 (2005-10-30)

  • add XADataSource implementation. (davec) Thanks to Heikki Linnakangas.
  • update Improve performance of locating placeholders in queries. (davec) Thanks to Sergei Rogovskiy.
  • update Improve performance of timestamp and currency parsing. (davec) Thanks to Ken Geis.
  • update French translation updates. (jurka) Thanks to Xavier Poinsard.

Version 8.1-dev402 (2005-10-04)

  • add Initial Czech translation. (jurka) Thanks to Petr Dittrich.
  • add Add the Detail: field to the default error message string. This is often includes valuable information that shouldn't require adjusting the loglevel to receive. (jurka)
  • fix Fix a multitude of timestamp, timezone, and Calendar problems resulting from the mismatch of Java's Timestamp object and the SQL specs timestamp with and without time zone datatypes. (oliver)
  • fix getWarnings() should throw a SQLException if called on a closed Statement. (jurka)
  • fix Make callable statements work again for JDK 1.5 builds. Any code in the jdbc3/Jdbc3 classes also needs to get into the corresponding jdbc3g/Jdbc3g class. (jurka)
  • fix Every execution of a Statement clears the warning chain from the previous execution. This was causing a memory leak by endlessly chaining warnings together that should have been discarded. (jurka) Thanks to Albe Laurenz.
  • fix Fix updateRow() involving Date, Time, or Timestamp. (oliver)
  • fix Remove direct manipulation of org.postgresql.Driver.logDebug in tests for no apparent reason. (jurka)
  • fix Adjust DatabaseMetaData.getCatalogs to only return the current connection's catalog. PG doesn't support multiple catalogs on a single connection and making this information available only confuses people and applications. Per discussion of Jan 2004. (jurka)
  • fix Map setObject calls for Types.BLOB, CLOB, and ARRAY to call the related setXXX method if we don't need to do any conversion. (jurka) Thanks to Marc Herbert.
  • fix 8.1 servers store interval day and hour information separately, so we have to be prepared for more than two digits worth of hour data. Also pre-7.4 servers do not return second information if it is zero, so we cannot parse this field unless it is actually there. (jurka) Thanks to Jean-Pierre Pelletier.
  • fix Add checks to prevent ResultSet.updateXXX methods from throwing an ArrayIndexOutOfBoundsException. We should only throw SQLExceptions from here. (jurka)
  • fix ResultSet.getObject().getClass().getName() should match up with ResultSetMetaData.getColumnClassName(). This wasn't true for the java.sql.Types.SMALLINT case. (jurka) Thanks to Karl von Randow.
  • fix Make setObject(int, Object) aware of the Blob, Clob, and Array types when trying to infer the incoming object type. (jurka) Thanks to Marc Herbert.

Version 8.0-313 (2005-10-04)

  • add Initial Czech translation. (jurka) Thanks to Petr Dittrich.
  • fix Every execution of a Statement clears the warning chain from the previous execution. This was causing a memory leak by endlessly chaining warnings together that should have been discarded. (jurka) Thanks to Albe Laurenz.
  • fix Map setObject calls for Types.BLOB, CLOB, and ARRAY to call the related setXXX method if we don't need to do any conversion. (jurka) Thanks to Marc Herbert.
  • fix Add checks to prevent ResultSet.updateXXX methods from throwing an ArrayIndexOutOfBoundsException. We should only throw SQLExceptions from here. (jurka)
  • fix ResultSet.getObject().getClass().getName() should match up with ResultSetMetaData.getColumnClassName(). This wasn't true for the java.sql.Types.SMALLINT case. (jurka) Thanks to Karl von Randow.
  • fix Make setObject(int, Object) aware of the Blob, Clob, and Array types when trying to infer the incoming object type. (jurka) Thanks to Marc Herbert.

Version 8.1-dev401 (2005-07-24)

  • add Support asynchronous notifications by looking for pending messages when getNotifications() is called. Doesn't always pick up on them (it depends if the underlying socket input stream implements available()) but it's better than the status quo. (oliver) Thanks to Andras Kadinger.
  • add Make PGInterval useful instead of just a placeholder by providing access to the individual fields. (jurka) Thanks to Oliver Siegmar.
  • add Simplified Chineses translation. (jurka) Thanks to Weiping.
  • add Move the custom UTF-8 decoder into a subclass of Encoding. Add support to the UTF-8 decoder for Unicode code points above U+FFFF represented as a surrogate pair in Java). These values can be generated by the backend from 8.1. The reverse path is already handled by the JVM's own UTF-8 encoder. Add a number of unicode encode/decode tests to make sure it's all working. (oliver)
  • add Modifications to pass JDBC CTS. Added test cases which are essentially the same as the CTS to make sure we continue to pass it. (davec)
  • update Brazilian translation updates. (jurka) Thanks to Euler Taveira de Oliveira.
  • update Polish translation updates. (jurka) Thanks to Jaroslaw Pyszny.
  • update Update comments for getExtraNameCharacters to describe why we can't list all the possible valid ones. (jurka)
  • update Italian translation updates. (jurka) Thanks to Giuseppe Sacco.
  • fix Fixed problem with calendar being modified in setDate, setTimestamp. (davec)
  • fix Improve null handling. Allow setNull(1, Types.XXX) for ARRAY, NULL, DISTINCT, and STRUCT by mapping them to the unknown oid. Make setArray, setBlob, setClob, and setCharacterStream accept null parameters. (jurka)
  • fix In 8.1 index_max_keys != func_max_args which broke the code for determining index_max_keys and retreiving foreign key information. Use the GUC variable max_index_keys and pg_catalog.generate_series instead of inspecting typlens and using information_schema._pg_keypositions. (jurka)
  • fix Allow jdbc2-optional and jdbc3 test suites to be run on their own (with a suitably adjusted build.xml). They depended on the jdbc2 tests being run to load the driver for them. (jurka)
  • fix In Blob.getBytes(long position, int length) position is an offset starting at 1, not zero as the driver was previously doing. (jurka) Thanks to Emmanuel Bernard.
  • fix Add a test case to detect if we modify a passed in Calendar object to things like PreparedStatement.setTimestamp. This shows the fix for setDate had an error and that the corresponding ResultSet.get methods had the same problems. (jurka)
  • fix Remove redundant javadoc comments (getter/setter methods don't need @param @return tags). Many of which caused warnings because of mismatches between @param and the actual parameter name. (jurka)
  • fix Added conversions for cts tests. (davec)
  • fix Java message format strings need to double 's. (jurka)
  • fix Fix ResultSet.getObject(..., Types.SMALLINT) to return an Integer per the JDBC3 typemapping appendix. Add support for several more types to ResultSet.getObject: BOOLEAN, TINYINT, DECIMAL, LONGVARCHAR, LONGVARBINARY, CLOB, BLOB. (oliver) Thanks to Kevin Grittner.
  • fix CallableStatmentTest.getShort will only work with v3 protocol exposed the protocol version to AbstractJdbc2Connection, utility method in TestUtil to enable/disable tests based on protocol version. (davec)
  • fix Check the pg_input buffer, as well as the socket itself, when looking for pending async notifies -- otherwise we only report the first of a batch of notifies until more data comes along. (oliver)

Version 8.0-312 (2005-07-24)

  • add Simplified Chineses translation. (jurka) Thanks to Weiping.
  • update Brazilian translation updates. (jurka) Thanks to Euler Taveira de Oliveira.
  • update Polish translation updates. (jurka) Thanks to Jaroslaw Pyszny.
  • update Italian translation updates. (jurka) Thanks to Giuseppe Sacco.
  • fix Improve null handling. Allow setNull(1, Types.XXX) for ARRAY, NULL, DISTINCT, and STRUCT by mapping them to the unknown oid. Make setArray, setBlob, setClob, and setCharacterStream accept null parameters. (jurka)
  • fix In Blob.getBytes(long position, int length) position is an offset starting at 1, not zero as the driver was previously doing. (jurka) Thanks to Emmanuel Bernard.
  • fix Add a test case to detect if we modify a passed in Calendar object to things like PreparedStatement.setTimestamp. This shows the fix for setDate had an error and that the corresponding ResultSet.get methods had the same problems. (jurka)
  • fix Fix ResultSet.getObject(..., Types.SMALLINT) to return an Integer per the JDBC3 typemapping appendix. Add support for several more types to ResultSet.getObject: BOOLEAN, TINYINT, DECIMAL, LONGVARCHAR, LONGVARBINARY, CLOB, BLOB. (oliver) Thanks to Kevin Grittner.
  • fix Java message format strings need to double 's. (jurka)
  • fix CallableStatmentTest.getShort will only work with v3 protocol exposed the protocol version to AbstractJdbc2Connection, utility method in TestUtil to enable/disable tests based on protocol version. (davec)

Version 8.1-dev400 (2005-04-10)

  • add Implement basic login timeout support via a 'loginTimeout' URL parameter. (oliver)
  • add Add method names to the not implemented exception to allow unhelpful client programs that don't provide a stacktrace to be debugged. (jurka) Thanks to Xavier Poinsard.
  • add Get DatabaseMetaData.getIndexInfo to return useful data for functional indexes. Return the expression used for the column name. (jurka) Thanks to Peter Royal.
  • add Implement JDBC 3 Blob methods to allow writing. (jurka) Thanks to Michael Barker.
  • add Make all the fields of a server error message available. (jurka)
  • add Put all type info handling into a separate file. This links oids, pg type names, sql types, and java class names together. Use this information to implement ParameterMetaData's getParameterClassName. (jurka)
  • fix SQLWarning.getMessage wasn't reporting the message from a Notice message in the V3 protocol. Make the V2 and V3 cases return a consistent message and add a test. (jurka)
  • fix Restore the ability for the JDBC driver to map infinite timestamp values by using special constants in PGStatement. The original implementation was removed for being arbitrary and unidirectional. (jurka) Thanks to Oliver Siegmar.
  • fix Support setNull(x, Types.BLOB) and CLOB, reported by Tore Halset. (jurka) Thanks to Tore Halset.
  • fix Avoid generating garbage byte[0] objects that we immediately discard in ReceiveTupleV2 / ReceiveTupleV3. Also some minor rearrangements to avoid an unnecessary assignment in the null case. This gives a small performance improvement. (oliver) Thanks to Ken Geis.
  • fix When moveToCurrentRow is called and the current row is off the end of the ResultSet we can't try to load that row because it doesn't exist and will throw an Exception. (jurka) Thanks to Prasanth.

Version 8.0-311 (2005-04-10)

  • add Add method names to the not implemented exception to allow unhelpful client programs that don't provide a stacktrace to be debugged. (jurka) Thanks to Xavier Poinsard.
  • fix SQLWarning.getMessage wasn't reporting the message from a Notice message in the V3 protocol. Make the V2 and V3 cases return a consistent message and add a test. (jurka)
  • fix Restore the ability for the JDBC driver to map infinite timestamp values by using special constants in PGStatement. The original implementation was removed for being arbitrary and unidirectional. (jurka) Thanks to Oliver Siegmar.
  • fix Support setNull(x, Types.BLOB) and CLOB, reported by Tore Halset. (jurka) Thanks to Tore Halset.
  • fix When moveToCurrentRow is called and the current row is off the end of the ResultSet we can't try to load that row because it doesn't exist and will throw an Exception. (jurka) Thanks to Prasanth.
  • fix Ensure PSQLWarning is Serializable. (jurka)

Version 8.0-310 (2005-02-02)

  • add Implement Connection.nativeSQL. (jurka) Thanks to Xavier Poinsard.
  • add Document JDBC escape sequences. (jurka) Thanks to Xavier Poinsard.
  • add Add basic support for JDBC escape for escape char in LIKE string comparisons. (jurka) Thanks to Xavier Poinsard.
  • add Implement the Describe Statement protocol message. Reallow untyped nulls and get the backend to resolve the type for us (if necessary). Also use this message and a new non-executing query execution to implement PreparedStatement.getMetaData() for an unexecuted statement and PreparedStatement.getParameterMetaData(). (jurka)
  • update Name documentation files after there id attributes, not chapter and section numbers, so if people link to them and we reorganize things they have a better change of pointing to the right place. (jurka)
  • fix Bugfixes and tests for two date-related bugs: The jdbc escaped scalar function dayofweek should return values between 1 and 7 (1 for sunday) unlike the backend "extract dow" function which is zero-based. The literal escaped values for date/time/timestamp were not explicitly casted which causes some problems. For example: extract( dow from '2005-01-17 12:00:00') (oliver) Thanks to Xavier Poinsard.
  • fix When locating driver configuration resources, if getClass().getClassLoader() returns null (i.e. the driver was loaded via the bootstrap classloader) then try the system classloader instead. Load driver configuration in a privileged block, in case there is a lower- privilege caller that does not have read access to the driver's jar. (oliver)
  • fix Fix the PGInterval(String) ctor to correctly set the object's postgresql type. (oliver) Thanks to Jean-Pierre Pelletier.
  • fix Don't map the escaped difference function to levenshtein because that's not the same thing. (jurka)
  • fix Bugfix and testcase for NPE when using an updateable resultset obtained from a PreparedStatement on a v3 connection. (oliver) Thanks to Martin Keller.
  • fix Reject attempts to update a CONCUR_READ_ONLY resultset. Test fixes and testcase for this. (oliver)
  • fix Correctly handle changes in parameter types when using server prepared statements, by freeing the old statement and repreparin with the new types. Previously, if a statement was prepared with one set of types and then reused with a different set of types, the driver wouldn't notice and would continue to (try to) use the original prepared statement. (oliver)
  • fix Reenable the refcursor unit test and make it pass. Add a test and update the documentation to reflect that refcursor ResultSets do have working MetaData (at least with the V3 protocol). (jurka)

Version 8.0-309 (2005-01-17)

  • add Initial French translation. (jurka) Thanks to Xavier Poinsard.
  • add Initial German translation. (jurka) Thanks to Andre Bialojahn.
  • add Implement holdable ResultSet support by simply avoiding the use of cursors and fetching all data at once. (jurka)
  • add Implementation of standard escaped functions ( {fn func()} ) by rewriting to existing PostgreSQL functions. (jurka) Thanks to Xavier Poinsard.
  • add Implement CallableStatement.getArray. (jurka)
  • add Add a chapter on SSL configuration to the documentation. (jurka)
  • update Updated Turkish translation. (jurka) Thanks to Nicolai Tufar.
  • update Updated Chinese translation. (jurka) Thanks to Zhenbang Wei.
  • update Updated Russian translation. (jurka) Thanks to Serguei Mokhov.
  • update Updated Brazilian Portuguese translation. (jurka) Thanks to Euler Taveira de Oliveira.
  • update Updated French translation. (jurka) Thanks to Guillame Cottenceau.
  • update Reduce number of messages to translate by parameterizing common error messages. (jurka) Thanks to Xavier Poinsard.
  • update Rename PGConnectionPool to PGConnectionPoolDataSource to try and better identify it as not actually being a connection pool. Update the documentation to point to the new common org.postgresql.ds classes instead of separate jdbc2/jdbc3 implementations. (jurka)
  • update Update copyright year to 2005. (jurka)
  • update Change default autocommit of our CPDS implementation to on, to be consistent with normal connections. (oliver)
  • update Bail out with a helpful error message if we cannot build or run the test suite because of missing dependencies, junit or ant's junit task. (jurka)
  • fix Fix warnings on javadoc because the comments were attached to fields instead of functions. (jurka)
  • fix Adjust DatabaseMetaData to acknowledge that 8.0 supports savepoints. (jurka)
  • fix Change error message to reflect the driverconfig.properties file name. (jurka)
  • fix Minor code rearrangement to avoid warnings from jikes. Fix several switch-fallthrough bugs detected by jikes. (oliver)
  • fix In a java MessageFormat you need to double single quotes to get them to work correctly. (jurka)
  • fix Throw exceptions if cancelRowUpdates() or updateRow() are called when on the insert row, per javadoc. (oliver)
  • fix Add a URL parameter (allowEncodingChanges) which allows a client to change the client_encoding variable. This is necessary because server side COPY commands expect the file to be encoded in the client_encoding. (jurka)
  • fix Check to see if a ResultSet is closed before performing operations on it. This avoids potential NullPointerExceptions and other problems. (jurka)
  • fix Rewrite date/time/timestamp parsing code. Instead of trying to jam it into a format we can use DateFormat.parse on, just read the fields individually. This fixes problems with BC dates and dates past 9999. It now also rejects +/- infinity instead of mapping these to arbitrary java values. There is no equivalent. (jurka)
  • fix Since getURL is not implemented, throw an exception, don't just return null. (jurka)
  • fix When closing a Statement or ResultSet be sure to close the underlying Query/ResultCursor to release backend resources. (jurka)
  • fix Do not use named statements when batch executing a whole bunch of individual sql statements. We'll never reuse them and they just take up backend resources. (jurka)
  • fix When loading driverconfig.properties files from the classpath, ensure that settings are read in reverse classpath order. This means that settings from files earlier in the classpath override settings from files found at the end of the classpath. (jurka)
  • fix Allow the regression tests to pass when running against an 8.0 server with default_with_oids turned off. Some tests depend on a table having oids. (jurka)
  • fix When retrieving Int8 or Int16 protocol message formats, we need to correctly truncate the Int32 storage used to sign these narrower types. This notably appeared in RowDescription message for variable length datatypes. The Field.length should have been -1, but was 65535. (jurka)
  • fix When calling toString on a Statement, don't go into a infinite loop. (jurka)
  • fix When determining if the user has changed the client_encoding to something other than unicode, the comparison must be done case insensitively. (jurka)
  • fix Add PSQLState codes to all PSQLExceptions thrown by the driver. Remove the PSQLException ctor that does not take a PSQLState. Intercept exceptions in PooledConnectionImpl's handlers. When a fatal exception is seen (determined by looking at the exception's SQL state), notify any connection event listeners. Fix rethrowing of exceptions at the Connection level in PooledConnectionImpl. (oliver)

Version 8.0beta1-308 (2004-11-09)

  • add New Spanish translation. (jurka) Thanks to Diego A. Gil..
  • add Allow configuration of the driver by a properties file. All copies of org.postgresql.driverconfig.properties found in the classpath will be read and used to setup defaults for the driver. The most prominent use of this is to allow third parties to provide mappings for custom datatypes. (oliver)
  • update Updated Russian translation. (jurka) Thanks to Serguei Mokhov.
  • update Update READMEs to reflect the current situation. (jurka) Thanks to Vadim Nasardinov.
  • update Brazilian translation update. (jurka) Thanks to Euler Taveira de Oliveira.
  • update Standardize copyright notices and use of the PostgreSQL cvs keyword. Update copyright years to 2004. (jurka)
  • update Upgrade website to use forrest 0.6. (jurka)
  • update Set the default prepareThreshold to five per previous discussion. (jurka)
  • update Indent source code with: astyle -j -p --convert-tabs (jurka)
  • fix Correctly cast the return value of a CallableStatement when getShort is called. getByte presents a can't happen situation as no function can return a TINYINT because pg doesn't have an equivalent type. Make this throw an exception if we get to this point. (jurka) Thanks to Christian Niles.
  • fix Make PreparedStatement.setNull(i, Types.BOOLEAN) strongly typed. Previously only Types.BIT was used the boolean oid mapping and Types.BOOLEAN used the unknown oid. (jurka) Thanks to Alexey Yudichev.
  • fix When using large objects for binary data (compatibleVersion < 7.2) support setNull(i, Types.VARBINARY) to set the oid of the large object to NULL. (jurka) Thanks to Alexey Yudichev.
  • fix When calling setNull or setObject with Types.CHAR, use the oid of the bpchar pg type, not varchar. Correct array creation that was using char, not bpchar. Type all textual data as varchar instead of text because it allows the correct comparison to be made with char data on text with trailing spaces: SELECT ' '::char = ' '::varchar; (jurka)
  • fix Make fastpath/largeobject code aware of transaction state, so that in autocommit off mode it will start a new transaction if necessary. (jurka) Thanks to Alexey Yudichev.
  • fix Bit shifting code had a typo that incorrectly reconstructed an int from a byte[]. This fixes a problem with large objects on systems whose oid counter is >= 0x01000000. (jurka) Thanks to Alexey Yudichev.
  • fix Make registerOutParameter work with Types.BOOLEAN. (jurka) Thanks to Christian Niles.
  • fix Disallow these cases as we have insufficient type information: setNull(i, Types.OTHER), setObject(i, null), setObject(i, null, Types.OTHER). Fix updateable result sets so they pass type information on when setting a column to NULL. (oliver)
  • fix Don't allow a negative fetch size to be set on a ResultSet. (jurka)
  • fix Make sure that ds/* really is included in the set of files to compile (fixes some dependency problems with partial builds). (oliver)
  • fix Make escape syntax processing {oj (and friends) } case insensitive. (jurka)
  • fix Fixes for handling double-quotes and backslashes in single-quoted literals when parsing queries for parameter placeholders. (oliver)
  • fix Updatable ResultSets need to check for an empty ResultSet because isBeforeFirst and isAfterLast both return false for an empty result so the checking to make sure the user is on a valid row wasn't working. Also don't allow an insert without specifying at least one column value because INSERT INTO tab() values() is a syntax error. (jurka)
  • fix When splitting up a multistatement query to be executed individually do not consider a whitespace only query to be significant. The original code correctly considered "SELECT 1;" to be one query, but thought "SELECT 1; " was two queries. (jurka)
  • fix When a connection attempt is made that does not provide a username, then let this go through to the server as the empty string producing a "no user name specified" error instead of a NullPointerException. (jurka)
  • fix When executing a batch statement that has two statements in it, we get confused and bail out with a "Too many update results" message. This message construction was producing an ArrayIndexOutOfBoundsException because it wasn't checking bounds properly. (jurka) Thanks to Alan Stange.

Version 8.0-dev307 (2004-10-19)

  • add Implement ResultSet.isAutoIncrement by retrieving the column's default value and seeing if there is a "nextval" call in it. (jurka) Thanks to Jaroslaw J. Pysnzy.
  • add Return serial datatypes in DatabaseMetaData getTypeInfo and getColumns. (jurka) Thanks to Jaroslaw J. Pysnzy.
  • add Update the translation system to use gettext instead of property files. (jurka)
  • add Allow users to customize the SSL connection by providing their own SSLSocketFactory implementation. (jurka) Thanks to Ulrich Meis.
  • add Initial translation to Turkish. (jurka) Thanks to Devrim GUNDUZ.
  • update Some general code cleanups. Remove unnecessary imports and a couple unused variables. In the test suite ensure that assertEquals() uses the correct order for expected and actual arguments. Also remove pointless try/catch blocks. (jurka)
  • fix Don't use cursor/portal based fetch methods with autocommit on. The underlying portal will disappear from underneath the driver. (jurka)
  • fix ResultSet.getRow on a cursor/portal backed query was not counting previously discarded data and only returned the row number within the current chunk of data. (jurka)
  • fix Fix setArray when using the v3 protocol. We can't bind arrays as text, we need the correct type. This gets the array type from the Array.getBaseType method. This is a fragile means that depends on a specific Array implementation, but we already depend on a very specific implementation (toString() returning a correctly formatted pg array) that we can live with this. (oliver)
  • fix For updateable ResultSets make insertRow and deleteRow quote column names like updateRow already does. This makes these methods work on mixed case identifiers. (jurka) Thanks to Ulrich Meis.
  • fix PreparedStatement.setCharacterStream somehow escaped getting fixed for the old problem of assuming a stream can be read completely in one read() call. (jurka)
  • fix Speed up ResultSet.findColumn by caching the column name to index mapping. (jurka) Thanks to Phill Tornroth and Peter Mount.
  • fix Contstruct the backing hash for updateable resultsets on demand because the vast majority of resultsets aren't updateable. Also change it from a Hashtable to a HashMap because two threads shouldn't be updating the same resultset at the same time. (jurka)
  • fix Fix typos in error messages and update the pt_BR translation. (jurka) Thanks to Euler Taveira de Oliveira.
  • fix In 8.0 arrays with non-standard bounds (beginning index != 1) the dimensions are returned in the data like so "[0:3]={0,1,2,3,4}". Add some code to ignore these bounds and match previous server version behavior. (jurka)
  • fix Restructure DataSource code to provide a generic interface in org.postgresql.ds.*. No longer is the jdbc version we compiled for relevent. This allows the driver and regression suite to be compiled with the 1.5 jdk. (jurka)
  • fix When streaming data from setBinaryStream to the backend, do not allow Exceptions or bad length parameters to cause the connection state to get confused destroying the connection. (jurka)

Version 8.0-dev306 (2004-09-16)

  • add Implement support for the Savepoint interface. (jurka)
  • add Add a new file to hold the build number to avoid filling the Driver.java.in commit log with just build number changes. Also add a utility program to print out the driver version and where it was loaded from. (jurka)
  • fix ResultSet.moveToCurrentRow was checking the cached updateability flag assuming it had been set instead of correctly calling the isUpdateable() method which sets the flag if needed. This usually worked because moveToCurrentRow is only useful after a moveToInsertRow call which would set the flag, but this is not required. (jurka) Thanks to David Bucciarelli.
  • fix Fix NullPointerException when doing a multiple query execution in one statement using the V3 protocol. For example Statement.execute("SELECT 1; SELECT 2"); would not have any parameters set and try to iterate over a null array. (jurka)

Version 8.0-dev305 (2004-08-12)

  • add Add ODBC style escape sequences for function {fn ...} and outer join {oj ...}. (davec)
  • update Modify version checking code and descriptions to match the decision that 8.0 will be the next release, not 7.5. (jurka)
  • fix My version of junit (3.7) doesn't have assertFalse. ArrayTest uses it in a couple of places. This patch changes assertFalse(condition) to assertTrue(!condition). (oliver)
  • fix Ensure the encoding test drops its table at the end of the run to make sure other tests do not see it and get confused. (oliver)
  • fix Don't make the driver begin a transaction for certain calls. Notably we don't want Connection.getTransactionIsolation() to start a transaction because this is often a check put in before trying to change it and you can't change it in mid-transaction. (oliver)
  • fix Don't report the hashcode of our error message key into the properties file as the vendor error code. This number is completely random and undocumented and ties us into using the current error message keys and implementation to maintain the same codes. Further error messages from the server will not provide this value, so it's best to leave it alone entirely and tell people to use getSQLState(). (jurka)
  • fix The maxRows variable was preventing using a portal based fetch when it was actually desired. maxRows == 0 is a special case meaning return all rows and needs to be handled differently. (jurka)
  • fix I recently made a change to report a numeric type that had no size information as numeric(1000,1000) thinking this meant 1000 digits to the right and left of the decimal point. This not the case. I had considered 1000,1000 because 1000 is the limit for both of these arguments and that made some sense although still arbitrary. Moving to something like (1000,500) seems verging on completely random, so I've backpedalled and made it return (-1,-1) because we don't have this information and don't have the ability to return NULL. (jurka)
  • fix Now that ResultSetMetaData returns different results for getColumnName and getColumnLabel, use the underlying table's column name (getColumnName) when working on an updatable ResultSet. (oliver)
  • fix Revert ResultSetMetaData methods getColumnName, getTableName and getSchemaName to previous implementation that returned the column's alias if available and "" for the table and schema. Move the new functionality to access the underlying sources of the query to a new PGResultSetMetaData interface which offers getBaseXXXName. (jurka) Thanks to Mike Martin.
  • fix DatabaseMetaData.getSearchString escape was a \ short of working because both Java's String constructor and pg's input parser strip off backslashes. (jurka)
  • fix Change the escape syntax test for functions to actually call a function. (jurka)

Version 8.0-dev304 (2004-07-17)

  • add Make the driver generate errors on unknown transaction states in a ReadyForQuery message, rather than silently ignoring them (and probably getting confused). (oliver)
  • add Added getXXX optional method functionality, allows user to use getXXX to get a byte, short, int, long, double, char via the preferred method as well as the non-preferred. For instance getByte can get a short, int, long, double, or varchar. (davec)
  • update Now that JDBC1 is no longer supported merge the implemention of JDBC1 methods into the JDBC2 classes. (jurka)
  • fix Some ResultSetMetaData fixes. Remove completely duplicated code in the jdbc1/jdbc2 implementations. Recognize "time with timezone" as a java.sql.Types.TIME. Report time/timestamp fractional seconds in getScale(). For unspecified numeric precision/scale use 1000,1000 which is the maximum pg will allow you to specify. Correct getColumnDisplaySize to aware of fractional seconds and timezones for time/timestamp types. (jurka) Thanks to Dario V. Fassi.
  • fix When retrieving an array of numerics it attempted to set the scale on the retrieved data to zero, which doesn't work for non-integer values. Also allow a ResultSet created from an Array to be scrolled and add some test cases to make sure things work. (jurka) Thanks to Oliver Dauben.
  • fix Add the ability to compile with the 1.5 Beta 2 JDK. Sun has altered the JDBC API without altering the version number, so I've created a new jdbc3g subdirectory for a "JDBC3 w/ Generics" implementation. This doesn't support compiling the DataSource implementations as they don't have the same multi-version architecture that the core driver does. (jurka)
  • fix Fix decodeUTF8 that was broken in build 303. (oliver)

Version 8.0-dev303 (2004-07-01)

  • add Modularize query execution and add complete V3 protocol support. (oliver)
  • fix Don't throw an Exception in locatorsUpdateCopy() even though the ability to update LOBs is unimplemented. The 1.5 JDK's CachedRowSet implementation calls this method regardless of whether large objects are used or not. (jurka) Thanks to Kevin MacClay.
  • fix Fix updatable ResultSets stream methods (ascii, character, binary). The existing code didn't correctly allocate data arrays, and it failed to loop when a stream didn't provide the full amount of data requested of it. (jurka) Thanks to Jan de Visser.
  • fix Fix some problems with result sets positioned before the start or after the end of results. You could still call a number of methods on them like getXXX, updateXXX, and updateRow(). (jurka)
  • fix Review recent getUDT implementation. Filter out base and pseudo types if no type array is specified. Correctly handle a zero length type array. (jurka)
  • fix Fix apparently harmless typo in build.xml. {$srcdir} -> ${srcdir} (jurka) Thanks to Markus Schaber.
  • fix Fix NullPointerException on Statement.clearBatch() when addBatch() hasn't been called. (oliver)

Version 8.0-dev302 (2004-06-15)

  • add Added a cvsignore for PSQLException.java since this file is now generated. (blind)
  • add Allow enabling server side prepared statements globally without writing pg specific code by setting the prepared statement threshold in the connection url or datasource. Instead of a simple on/off flag, the prepared statement mechanism is an execution count threshold, so ideally it will turn itself on for frequently used queries while not getting in the way of one time use executions. (oliver)
  • add Add documentation for using listen/notify with JDBC. (jurka)
  • add Implement DatabaseMetaData.getUDT (davec)
  • update Remove the old style javadoc entries for extensions that were copy and pasted into the documentation. Add a javadoc build target to produce documentation for the external API. At the moment this leaves the extensions chapter pretty bare, but it would be better to fill that in with helpful examples than simply regurgitating the API in an inconvenient format. (jurka)
  • update Update the expected foreign key name results to match the new 7.5 backend behavior. Generated foreign key names are now usefully named based on the table and columns instead of things like $1. (jurka)
  • fix Enforce the requirement that you must have a scrollable resultset to call some methods (last(), absolute(), etc). Without this patch, these methods complete "normally" but can return incorrect data if the resultset is backed by a cursor. It also adds tests for this behaviour, and fixes a number of tests and one case in the driver itself that try to use these methods with the wrong resultset type. (oliver)
  • fix Fix TimeTests for jdk1.2 and 1.3. Pre 1.4 JVMs consider the nanoseconds field of a java.sql.Timestamp completely separate and do not return the milliseconds in getTime(). Add a new JVM version test in TestUtil to allow both cases. (jurka)
  • fix Fix the various ResultSet position querying methods (isFirst, isLast, isBeforeFirst, isAfterLast) to work on TYPE_FORWARD_ONLY ResultSets that are backed by a cursor. (oliver)
  • fix When calling stmt.executeUpdate the statement only returns a row count with INSERT/UPDATE/DELETE/MOVE, other statments should return zero as the affected row count. The existing driver behavior was to return whatever the last count was instead of resetting to zero. (jurka)
  • fix Track transaction status and only issue a BEGIN command on the first statement executed, not immediately after the previous commit or rollback. This should help the long standing, but recently very unpopular "idle in transaction" behavior. (jurka)
  • fix Fix failures in TimeTest for timezones ahead of GMT. This produces a Time value before the epoch which came up with negative values. (oliver)
  • fix Allow the regression tests to run successfully against a 7.2 server. 7.2 apparently doesn't like casting a timestamp with time zone to time without time zone, so we've got to cast through an intermediate timestamp without time zone. (jurka)
  • fix Allow updateable ResultSets to support types that aren't directly mappable to Java types, for example cidr. (jurka) Thanks to Moray Taylor.
  • fix While ResultSets created by ResultSet rs = connection.createStatement().executeQuery(sql); default to TYPE_FORWARD_ONLY per spec, ResultSets created as the result of a DatabaseMetaData call should be more flexible and allow scrollable calls to be made. (jurka) Thanks to Moray Taylor.
  • fix Update the build.xml file to support building with the new 1.5 jdk and ant 1.6. Rename the 1.4 specific replacement variable in PSQLException to describe it's true meaning (the existence of Throwable.initCause()). (jurka)
  • fix Allow public access to radius field to match other geometric types behavior. (jurka) Thanks to Declan Lynch.
  • fix When deleteRow() is called on an updateable ResultSet the ResultSet should be positioned on the previous row. (jurka) Thanks to Bob Messenger and Chris Pesarchick.

Version 8.0-dev301 (2004-03-29)

  • add Use the new information available in the V3 protocol to implement ResultSetMetaData methods describing the underlying tables: getSchemaName, getTableName, getColumnName, getColumnLabel, and isNullable. (jurka) Thanks to Jan-Andre le Roux.
  • add Added xml docbook documentation. (davec) Thanks to Peter Eisentraut.
  • add Add documentation validation target which doesn't require additional xml libraries beyond those that come with ant. Also add the ability to customize a local build via a build.local.properties file. In this file you can set the necessary parameters for the docbook dtds and stylesheets to match your installation. (jurka)
  • add Added documentation for Tomcat setup. (davec)
  • add Added rudimentary PGInterval class to deal with retrieving intervals via getObject. (davec)
  • add Support JDK 1.4-style exception chaining in PSQLException. Various cleanups to PSQLException constructors, don't override where not necessary. (oliver)
  • add Modified ResultSet.getTime routines to use a calendar if available. (davec)
  • add Update documentation to reflect the current build process. Note the restrictions on using cursor based ResultSets. (jurka)
  • add Document the additional connection parameters that specify pg specific behavior: ssl, compatible, loglevel, and charSet. (jurka)
  • update Now that we are out of the main tree, we can't rely on the makefile system to tell us about versions and ports and other options so we are at least temporarily back to using a hardcoded build.properties file. (jurka)
  • update Modify various testcases and test support code so they do not catch-and-rethrow SQLExceptions as assertion failures. This means you actually see the original exception (and under 1.4, any nested exception) without any extra work; it also makes the code a bit easier to read. (oliver)
  • update Enable test cases related to server side prepare and transforming to a cursor based fetch which previously were failing. (oliver)
  • fix Newer versions of the 1.4.2 jdk give warnings about having return in a finally clause. (jurka)
  • fix Be spec compliant in creating ResultSets that are of TYPE_FORWARD_ONLY by default. This allows us to be more aggressive in using scrollable ResultSets because they are usable by default. Also correctly track the values for result set type, concurrency, and fetch direction in both the ResultSet and Statement. (oliver)
  • fix Fix the setXXXStream methods. If passed a null InputStream, convert this to a setNull call. The code originally would try to read the whole stream in one call to read(), but this doesn't work. The InputStream API makes it clear you must be prepared to loop and continue reading if you didn't get the whole request on the first try. (jurka) Thanks to Martin Holz.
  • fix ResultSet.next() and previous() incremented or decremented the internal current_row variable regardless of wether they succeeded or not. This generated some ArrayIndexOutOfBoundsExceptions when the errorneous adjustment current_row led to out of range values. (jurka)
  • fix ConnectionPool and SimpleDataSource are marked Serializable, but their superclass (which contains a number of state variables) is not. To correctly serialize these objects we need to manually implement writeObject and readObject. (jurka) Thanks to R. Lemos.
  • fix V3 NotificationResonse messages were trying to be received as V2 messages. Also the PID was being read in the wrong byte order. Additionally add a stub for the currently unimplemented notify parameter. Finally add a test case for listen/notify. (jurka)
  • fix Added StatementTest to test for statement re-use, fixed ResultSetTest to pass this test. (davec)
  • fix Added a check to make sure statements weren't being re-used after being closed. (davec)
  • fix Improve V3 protocol startup to reduce roundtrips to the server. (jurka) Thanks to Chris Smith.
  • fix Added functionality to deal with the timetz datatype, and handle msec better. (davec)
  • fix If the user has requested a SSL connection and the driver has not been compiled with SSL support throw an Exception instead of silently falling back to a non SSL connection. (jurka)
  • fix Closing a Connection or Statement object twice should be a no-op instead of throwing an Exception. (jurka) Thanks to Victor Sergienko.
  • fix Added additional tests for time, timestamps, and fixed code to pass. (davec)
  • fix Hungarian translation update. (davec) Thanks to Lazlo Hornyak.
  • fix Fixed bug where the V3 protocol support was not properly handling binary cursors. Also fixed a compile problem with the test suite under jdk1.2 and 1.3. Also fixed a problem with OID74Test which wasn't commiting a table drop so it was leaving a table in the database after the test run. (blind)