Re: Patch for Statement.getGeneratedKeys()

Поиск
Список
Период
Сортировка
От Kris Jurka
Тема Re: Patch for Statement.getGeneratedKeys()
Дата
Msg-id Pine.BSO.4.64.0801062218350.9644@leary.csoft.net
обсуждение исходный текст
Ответ на Patch for Statement.getGeneratedKeys()  (Ken Johanson <pg-user@kensystem.com>)
Ответы Re: Patch for Statement.getGeneratedKeys()
Re: Patch for Statement.getGeneratedKeys()
Список pgsql-jdbc

On Fri, 14 Dec 2007, Ken Johanson wrote:

> Kris, please try to apply the attached and let me know what errors if
> any you get.

This patch is completely busted.  It uses backslashes instead of forward
slashes, which is relatively easily fixed, but it also has wrong line
numbers.  Consider this section of the patch:

***************
*** 159,172 ****
        */
       public int executeUpdate(String sql, int columnIndexes[]) throws
SQLException
       {
!         if (columnIndexes.length == 0)
               return executeUpdate(sql);
!
!         throw new PSQLException(GT.tr("Returning autogenerated keys is
not supported."), PSQLState.NOT_IMPLEMENTED);
       }

       /**
--- 166,206 ----

Here it claims to have lines 159 to 172, but it only has 10 lines of text.
Perhaps you need a Netbeans upgrade or you need to use some other
CVS client.

Reading through the patch I have the following comments:

1) Why does executeUpdateGetResults have support for isFunction?  Doesn't
that require preparedQuery != null?  Even if not, shouldn't the
replaceProcessing be before the isFunction check?

2) Shouldn't the result for a generated key result be stored in some
place more specific?  Right now can't you issue executeQuery() and then
call getGeneratedKeys()?

3) Generated keys should work for more than just insert, at least in
postgres' design.  RETURNING works for all of INSERT/UPDATE/DELETE.

4) As discussed previously on -general the code in executeUpdate(String,
int[]) shouldn't be using information_schema because that has additional
permission requirements.  Also it looks like it's got sql injection
problems.

5) There's no need to check connection instanceof AbstractJdbc2Connection
in executeUpdate(String, String[]).  That will always be true.

6) There's no need to split this up for translation purposes, just
make it one string:

     throw new PSQLException(GT.tr("Server version does not support
returning generated keys.")+" (< "+"8.2"+")", PSQLState.NOT_IMPLEMENTED);

7) executeUpdate(String, String[]) does not correctly escape the
columnNames provided if the values have embedded quotes.

8) Utils.needsQuoted is unused and should be removed.

9) Utils.getInsertIds doesn't look right.  Looks like it will return
"into" for something like "insert       into xxx (...)".  It doesn't look
like it will work for names with quotes in them like "x""y".  Also
the requirement that a query uses a completely qualified name
database.schema.table is quite onerous.  Additionally the fact that this
requirement is not checked will result in many
ArrayIndexOutOfBoundsExceptions.

10) What's the purpose of Utils.position?  How is this better than
String.indexOf with lowercase strings?


Kris Jurka

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

Предыдущее
От: Kris Jurka
Дата:
Сообщение: Re: Check constraint metadata
Следующее
От: Christian Schröder
Дата:
Сообщение: Re: Missing fields in getColumns() result