History of Changes
Version 9.1dev-900 (2011-04-18)
-
Add support for setting application_name on both connection
startup and later through Connection.setClientInfo.
(jurka)
-
Fetch all metadata for the ResultSet in one query instead of
making a trip for each attribute of each column.
(jurka)
-
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)
-
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.
-
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.
-
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.
-
Support building with the 1.7 JDK.
(jurka)
-
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 default permissions to account for changes in different
server versions. 8.2 removed the rule permission while 8.4
added a trunctate permission.
(jurka)
-
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)
-
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.
-
Report permission metadata for a table with no permissions
correctly.
(jurka) Thanks to danap.
-
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.
-
Make updatable ResultSets work with SQLXML data.
(jurka) Thanks to Michael Musset.
-
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.
-
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.
-
Change ResultSetMetaData to return information on serial
datatypes in getColumnTypeName to match up with the behavior
of DatabaseMetaData.getColumns.
(jurka)
-
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)
-
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)
-
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)
-
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)
-
Implement returning ASC/DESC order information in getIndexInfo.
(jurka)
-
Support PreparedStatement.setObject(int, Character).
(jurka) Thanks to Vitalii Tymchyshyn.
-
Work around a bug in the server's implementation of the binary
copy protocol.
(jurka) Thanks to Matthew Wakeling.
-
Make ResultSetMetaData.getColumnType match the results of
DatabaseMetaData.getColumns.DATA_TYPE for domain and composite
types.
(jurka) Thanks to Thomas Kellerer.
-
Fix DatabaseMetaData.getColumns for 7.2 servers. This was
accidentally broken in the previous release.
(jurka)
-
Fix a minor concurrency issue during the setup for processing escape
functions.
(jurka) Thanks to Pierre Queinnec.
-
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.
-
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)
-
Support reading the new hex escaped bytea format.
(jurka)
-
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 the partial index constraint to the FILTER_CONDITION column
returned by DatabaseMetaData.getIndexInfo.
(jurka) Thanks to Mark Kirkwood.
-
Japanese translation of error messages.
(jurka) Thanks to Hiroshi Saito.
-
Bulgarian translation of error messages.
(jurka) Thanks to Viktor Usunov.
-
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 loglevel and protocolversion options to DataSources.
(jurka)
-
Remove an unused Sun specific import that prevented compilation on non-Sun JDKs.
(jurka) Thanks to Tom Lane.
-
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.
-
Check that a Connection hasn't been closed before allowing
any operations on it.
(jurka) Thanks to Kevin Grittner.
-
Don't allow rollback or commit when a Connection is in autocommit
mode.
(jurka) Thanks to Kevin Grittner.
-
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)
-
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.
-
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 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)
-
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.
-
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.
-
Protocol sync was lost when a batch statement parameter had an
embedded null byte.
(jurka) Thanks to Pierre Queinnec.
-
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.
-
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.
-
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.
-
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 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 the partial index constraint to the FILTER_CONDITION column
returned by DatabaseMetaData.getIndexInfo.
(jurka) Thanks to Mark Kirkwood.
-
Japanese translation of error messages.
(jurka) Thanks to Hiroshi Saito.
-
Bulgarian translation of error messages.
(jurka) Thanks to Viktor Usunov.
-
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.
-
Remove an unused Sun specific import that prevented compilation on non-Sun JDKs.
(jurka) Thanks to Tom Lane.
-
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.
-
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.
-
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 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)
-
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.
-
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.
-
Protocol sync was lost when a batch statement parameter had an
embedded null byte.
(jurka) Thanks to Pierre Queinnec.
-
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.
-
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.
-
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.
-
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 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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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 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.
-
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.
-
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.
-
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.
-
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.
-
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)
-
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.
-
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.
-
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.
-
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)
-
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.
-
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 support for GSSAPI authentication.
(jurka)
-
Implement support for generated keys for PreparedStatements in addition
to the earlier support for plain Statements.
(jurka)
-
Speed up parsing of BigDecimal values in the common case of reasonably short,
simple numbers.
(jurka) Thanks to Heikki Linnakangas.
-
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.
-
Avoid sending extra Describe Statement messages to the server
when we've already done this for the query.
(jurka)
-
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.
-
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)
-
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.
-
Updated Serbian translation.
(jurka) Thanks to Bojan Skaljac.
-
Updated Brazilian Portuguese translation.
(jurka) Thanks to Euler Taveira de Oliveira.
-
Updated Turkish translation.
(jurka) Thanks to Devrim Gunduz.
-
Don't list toast table types in the output of DatabaseMetaData.getTypeInfo.
(jurka)
-
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.
-
Not all datatypes use a comma for the array element delimiter. Lookup
the appropriate delimiter in the system catalogs.
(jurka)
-
DatabaseMetaData.getColumns was broken for the JDBC 3 and 4 drivers when
running against 7.2 or older servers.
(jurka)
-
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 parsing of integer and long data. Some malformed inputs (only a negative
sign) got treated as valid data.
(jurka) Thanks to Heiiki Linnakangas.
-
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.
-
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)
-
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.
-
DatabaseMetaData.getColumns was broken for the JDBC 3 and 4 drivers when
running against 7.2 or older servers.
(jurka)
-
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 parsing of integer and long data. Some malformed inputs (only a negative
sign) got treated as valid data.
(jurka) Thanks to Heiiki Linnakangas.
-
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)
-
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.
-
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 parsing of integer and long data. Some malformed inputs (only a negative
sign) got treated as valid data.
(jurka) Thanks to Heiiki Linnakangas.
-
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)
-
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.
-
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.
-
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)
-
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.
-
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.
-
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 a configuration option to enable tcp keep alives.
(jurka) Thanks to Toru Shimogaki.
-
For array types, return information about their base types for things
like getPrecision.
(jurka)
-
Add more detail to the exception when interpreting a server error
message.
(jurka) Thanks to Daniel Migowski.
-
Make datasources support the compatible parameter.
(jurka) Thanks to Achilleas Mantzios.
-
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)
-
Map the database uuid type to java.util.UUID. This only works for
relatively new server (8.3) and JDK (1.5) versions.
(jurka)
-
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.
-
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)
-
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)
-
Kill off JDBC2 specific code. Simplify the build system now that we
require a 1.4 or higher JDK.
(jurka)
-
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)
-
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)
-
Updated German translation.
(jurka) Thanks to Andre Bialojahn.
-
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.
-
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 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.
-
CallableStatement#getUpdateCount was returning 1 when a function
returned a ResultSet. Return -1 instead.
(jurka) Thanks to Sam Lawrence, Albe Laurenz.
-
The DataSource options for ssl where not
correctly being serialized or included in the Reference.
(jurka)
-
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.
-
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)
-
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.
-
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)
-
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.
-
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)
-
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)
-
Updated German translation.
(jurka) Thanks to Andre Bialojahn.
-
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 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.
-
CallableStatement#getUpdateCount was returning 1 when a function
returned a ResultSet. Return -1 instead.
(jurka) Thanks to Sam Lawrence, Albe Laurenz.
-
The DataSource options for ssl where not
correctly being serialized or included in the Reference.
(jurka)
-
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)
-
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)
-
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.
-
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)
-
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)
-
Updated German translation.
(jurka) Thanks to Andre Bialojahn.
-
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 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.
-
CallableStatement#getUpdateCount was returning 1 when a function
returned a ResultSet. Return -1 instead.
(jurka) Thanks to Sam Lawrence, Albe Laurenz.
-
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)
-
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)
-
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.
-
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)
-
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)
-
Updated German translation.
(jurka) Thanks to Andre Bialojahn.
-
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 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.
-
CallableStatement#getUpdateCount was returning 1 when a function
returned a ResultSet. Return -1 instead.
(jurka) Thanks to Sam Lawrence, Albe Laurenz.
-
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)
-
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)
-
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)
-
Updated German translation.
(jurka) Thanks to Andre Bialojahn.
-
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.
-
CallableStatement#getUpdateCount was returning 1 when a function
returned a ResultSet. Return -1 instead.
(jurka) Thanks to Sam Lawrence, Albe Laurenz.
-
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)
-
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)
-
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.
-
Implement the new JDBC3 + JDBC4 columns that are now returned by
DatabaseMetaData.getColumns.
(jurka) Thanks to Christian Schroder.
-
Throw an exception if people try to use setQueryTimeout with a
non-zero value as it is not implemented.
(jurka)
-
Updated simplified and traditional Chinese translations.
(jurka) Thanks to Kuo ChaoYi.
-
Updated Brazilian Portuguese translation.
(jurka) Thanks to Euler Taveira de Oliveira.
-
Updated Turkish translation.
(jurka) Thanks to Devrim Gunduz.
-
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.
-
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)
-
Updated Brazilian Portuguese translation.
(jurka) Thanks to Euler Taveira de Oliveira.
-
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 batch execution of CallableStatements.
(davec)
-
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)
-
Updated Brazilian Portuguese translation.
(jurka) Thanks to Euler Taveira de Oliveira.
-
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.
-
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)
-
Updated Brazilian Portuguese translation.
(jurka) Thanks to Euler Taveira de Oliveira.
-
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.
-
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)
-
Provide a minimal ClientInfo implementation because of complaints
about exceptions continually being thrown on glassfish.
(jurka)
-
Set extra_float_digits=2 on connection startup so we get as much
data about floats as possible.
(jurka)
-
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.
-
Implement the JDBC4 method Connection.createArrayOf. Now people can
portably and easily handle array data.
(jurka)
-
Assorted cleanups to the source tree based on findbugs output.
(jurka) Thanks to Mikko Tiihonen.
-
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.
-
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.
-
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.
-
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.
-
Make code that parses queries for updateable resultsets aware of
the ONLY clause.
(jurka) Thanks to Oleg Vasylenko.
-
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)
-
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)
-
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.
-
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.
-
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.
-
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.
-
Support NULL array elements.
(jurka) Thanks to Christian Schröder.
-
Make code that parses queries for updateable resultsets aware of
the ONLY clause.
(jurka) Thanks to Oleg Vasylenko.
-
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)
-
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.
-
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.
-
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.
-
Make code that parses queries for updateable resultsets aware of
the ONLY clause.
(jurka) Thanks to Oleg Vasylenko.
-
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)
-
Make code that parses queries for updateable resultsets aware of
the ONLY clause.
(jurka) Thanks to Oleg Vasylenko.
-
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 SSL as an option for DataSources.
(jurka) Thanks to Albe Laurenz.
-
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)
-
Pull the default login timeout from DriverManager.getLoginTimeout()
if none has been specified as a URL parameter.
(jurka) Thanks to Adrian Custer.
-
Add support for returning function parameter names and directions
to getProcedureColumns.
(jurka) Thanks to Jeffrey Cox.
-
Make setObject recognize a parameter of type java.lang.Byte.
(jurka) Thanks to Boom Roos.
-
Allow CallableStatements to use batch execution.
(davec)
-
Brazilian Portuguese translation update.
(jurka) Thanks to Euler Taveira de Oliveira.
-
French translation update.
(jurka) Thanks to Xavier Poinsard.
-
Make inner classes static where possible.
(jurka) Thanks to Mikko Tiihonen.
-
Serbian translation updates.
(jurka) Thanks to Bojan Skaljac.
-
Empty finalize method still has a performance impact, so comment
it out entirely.
(jurka) Thanks to Mikko Tiihonen.
-
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.
-
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.
-
Do escape processing on batch Statements prior to execution.
This already worked for PreparedStatements, but not plain Statements.
(jurka) Thanks to Hui Ye.
-
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.
-
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.
-
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)
-
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.
-
Error message was reporting the wrong parameter type value in the V3
protocol's SimpleParameterList implementation.
(jurka) Thanks to Nathan Keynes.
-
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)
-
Make setObject recognize a parameter of type java.lang.Byte.
(jurka) Thanks to Boom Roos.
-
Brazilian Portuguese translation update.
(jurka) Thanks to Euler Taveira de Oliveira.
-
Serbian translation updates.
(jurka) Thanks to Bojan Skaljac.
-
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.
-
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.
-
Do escape processing on batch Statements prior to execution.
This already worked for PreparedStatements, but not plain Statements.
(jurka) Thanks to Hui Ye.
-
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.
-
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)
-
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.
-
Error message was reporting the wrong parameter type value in the V3
protocol's SimpleParameterList implementation.
(jurka) Thanks to Nathan Keynes.
-
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)
-
Make setObject recognize a parameter of type java.lang.Byte.
(jurka) Thanks to Boom Roos.
-
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.
-
Do escape processing on batch Statements prior to execution.
This already worked for PreparedStatements, but not plain Statements.
(jurka) Thanks to Hui Ye.
-
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.
-
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)
-
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.
-
Error message was reporting the wrong parameter type value in the V3
protocol's SimpleParameterList implementation.
(jurka) Thanks to Nathan Keynes.
-
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.
-
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.
-
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)
-
Make setObject recognize a parameter of type java.lang.Byte.
(jurka) Thanks to Boom Roos.
-
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.
-
Do escape processing on batch Statements prior to execution.
This already worked for PreparedStatements, but not plain Statements.
(jurka) Thanks to Hui Ye.
-
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)
-
Error message was reporting the wrong parameter type value in the V3
protocol's SimpleParameterList implementation.
(jurka) Thanks to Nathan Keynes.
-
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)
-
Initial Serbian translation.
(jurka) Thanks to Bojan Skaljac.
-
Implement the JDBC4 Blob/Clob free method.
(jurka)
-
Improve performance of PGStream code by reducing function call
and casting overhead.
(jurka) Thanks to Stephen Denne, Nelson Arape.
-
Replace ad-hoc and missing identifier escaping with a utility
method.
(jurka)
-
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 methods to PGInterval to combine and scale intervals.
(jurka)
-
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.
-
Implement ResultSet.updateArray by simply mapping it to
updateObject which now works for arrays.
(jurka)
-
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.
-
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.
-
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)
-
Make Large Object handling work when the oid counter has exceeded
Integer.MAX_VALUE by handling oids as longs.
(jurka)
-
Allow multiple streams on the same large object to be used in
parallel by assigning each stream its own large object handle.
(jurka)
-
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.
-
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 the error message generated by a CallableStatement not getting
results that match the registered out parameters to report the
correct parameter position.
(jurka)
-
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)
-
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.
-
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)
-
Allow updatable ResultSets to update arrays.
(jurka) Thanks to Vasylenko.
-
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)
-
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)
-
Initial Serbian translation.
(jurka) Thanks to Bojan Skaljac.
-
Implement ResultSet.updateArray by simply mapping it to
updateObject which now works for arrays.
(jurka)
-
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.
-
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.
-
Make Large Object handling work when the oid counter has exceeded
Integer.MAX_VALUE by handling oids as longs.
(jurka)
-
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 the error message generated by a CallableStatement not getting
results that match the registered out parameters to report the
correct parameter position.
(jurka)
-
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)
-
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.
-
Allow updatable ResultSets to update arrays.
(jurka) Thanks to Vasylenko.
-
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)
-
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)
-
Implement ResultSet.updateArray by simply mapping it to
updateObject which now works for arrays.
(jurka)
-
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.
-
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 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 the error message generated by a CallableStatement not getting
results that match the registered out parameters to report the
correct parameter position.
(jurka)
-
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)
-
Allow updatable ResultSets to update arrays.
(jurka) Thanks to Vasylenko.
-
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)
-
Implement ResultSet.updateArray by simply mapping it to
updateObject which now works for arrays.
(jurka)
-
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.
-
Allow updatable ResultSets to update arrays.
(jurka) Thanks to Vasylenko.
Version 8.2-504 (2006-12-01)
-
Make the driver build under the 1.6 JDK.
(jurka)
-
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.
-
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 support for parsing dollar quotes and comments.
(jurka) Thanks to Michael Paesold.
-
Improve the
performance of getBoolean for false values by explicitly checking
for false rather than generating a NumberFormatException.
(jurka) Thanks to Eberhard Schulte.
-
Make the driver operate correctly
when standard_conforming_strings is on.
(jurka) Thanks to Michael Paesold.
-
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.
-
Italian translation update.
(jurka) Thanks to Giuseppe Sacco.
-
Brazilian Portuguese translation update.
(jurka) Thanks to Euler Taveira de Oliveira.
-
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.
-
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.
-
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 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)
-
Update the documentation to reflect the fact that the
default prepareThreshold is five, not zero.
(jurka)
-
Improve handling of incorrectly written user code using
CallableStatements. Defend against trying to retrieve data
before the statement is executed.
(jurka)
-
Adjust precision returned by meta data methods to reflect the
latest javadocs additional documentation.
(jurka)
-
Correct error message in CallableStatement to identify the mismatch
with the registered return type.
(jurka)
-
Correct escaping of named savepoints which follow identifier, not
literal rules.
(jurka) Thanks to Michael Paesold.
-
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)
-
Italian translation update.
(jurka) Thanks to Giuseppe Sacco.
-
Brazilian Portuguese translation update.
(jurka) Thanks to Euler Taveira de Oliveira.
-
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.
-
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.
-
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 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)
-
Update the documentation to reflect the fact that the
default prepareThreshold is five, not zero.
(jurka)
-
Correct error message in CallableStatement to identify the mismatch
with the registered return type.
(jurka)
-
Correct escaping of named savepoints which follow identifier, not
literal rules.
(jurka) Thanks to Michael Paesold.
Version 8.0-318 (2006-12-01)
-
Brazilian Portuguese translation update.
(jurka) Thanks to Euler Taveira de Oliveira.
-
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.
-
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.
-
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 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)
-
Update the documentation to reflect the fact that the
default prepareThreshold is five, not zero.
(jurka)
-
Correct escaping of named savepoints which follow identifier, not
literal rules.
(jurka) Thanks to Michael Paesold.
Version 8.2-dev503 (2006-05-23)
-
Remove documentation's claim that we don't support functions
with out parameters.
(jurka)
-
Updated German translation.
(jurka) Thanks to Andre Bialojahn.
-
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)
-
Remove documentation's claim that we don't support functions
with out parameters.
(jurka)
-
Updated German translation.
(jurka) Thanks to Andre Bialojahn.
-
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)
-
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)
-
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 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 escape sequences for timestamp addition and difference.
(davec) Thanks to Xavier Poinsard.
-
Updated German transalation.
(jurka) Thanks to Andre Bialojahn.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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)
-
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.
-
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)
-
Updated German transalation.
(jurka) Thanks to Andre Bialojahn.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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)
-
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.
-
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)
-
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.
-
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.
-
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)
-
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)
-
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)
-
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.
-
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)
-
Italian translation updates.
(jurka) Thanks to Giuseppe Sacco.
-
Brazilian Portuguese translation updates.
(jurka) Thanks to Euler Taveira de Oliveira.
-
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 parameter indexing on CallableStatements that do not
return any parameters.
(davec)
-
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)
-
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.
-
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.
-
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)
-
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.
-
Italian translation updates.
(jurka) Thanks to Giuseppe Sacco.
-
Brazilian Portuguese translation updates.
(jurka) Thanks to Euler Taveira de Oliveira.
-
Correct the display size calculations for numeric data. Don't
add precision and scale because scale is just a subset of
precision.
(jurka)
-
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.
-
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 parameter indexing on CallableStatements that do not
return any parameters.
(davec)
-
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)
-
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.
-
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.
-
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)
-
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.
-
Brazilian Portuguese translation updates.
(jurka) Thanks to Euler Taveira de Oliveira.
-
Correct the display size calculations for numeric data. Don't
add precision and scale because scale is just a subset of
precision.
(jurka)
-
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.
-
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.
-
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)
-
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.
-
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 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 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)
-
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)
-
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)
-
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.
-
Adjust ResultSetMetaData.getColumnDisplaySize to return
Integer.MAX_VALUE instead of -1 for variable length fields.
(jurka)
-
Correct the display size calculations for numeric data. Don't
add precision and scale because scale is just a subset of
precision.
(jurka)
-
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)
-
Brazilian Portuguese translation updates.
(jurka) Thanks to Euler Taveira de Oliveira.
-
Turkish translation updates.
(jurka) Thanks to Nicolai Tufar.
-
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)
-
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)
-
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)
-
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)
-
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)
-
XADataSource implementation.
(davec) Thanks to Heikki Linnakangas.
-
Improve performance of locating placeholders in queries.
(davec) Thanks to Sergei Rogovskiy.
-
Improve performance of timestamp and currency parsing.
(davec) Thanks to Ken Geis.
-
French translation updates.
(jurka) Thanks to Xavier Poinsard.
Version 404 (2005-11-06)
-
Brazilian Portuguese translation updates.
(jurka) Thanks to Euler Taveira de Oliveira.
-
Turkish translation updates.
(jurka) Thanks to Nicolai Tufar.
-
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)
-
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)
-
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)
-
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)
-
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)
-
XADataSource implementation.
(davec) Thanks to Heikki Linnakangas.
-
Improve performance of locating placeholders in queries.
(davec) Thanks to Sergei Rogovskiy.
-
Improve performance of timestamp and currency parsing.
(davec) Thanks to Ken Geis.
-
French translation updates.
(jurka) Thanks to Xavier Poinsard.
Version 8.1-dev402 (2005-10-04)
-
Initial Czech translation.
(jurka) Thanks to Petr Dittrich.
-
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 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)
-
getWarnings() should throw a SQLException if called on a closed
Statement.
(jurka)
-
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)
-
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 updateRow() involving Date, Time, or Timestamp.
(oliver)
-
Remove direct manipulation of org.postgresql.Driver.logDebug in
tests for no apparent reason.
(jurka)
-
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)
-
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.
-
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.
-
Add checks to prevent ResultSet.updateXXX methods from throwing
an ArrayIndexOutOfBoundsException. We should only throw SQLExceptions
from here.
(jurka)
-
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.
-
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)
-
Initial Czech translation.
(jurka) Thanks to Petr Dittrich.
-
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.
-
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.
-
Add checks to prevent ResultSet.updateXXX methods from throwing
an ArrayIndexOutOfBoundsException. We should only throw SQLExceptions
from here.
(jurka)
-
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.
-
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)
-
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.
-
Make PGInterval useful instead of just a placeholder by providing
access to the individual fields.
(jurka) Thanks to Oliver Siegmar.
-
Simplified Chineses translation.
(jurka) Thanks to Weiping.
-
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)
-
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)
-
Brazilian translation updates.
(jurka) Thanks to Euler Taveira de Oliveira.
-
Polish translation updates.
(jurka) Thanks to Jaroslaw Pyszny.
-
Update comments for getExtraNameCharacters to describe why we can't
list all the possible valid ones.
(jurka)
-
Italian translation updates.
(jurka) Thanks to Giuseppe Sacco.
-
Fixed problem with calendar being modified in setDate, setTimestamp.
(davec)
-
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)
-
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)
-
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)
-
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.
-
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)
-
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)
-
Added conversions for cts tests.
(davec)
-
Java message format strings need to double 's.
(jurka)
-
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.
-
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)
-
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)
-
Simplified Chineses translation.
(jurka) Thanks to Weiping.
-
Brazilian translation updates.
(jurka) Thanks to Euler Taveira de Oliveira.
-
Polish translation updates.
(jurka) Thanks to Jaroslaw Pyszny.
-
Italian translation updates.
(jurka) Thanks to Giuseppe Sacco.
-
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)
-
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.
-
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 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.
-
Java message format strings need to double 's.
(jurka)
-
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)
-
Implement basic login timeout support via a 'loginTimeout' URL parameter.
(oliver)
-
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.
-
Get DatabaseMetaData.getIndexInfo to return useful data for
functional indexes. Return the expression used for the column name.
(jurka) Thanks to Peter Royal.
-
Implement JDBC 3 Blob methods to allow writing.
(jurka) Thanks to Michael Barker.
-
Make all the fields of a server error message available.
(jurka)
-
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)
-
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)
-
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.
-
Support setNull(x, Types.BLOB) and CLOB, reported by Tore Halset.
(jurka) Thanks to Tore Halset.
-
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.
-
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 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.
-
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)
-
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.
-
Support setNull(x, Types.BLOB) and CLOB, reported by Tore Halset.
(jurka) Thanks to Tore Halset.
-
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.
-
Ensure PSQLWarning is Serializable.
(jurka)
Version 8.0-310 (2005-02-02)
-
Implement Connection.nativeSQL.
(jurka) Thanks to Xavier Poinsard.
-
Document JDBC escape sequences.
(jurka) Thanks to Xavier Poinsard.
-
Add basic support for JDBC escape for escape char in LIKE string
comparisons.
(jurka) Thanks to Xavier Poinsard.
-
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)
-
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)
-
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.
-
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 the PGInterval(String) ctor to correctly set the object's postgresql
type.
(oliver) Thanks to Jean-Pierre Pelletier.
-
Don't map the escaped difference function to levenshtein because
that's not the same thing.
(jurka)
-
Bugfix and testcase for NPE when using an updateable resultset obtained from
a PreparedStatement on a v3 connection.
(oliver) Thanks to Martin Keller.
-
Reject attempts to update a CONCUR_READ_ONLY resultset.
Test fixes and testcase for this.
(oliver)
-
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)
-
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)
-
Initial French translation.
(jurka) Thanks to Xavier Poinsard.
-
Initial German translation.
(jurka) Thanks to Andre Bialojahn.
-
Implement holdable ResultSet support by simply avoiding the use of
cursors and fetching all data at once.
(jurka)
-
Implementation of standard escaped functions ( {fn func()} )
by rewriting to existing PostgreSQL functions.
(jurka) Thanks to Xavier Poinsard.
-
Implement CallableStatement.getArray.
(jurka)
-
Add a chapter on SSL configuration to the documentation.
(jurka)
-
Updated Turkish translation.
(jurka) Thanks to Nicolai Tufar.
-
Updated Chinese translation.
(jurka) Thanks to Zhenbang Wei.
-
Updated Russian translation.
(jurka) Thanks to Serguei Mokhov.
-
Updated Brazilian Portuguese translation.
(jurka) Thanks to Euler Taveira de Oliveira.
-
Updated French translation.
(jurka) Thanks to Guillame Cottenceau.
-
Reduce number of messages to translate by parameterizing common
error messages.
(jurka) Thanks to Xavier Poinsard.
-
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 copyright year to 2005.
(jurka)
-
Change default autocommit of our CPDS implementation to on, to be
consistent with normal connections.
(oliver)
-
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 warnings on javadoc because the comments were attached to
fields instead of functions.
(jurka)
-
Adjust DatabaseMetaData to acknowledge that 8.0 supports savepoints.
(jurka)
-
Change error message to reflect the driverconfig.properties file name.
(jurka)
-
Minor code rearrangement to avoid warnings from jikes.
Fix several switch-fallthrough bugs detected by jikes.
(oliver)
-
In a java MessageFormat you need to double single quotes to get
them to work correctly.
(jurka)
-
Throw exceptions if cancelRowUpdates() or updateRow() are called
when on the insert row, per javadoc.
(oliver)
-
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)
-
Check to see if a ResultSet is closed before performing operations on
it. This avoids potential NullPointerExceptions and other problems.
(jurka)
-
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)
-
Since getURL is not implemented, throw an exception, don't just
return null.
(jurka)
-
When closing a Statement or ResultSet be sure to close the underlying
Query/ResultCursor to release backend resources.
(jurka)
-
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)
-
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)
-
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)
-
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)
-
When calling toString on a Statement, don't go into a infinite loop.
(jurka)
-
When determining if the user has changed the client_encoding to
something other than unicode, the comparison must be done case
insensitively.
(jurka)
-
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)
-
New Spanish translation.
(jurka) Thanks to Diego A. Gil..
-
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)
-
Updated Russian translation.
(jurka) Thanks to Serguei Mokhov.
-
Update READMEs to reflect the current situation.
(jurka) Thanks to Vadim Nasardinov.
-
Brazilian translation update.
(jurka) Thanks to Euler Taveira de Oliveira.
-
Standardize copyright notices and use of the PostgreSQL cvs
keyword. Update copyright years to 2004.
(jurka)
-
Upgrade website to use forrest 0.6.
(jurka)
-
Set the default prepareThreshold to five per previous discussion.
(jurka)
-
Indent source code with: astyle -j -p --convert-tabs
(jurka)
-
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.
-
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.
-
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.
-
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)
-
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.
-
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.
-
Make registerOutParameter work with Types.BOOLEAN.
(jurka) Thanks to Christian Niles.
-
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)
-
Don't allow a negative fetch size to be set on a ResultSet.
(jurka)
-
Make sure that ds/* really is included in the set of files to
compile (fixes some dependency problems with partial builds).
(oliver)
-
Make escape syntax processing {oj (and friends) } case insensitive.
(jurka)
-
Fixes for handling double-quotes and backslashes in single-quoted
literals when parsing queries for parameter placeholders.
(oliver)
-
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)
-
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)
-
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)
-
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)
-
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.
-
Return serial datatypes in DatabaseMetaData getTypeInfo and getColumns.
(jurka) Thanks to Jaroslaw J. Pysnzy.
-
Update the translation system to use gettext instead of property
files.
(jurka)
-
Allow users to customize the SSL connection by providing their
own SSLSocketFactory implementation.
(jurka) Thanks to Ulrich Meis.
-
Initial translation to Turkish.
(jurka) Thanks to Devrim GUNDUZ.
-
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)
-
Don't use cursor/portal based fetch methods with autocommit on. The
underlying portal will disappear from underneath the driver.
(jurka)
-
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 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)
-
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.
-
PreparedStatement.setCharacterStream somehow escaped getting fixed
for the old problem of assuming a stream can be read completely
in one read() call.
(jurka)
-
Speed up ResultSet.findColumn by caching the column name to index
mapping.
(jurka) Thanks to Phill Tornroth and Peter Mount.
-
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 typos in error messages and update the pt_BR translation.
(jurka) Thanks to Euler Taveira de Oliveira.
-
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)
-
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)
-
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)
-
Implement support for the Savepoint interface.
(jurka)
-
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)
-
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 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 ODBC style escape sequences for function {fn ...} and outer join
{oj ...}.
(davec)
-
Modify version checking code and descriptions to match the decision
that 8.0 will be the next release, not 7.5.
(jurka)
-
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)
-
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)
-
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)
-
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)
-
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)
-
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)
-
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)
-
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.
-
DatabaseMetaData.getSearchString escape was a \ short of working
because both Java's String constructor and pg's input parser strip
off backslashes.
(jurka)
-
Change the escape syntax test for functions to actually call a
function.
(jurka)
Version 8.0-dev304 (2004-07-17)
-
Make the driver generate errors on unknown
transaction states in a ReadyForQuery message, rather than silently
ignoring them (and probably getting confused).
(oliver)
-
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)
-
Now that JDBC1 is no longer supported merge the implemention of
JDBC1 methods into the JDBC2 classes.
(jurka)
-
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.
-
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.
-
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 decodeUTF8 that was broken in build 303.
(oliver)
Version 8.0-dev303 (2004-07-01)
-
Modularize query execution and add complete V3 protocol support.
(oliver)
-
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 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 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)
-
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 apparently harmless typo in build.xml. {$srcdir} -> ${srcdir}
(jurka) Thanks to Markus Schaber.
-
Fix NullPointerException on Statement.clearBatch() when addBatch()
hasn't been called.
(oliver)
Version 8.0-dev302 (2004-06-15)
-
Added a cvsignore for PSQLException.java since this file is now
generated.
(blind)
-
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 documentation for using listen/notify with JDBC.
(jurka)
-
Implement DatabaseMetaData.getUDT
(davec)
-
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 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)
-
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 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 the various ResultSet position querying methods (isFirst, isLast,
isBeforeFirst, isAfterLast) to work on TYPE_FORWARD_ONLY ResultSets
that are backed by a cursor.
(oliver)
-
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)
-
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 failures in TimeTest for timezones ahead of GMT. This produces a
Time value before the epoch which came up with negative values.
(oliver)
-
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)
-
Allow updateable ResultSets to support types that aren't directly
mappable to Java types, for example cidr.
(jurka) Thanks to Moray Taylor.
-
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.
-
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)
-
Allow public access to radius field to match other geometric types
behavior.
(jurka) Thanks to Declan Lynch.
-
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)
-
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.
-
Added xml docbook documentation.
(davec) Thanks to Peter Eisentraut.
-
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)
-
Added documentation for Tomcat setup.
(davec)
-
Added rudimentary PGInterval class to deal with retrieving intervals
via getObject.
(davec)
-
Support JDK 1.4-style exception chaining in PSQLException.
Various cleanups to PSQLException constructors, don't override where
not necessary.
(oliver)
-
Modified ResultSet.getTime routines to use a calendar if available.
(davec)
-
Update documentation to reflect the current build process.
Note the restrictions on using cursor based ResultSets.
(jurka)
-
Document the additional connection parameters that specify pg
specific behavior: ssl, compatible, loglevel, and charSet.
(jurka)
-
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)
-
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)
-
Enable test cases related to server
side prepare and transforming to a cursor based fetch which
previously were failing.
(oliver)
-
Newer versions of the 1.4.2 jdk give warnings about having return in a
finally clause.
(jurka)
-
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 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.
-
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)
-
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.
-
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)
-
Added StatementTest to test for statement re-use, fixed
ResultSetTest to pass this test.
(davec)
-
Added a check to make sure statements weren't being re-used after
being closed.
(davec)
-
Improve V3 protocol startup to reduce roundtrips to the server.
(jurka) Thanks to Chris Smith.
-
Added functionality to deal with the timetz datatype, and handle
msec better.
(davec)
-
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)
-
Closing a Connection or Statement object twice should be a no-op
instead of throwing an Exception.
(jurka) Thanks to Victor Sergienko.
-
Added additional tests for time, timestamps, and fixed code to pass.
(davec)
-
Hungarian translation update.
(davec) Thanks to Lazlo Hornyak.
-
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)