RE: Postgres 7.0 JDBC - update count for DELETE is a lways 1

Поиск
Список
Период
Сортировка
От Peter Mount
Тема RE: Postgres 7.0 JDBC - update count for DELETE is a lways 1
Дата
Msg-id 1B3D5E532D18D311861A00600865478CF1AEAE@EXCHANGE1
обсуждение исходный текст
Список pgsql-interfaces
I'm getting a little worried about cvs, as I'm seeing more and more of these
"omissions" that I'm certain I'm committing.

It may be my home box that's at fault, but to complicate things, both
maidast and tyr (the box here at work) were installed from the same media,
so it's not as simple as the version of cvs I'm running.

Anyhow, I'm looking at this at the moment. However, I can't seem to get it
to work right now.

Peter

--
Peter Mount
Enterprise Support
Maidstone Borough Council
Any views stated are my own, and not those of Maidstone Borough Council

> -----Original Message-----
> From:    Joseph Shraibman [SMTP:jks@selectacast.net]
> Sent:    Monday, June 05, 2000 6:48 PM
> To:    Stephen Crawley
> Cc:    pgsql-interfaces@postgresql.org
> Subject:    Re: [INTERFACES] Postgres 7.0 JDBC - update count for DELETE
> is always 1
> 
> This was supposed to be fixed already, but I guess this is just more
> code that didn't get into the cvs when it should have.
> 
> Stephen Crawley wrote:
> > 
> > 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
> > 
> >


В списке pgsql-interfaces по дате отправления:

Предыдущее
От: Peter Mount
Дата:
Сообщение: RE: Re: Simple bug in JDBC interface
Следующее
От: Peter Mount
Дата:
Сообщение: RE: Postgres 7.0 JDBC - update count for DELETE is a lways 1