Postgres 7.0 JDBC - update count for DELETE is always 1
От | Stephen Crawley |
---|---|
Тема | Postgres 7.0 JDBC - update count for DELETE is always 1 |
Дата | |
Msg-id | 200006050038.e550coo17653@piglet.dstc.edu.au обсуждение исходный текст |
Список | 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 по дате отправления: