Postgres 7.0 JDBC - update count for DELETE is always 1

From: Stephen Crawley <crawley(at)dstc(dot)edu(dot)au>
To: pgsql-interfaces(at)postgresql(dot)org
Subject: Postgres 7.0 JDBC - update count for DELETE is always 1
Date: 2000-06-05 00:38:57
Message-ID: 200006050038.e550coo17653@piglet.dstc.edu.au
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-interfaces


Hi,

I'm trying to port a large JDBC application to Postgres 7.0 from MySQL,
and I've run into what I believe is a bug in the JDBC driver.

When my application executes a "DELETE" statement, the ResultSet entry
always says that 1 row has been deleted. Even when nothing has been
deleted. I did a bit of investigation, and I think I've found where the
problem is. In the class postgresql.Connection, the method

public java.sql.ResultSet ExecSQL(String sql) throws SQLException

contains the following code:

...

int update_count = 1;

...

case 'C': // Command Status
recv_status = pg_stream.ReceiveString(8192);

// Now handle the update count correctly.
if(recv_status.startsWith("INSERT") || recv_status.startsWith("UPDATE")) {
try {
update_count =
Integer.parseInt(recv_status.substring(1+recv_status.lastIndexOf('
')));
} catch(NumberFormatException nfe) {
throw new PSQLException("postgresql.con.fathom",recv_status);
}
}

...

It looks like the code picks out the update count when the query was
described (by the backend) as an INSERT or UPDATE. But it does not
do this for a DELETE.

I looked at the source of the backend (src/backend/tcop/dest.c, etc) and
it does seem to return an update count for the CMD_DELETE command. If
I've got this right, adding

... || recv_status.startsWith("DELETE") ...

to the if statement should fix the problem.

-- Steve

Responses

Browse pgsql-interfaces by date

  From Date Subject
Next Message Kovacs Zoltan Sandor 2000-06-05 08:46:31 Re: ODBC driver for Windows - Problems
Previous Message moenk S 2000-06-04 14:17:28 jdbc, applet -> servlet;corba ??