minor error reporting fixes

Started by Liam Stewartover 24 years ago4 messagespatches
Jump to latest
#1Liam Stewart
liams@redhat.com

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

Attachments:

patch.txttext/plain; charset=us-asciiDownload+15-13
#2Bruce Momjian
bruce@momjian.us
In reply to: Liam Stewart (#1)
Re: [PATCHES] minor error reporting fixes

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
#3Michael Adler
adler@glimpser.org
In reply to: Liam Stewart (#1)
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

#4Dave Cramer
pg@fastcrypt.com
In reply to: Michael Adler (#3)
Re: mishandling of NOTICE?

Michael,

Try the development driver off the site, I had a look at the source and
it doesn't do this anymore.

Dave

Show quoted text

-----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)