Postgres 7.0 JDBC - update count for DELETE is always 1 - Mailing list pgsql-interfaces

From Stephen Crawley
Subject Postgres 7.0 JDBC - update count for DELETE is always 1
Date
Msg-id 200006050038.e550coo17653@piglet.dstc.edu.au
Whole thread Raw
List 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
theupdate 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
 



pgsql-interfaces by date:

Previous
From: moenk S
Date:
Subject: jdbc, applet -> servlet;corba ??
Next
From: Kovacs Zoltan Sandor
Date:
Subject: Re: ODBC driver for Windows - Problems