Обсуждение: minor error reporting fixes
Here is a small patch that cleans up some error reporting in the JDBC driver. PSQLExceptions are thrown instead of SQLExceptions and if a warning is received while waiting for the backend secret key, that warning is chained to the new Connection object instead of generating an exception. A couple new error messages have been added. Liam -- Liam Stewart :: Red Hat Canada, Ltd. :: liams@redhat.com
Вложения
Patch applied. Thanks. --------------------------------------------------------------------------- Liam Stewart wrote: > > Here is a small patch that cleans up some error reporting in the JDBC > driver. PSQLExceptions are thrown instead of SQLExceptions and if a > warning is received while waiting for the backend secret key, that > warning is chained to the new Connection object instead of generating an > exception. A couple new error messages have been added. > > Liam > > -- > Liam Stewart :: Red Hat Canada, Ltd. :: liams@redhat.com [ Attachment, skipping... ] > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
I am not very familiar with this driver, but I thought I should point out
a potential bug. I wish I had time to do more investigationn, testing and
debugging...
I encountered a situation in which I could access the database using psql
but not the JDBC driver. This is what I think happened:
The backend issued a NOTICE message. psql handled it gracefully by
printing the message to STDOUT and providing a fine connection. JDBC
driver throws a fatal SQLException.
The following case statements may need to handle NOTICEs differently:
org.postgresql.Connection line 265:
// As of protocol version 2.0, we should now receive the cancellation key and the pid
int beresp = pg_stream.ReceiveChar();
switch (beresp)
{
case 'K':
pid = pg_stream.ReceiveInteger(4);
ckey = pg_stream.ReceiveInteger(4);
break;
case 'E':
case 'N':
throw new SQLException(pg_stream.ReceiveString(encoding));
default:
throw new PSQLException("postgresql.con.setup");
}
// Expect ReadyForQuery packet
beresp = pg_stream.ReceiveChar();
switch (beresp)
{
case 'Z':
break;
case 'E':
case 'N':
throw new SQLException(pg_stream.ReceiveString(encoding));
default:
throw new PSQLException("postgresql.con.setup");
}
Once again, sorry for the uninformed vaugeries. I hope this helps
somewhat.
Mike Adler
Michael,
Try the development driver off the site, I had a look at the source and
it doesn't do this anymore.
Dave
> -----Original Message-----
> From: pgsql-jdbc-owner@postgresql.org
> [mailto:pgsql-jdbc-owner@postgresql.org] On Behalf Of Michael Adler
> Sent: Monday, March 18, 2002 1:47 PM
> To: PostgreSQL JDBC List
> Subject: [JDBC] mishandling of NOTICE?
>
>
>
> I am not very familiar with this driver, but I thought I
> should point out a potential bug. I wish I had time to do
> more investigationn, testing and debugging...
>
> I encountered a situation in which I could access the
> database using psql but not the JDBC driver. This is what I
> think happened:
>
> The backend issued a NOTICE message. psql handled it
> gracefully by printing the message to STDOUT and providing a
> fine connection. JDBC driver throws a fatal SQLException.
>
> The following case statements may need to handle NOTICEs differently:
>
> org.postgresql.Connection line 265:
>
> // As of protocol version 2.0, we should now
> receive the cancellation key and the pid
> int beresp = pg_stream.ReceiveChar();
> switch (beresp)
> {
> case 'K':
> pid = pg_stream.ReceiveInteger(4);
> ckey = pg_stream.ReceiveInteger(4);
> break;
> case 'E':
> case 'N':
> throw new
> SQLException(pg_stream.ReceiveString(encoding));
> default:
> throw new
> PSQLException("postgresql.con.setup");
> }
>
> // Expect ReadyForQuery packet
> beresp = pg_stream.ReceiveChar();
> switch (beresp)
> {
> case 'Z':
> break;
> case 'E':
> case 'N':
> throw new
> SQLException(pg_stream.ReceiveString(encoding));
> default:
> throw new
> PSQLException("postgresql.con.setup");
> }
>
>
>
>
> Once again, sorry for the uninformed vaugeries. I hope this
> helps somewhat.
>
> Mike Adler
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to
> majordomo@postgresql.org)
>
>