Re: Synthesize support for Statement.getGeneratedKeys()?
| От | Ken Johanson |
|---|---|
| Тема | Re: Synthesize support for Statement.getGeneratedKeys()? |
| Дата | |
| Msg-id | 45D4EF6A.4000608@kensystem.com обсуждение исходный текст |
| Ответ на | Re: Synthesize support for Statement.getGeneratedKeys()? (Vit Timchishin <tivvpgsqljdbc@gtech-ua.com>) |
| Ответы |
Re: Synthesize support for Statement.getGeneratedKeys()?
|
| Список | pgsql-jdbc |
This patch adds the Major and Minor version checking, for server >=8.2.
If there is a more correct method of checking for quote-able
identifiers, or anything else I'm missing, please let me know.
Thanks,
Ken
# This patch file was generated by NetBeans IDE
# Following Index: paths are relative to: C:\dev\java\proj\pgjdbc\pgjdbc\org\postgresql\jdbc3
# This patch can be applied using context Tools: Patch action on respective folder.
# It uses platform neutral UTF-8 encoding and \n newlines.
# Above lines and this line are ignored by the patching process.
Index: AbstractJdbc3Statement.java
*** C:\dev\java\proj\pgjdbc\pgjdbc\org\postgresql\jdbc3\AbstractJdbc3Statement.java Base (1.21)
--- C:\dev\java\proj\pgjdbc\pgjdbc\org\postgresql\jdbc3\AbstractJdbc3Statement.java Locally Modified (Based On 1.21)
***************
*** 19,24 ****
--- 19,26 ----
import org.postgresql.core.QueryExecutor;
import org.postgresql.core.Field;
import org.postgresql.core.BaseConnection;
+ import org.postgresql.jdbc2.AbstractJdbc2Connection;
+ import org.postgresql.jdbc2.AbstractJdbc2Statement.StatementResultHandler;
import org.postgresql.util.GT;
/**
***************
*** 28,33 ****
--- 30,38 ----
*/
public abstract class AbstractJdbc3Statement extends org.postgresql.jdbc2.AbstractJdbc2Statement
{
+ private static final int SUPPORTED_RETURNING_MAJOR = 8;
+ private static final int SUPPORTED_RETURNING_MINOR = 8;
+
private final int rsHoldability;
public AbstractJdbc3Statement (AbstractJdbc3Connection c, int rsType, int rsConcurrency, int rsHoldability)
throwsSQLException
***************
*** 106,112 ****
*/
public ResultSet getGeneratedKeys() throws SQLException
{
! return createDriverResultSet(new Field[0], new Vector());
}
/**
--- 111,119 ----
*/
public ResultSet getGeneratedKeys() throws SQLException
{
! return result==null ?
! createDriverResultSet(new Field[0], new Vector())
! : result.getResultSet();
}
/**
***************
*** 135,141 ****
{
if (autoGeneratedKeys == Statement.NO_GENERATED_KEYS)
return executeUpdate(sql);
!
throw new PSQLException(GT.tr("Returning autogenerated keys is not supported."), PSQLState.NOT_IMPLEMENTED);
}
--- 142,148 ----
{
if (autoGeneratedKeys == Statement.NO_GENERATED_KEYS)
return executeUpdate(sql);
! //fix me : impl NO_GENERATED_KEYS & RETURN_GENERATED_KEYS
throw new PSQLException(GT.tr("Returning autogenerated keys is not supported."), PSQLState.NOT_IMPLEMENTED);
}
***************
*** 184,198 ****
*/
public int executeUpdate(String sql, String columnNames[]) throws SQLException
{
! if (columnNames.length == 0)
return executeUpdate(sql);
!
! throw new PSQLException(GT.tr("Returning autogenerated keys is not supported."), PSQLState.NOT_IMPLEMENTED);
}
/**
* Executes the given SQL statement, which may return multiple results,
--- 191,235 ----
*/
public int executeUpdate(String sql, String columnNames[]) throws SQLException
{
! //fix me : columnNames only quoted if contain 0x20
! //fix me : if super changes, will break (need interface to get server verion):
! String prefix = sql.substring(0,10).toLowerCase();
! if (columnNames==null || prefix.indexOf("insert")==-1)
! return executeUpdateGetResults(sql);
! if (!(connection instanceof AbstractJdbc2Connection))
! {
! throw new PSQLException(GT.tr("Driver version does not support returning generated keys.")+"
"+connection.getClass().getName(),PSQLState.NOT_IMPLEMENTED);
! }
! AbstractJdbc2Connection con = (AbstractJdbc2Connection)connection;
! int args = columnNames.length;
! int major = con.getServerMajorVersion();
! int minor = con.getServerMinorVersion();
! if (major<SUPPORTED_RETURNING_MAJOR && minor<SUPPORTED_RETURNING_MINOR)
! throw new PSQLException(GT.tr("Server version does not support returning generated keys.")+"
("+major+"."+minor+"< "+SUPPORTED_RETURNING_MAJOR+"."+SUPPORTED_RETURNING_MINOR+")", PSQLState.NOT_IMPLEMENTED);
! if (args==0)
return executeUpdate(sql);
! StringBuffer s = new StringBuffer(sql.length()+(args*32));
! s.append(sql);
! s.append('\n');
! s.append("RETURNING");
! s.append(' ');
! boolean needsQuote;
! for (int i=0; i<args; i++)
! {
! if (i!=0)
! s.append(',');
! needsQuote = columnNames[i].indexOf(' ')!=-1;
! if (needsQuote)
! s.append('"');
! s.append(columnNames[i]);
! if (needsQuote)
! s.append('"');
}
+ return executeUpdateGetResults(s.toString());
+ //throw new PSQLException(GT.tr("Returning autogenerated keys is not supported."),
PSQLState.NOT_IMPLEMENTED);
+ }
+
/**
* Executes the given SQL statement, which may return multiple results,
* and signals the driver that any
В списке pgsql-jdbc по дате отправления: