Re: [BUGS] BUG #5637: JDBC driver method setClob always uses getAsciiStream()

2010-09-03 Thread Kris Jurka



On Thu, 2 Sep 2010, Jochen Terstiege wrote:


The following bug has been logged online:

Bug reference:  5637
Description:JDBC driver method setClob always uses getAsciiStream()
Details:

Using driver: postgresql-8.4-701.jdbc3.jar

The method setClob() in the AbstractJdbc2Statement calls the method
getAsciiStream() on the provided Clob.
This leads to problems if the given Clob contains an UTF-8 encoded string.

Should the driver call getCharacterStream() instead? Can this problem be
solved in a different way?



The issue here is that postgresql doesn't have a real Clob type on the 
server, only a Blob type (and even that has some quirks).  So the JDBC 
driver allows you to retrieve a large object as either a Blob or a Clob. 
This means that the data the driver gets is a simple binary stream with 
no encoding information.


The JDBC driver uses getAsciiStream because it returns an InputStream 
which does not have to deal with encoding conversion which could fail 
because it doesn't know the source data's encoding.  This is 
important so that it can faithfully reproduce an arbitrary PG Clob. 
Your complaint is that this doesn't work when passed a non-PG Clob.  I 
suppose we could try to inspect the Clob to determine if it was a PG Clob 
or not and choose different methods based on that determination.


Kris Jurka

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


[BUGS] BUG #5637: JDBC driver method setClob always uses getAsciiStream()

2010-09-02 Thread Jochen Terstiege

The following bug has been logged online:

Bug reference:  5637
Logged by:  Jochen Terstiege
Email address:  jochen.tersti...@quinscape.de
PostgreSQL version: 8.4
Operating system:   Windows XP SP3
Description:JDBC driver method setClob always uses getAsciiStream()
Details: 

Using driver: postgresql-8.4-701.jdbc3.jar

The method setClob() in the AbstractJdbc2Statement calls the method
getAsciiStream() on the provided Clob.
This leads to problems if the given Clob contains an UTF-8 encoded string.

Should the driver call getCharacterStream() instead? Can this problem be
solved in a different way?

Relevant code from the class:

public void setClob(int i, Clob x) throws SQLException
{
checkClosed();

if (x == null)
{
setNull(i, Types.CLOB);
return;
}

InputStream l_inStream = x.getAsciiStream();
...

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs