History of Changes
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)
-
![f]()