PostgreSQL > JDBC Driver
 

History of Changes

RSS

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)