|
From: <hib...@li...> - 2006-03-22 17:39:04
|
Author: ste...@jb...
Date: 2006-03-22 12:38:55 -0500 (Wed, 22 Mar 2006)
New Revision: 9676
Modified:
trunk/Hibernate3/src/org/hibernate/dialect/Oracle9Dialect.java
trunk/Hibernate3/src/org/hibernate/jdbc/AbstractBatcher.java
trunk/Hibernate3/src/org/hibernate/jdbc/Batcher.java
trunk/Hibernate3/src/org/hibernate/persister/entity/AbstractEntityPersister.java
trunk/Hibernate3/src/org/hibernate/util/GetGeneratedKeysHelper.java
Log:
rollback HHH-1160 (getGeneratedKeys passing in pkColumnNames) in favor of HHH-1590
Modified: trunk/Hibernate3/src/org/hibernate/dialect/Oracle9Dialect.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/dialect/Oracle9Dialect.java 2006-03-22 17:34:59 UTC (rev 9675)
+++ trunk/Hibernate3/src/org/hibernate/dialect/Oracle9Dialect.java 2006-03-22 17:38:55 UTC (rev 9676)
@@ -46,6 +46,11 @@
registerColumnType( Types.BLOB, "blob" );
registerColumnType( Types.CLOB, "clob" );
+ // Oracle driver reports to support getGeneratedKeys(), but they only
+ // support the version taking an array of the names of the columns to
+ // be returned (via its RETURNING clause). No other driver seems to
+ // support this overloaded version.
+ getDefaultProperties().setProperty(Environment.USE_GET_GENERATED_KEYS, "false");
getDefaultProperties().setProperty(Environment.USE_STREAMS_FOR_BINARY, "true");
getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, DEFAULT_BATCH_SIZE);
Modified: trunk/Hibernate3/src/org/hibernate/jdbc/AbstractBatcher.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/jdbc/AbstractBatcher.java 2006-03-22 17:34:59 UTC (rev 9675)
+++ trunk/Hibernate3/src/org/hibernate/jdbc/AbstractBatcher.java 2006-03-22 17:38:55 UTC (rev 9676)
@@ -83,41 +83,69 @@
public PreparedStatement prepareStatement(String sql)
throws SQLException, HibernateException {
- return prepareStatement( sql, false, null );
+ return prepareStatement( sql, false );
}
- public PreparedStatement prepareStatement(String sql, boolean getGeneratedKeys, String[] pkColumnNames)
- throws SQLException, HibernateException {
+ public PreparedStatement prepareStatement(String sql, boolean getGeneratedKeys)
+ throws SQLException, HibernateException {
executeBatch();
logOpenPreparedStatement();
- return getPreparedStatement( connectionManager.getConnection(), sql, false, getGeneratedKeys, pkColumnNames, null, false );
+ return getPreparedStatement(
+ connectionManager.getConnection(),
+ sql,
+ false,
+ getGeneratedKeys,
+ null,
+ false
+ );
}
- public PreparedStatement prepareSelectStatement(String sql)
- throws SQLException, HibernateException {
+ public PreparedStatement prepareSelectStatement(String sql)
+ throws SQLException, HibernateException {
logOpenPreparedStatement();
- return getPreparedStatement( connectionManager.getConnection(), sql, false, false, null, null, false );
+ return getPreparedStatement(
+ connectionManager.getConnection(),
+ sql,
+ false,
+ false,
+ null,
+ false
+ );
}
- public PreparedStatement prepareQueryStatement(String sql, boolean scrollable, ScrollMode scrollMode)
- throws SQLException, HibernateException {
+ public PreparedStatement prepareQueryStatement(
+ String sql,
+ boolean scrollable,
+ ScrollMode scrollMode) throws SQLException, HibernateException {
logOpenPreparedStatement();
- PreparedStatement ps = getPreparedStatement( connectionManager.getConnection(), sql, scrollable, scrollMode );
- setStatementFetchSize(ps);
- statementsToClose.add(ps);
- lastQuery=ps;
+ PreparedStatement ps = getPreparedStatement(
+ connectionManager.getConnection(),
+ sql,
+ scrollable,
+ scrollMode
+ );
+ setStatementFetchSize( ps );
+ statementsToClose.add( ps );
+ lastQuery = ps;
return ps;
}
- public CallableStatement prepareCallableQueryStatement(String sql, boolean scrollable, ScrollMode scrollMode)
- throws SQLException, HibernateException {
+ public CallableStatement prepareCallableQueryStatement(
+ String sql,
+ boolean scrollable,
+ ScrollMode scrollMode) throws SQLException, HibernateException {
logOpenPreparedStatement();
- CallableStatement ps = (CallableStatement) getPreparedStatement(
- connectionManager.getConnection(), sql, scrollable, false, null, scrollMode, true
+ CallableStatement ps = ( CallableStatement ) getPreparedStatement(
+ connectionManager.getConnection(),
+ sql,
+ scrollable,
+ false,
+ scrollMode,
+ true
);
- setStatementFetchSize(ps);
- statementsToClose.add(ps);
- lastQuery=ps;
+ setStatementFetchSize( ps );
+ statementsToClose.add( ps );
+ lastQuery = ps;
return ps;
}
@@ -163,8 +191,8 @@
}
}
- public PreparedStatement prepareBatchStatement(String sql)
- throws SQLException, HibernateException {
+ public PreparedStatement prepareBatchStatement(String sql)
+ throws SQLException, HibernateException {
sql = getSQL( sql );
if ( !sql.equals(batchUpdateSQL) ) {
@@ -178,8 +206,8 @@
return batchUpdate;
}
- public CallableStatement prepareBatchCallableStatement(String sql)
- throws SQLException, HibernateException {
+ public CallableStatement prepareBatchCallableStatement(String sql)
+ throws SQLException, HibernateException {
if ( !sql.equals(batchUpdateSQL) ) { // TODO: what if batchUpdate is a callablestatement ?
batchUpdate=prepareCallableStatement(sql); // calls executeBatch()
batchUpdateSQL=sql;
@@ -365,36 +393,44 @@
final boolean scrollable,
final ScrollMode scrollMode)
throws SQLException {
- return getPreparedStatement(conn, sql, scrollable, false, null, scrollMode, false);
+ return getPreparedStatement(
+ conn,
+ sql,
+ scrollable,
+ false,
+ scrollMode,
+ false
+ );
}
- private CallableStatement getCallableStatement( final Connection conn,
+ private CallableStatement getCallableStatement(
+ final Connection conn,
String sql,
- boolean scrollable)
- throws SQLException {
-
+ boolean scrollable) throws SQLException {
if ( scrollable && !factory.getSettings().isScrollableResultSetsEnabled() ) {
throw new AssertionFailure("scrollable result sets are not enabled");
}
sql = getSQL( sql );
+ log( sql );
- log(sql);
-
log.trace("preparing callable statement");
- if (scrollable) {
- return conn.prepareCall(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
+ if ( scrollable ) {
+ return conn.prepareCall(
+ sql,
+ ResultSet.TYPE_SCROLL_INSENSITIVE,
+ ResultSet.CONCUR_READ_ONLY
+ );
}
else {
- return conn.prepareCall(sql);
+ return conn.prepareCall( sql );
}
-
}
private String getSQL(String sql) {
- sql = interceptor.onPrepareStatement(sql);
- if(sql==null || sql.length()==0) {
- throw new AssertionFailure("Interceptor.onPrepareStatement() returned null or empty string.");
+ sql = interceptor.onPrepareStatement( sql );
+ if ( sql==null || sql.length() == 0 ) {
+ throw new AssertionFailure( "Interceptor.onPrepareStatement() returned null or empty string." );
}
return sql;
}
@@ -404,42 +440,37 @@
String sql,
boolean scrollable,
final boolean useGetGeneratedKeys,
- final String[] pkColumnNames,
final ScrollMode scrollMode,
- final boolean callable)
- throws SQLException {
-
+ final boolean callable) throws SQLException {
if ( scrollable && !factory.getSettings().isScrollableResultSetsEnabled() ) {
throw new AssertionFailure("scrollable result sets are not enabled");
}
-
if ( useGetGeneratedKeys && !factory.getSettings().isGetGeneratedKeysEnabled() ) {
throw new AssertionFailure("getGeneratedKeys() support is not enabled");
}
sql = getSQL( sql );
-
- log(sql);
+ log( sql );
- log.trace("preparing statement");
+ log.trace( "preparing statement" );
PreparedStatement result;
- if (scrollable) {
- if (callable) {
+ if ( scrollable ) {
+ if ( callable ) {
result = conn.prepareCall( sql, scrollMode.toResultSetType(), ResultSet.CONCUR_READ_ONLY );
}
else {
result = conn.prepareStatement( sql, scrollMode.toResultSetType(), ResultSet.CONCUR_READ_ONLY );
}
}
- else if (useGetGeneratedKeys) {
- result = GetGeneratedKeysHelper.prepareStatement( conn, sql, pkColumnNames );
+ else if ( useGetGeneratedKeys ) {
+ result = GetGeneratedKeysHelper.prepareStatement( conn, sql );
}
else {
- if (callable) {
- result = conn.prepareCall(sql);
+ if ( callable ) {
+ result = conn.prepareCall( sql );
}
else {
- result = conn.prepareStatement(sql);
+ result = conn.prepareStatement( sql );
}
}
Modified: trunk/Hibernate3/src/org/hibernate/jdbc/Batcher.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/jdbc/Batcher.java 2006-03-22 17:34:59 UTC (rev 9675)
+++ trunk/Hibernate3/src/org/hibernate/jdbc/Batcher.java 2006-03-22 17:38:55 UTC (rev 9676)
@@ -50,7 +50,7 @@
* Get a non-batchable prepared statement to use for inserting / deleting / updating.
* Must be explicitly released by <tt>closeStatement()</tt>
*/
- public PreparedStatement prepareStatement(String sql, boolean useGetGeneratedKeys, String[] keyColumnNames) throws SQLException, HibernateException;
+ public PreparedStatement prepareStatement(String sql, boolean useGetGeneratedKeys) throws SQLException, HibernateException;
/**
* Get a non-batchable prepared statement to use for inserting / deleting / updating.
* Must be explicitly released by <tt>closeStatement()</tt>
Modified: trunk/Hibernate3/src/org/hibernate/persister/entity/AbstractEntityPersister.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/persister/entity/AbstractEntityPersister.java 2006-03-22 17:34:59 UTC (rev 9675)
+++ trunk/Hibernate3/src/org/hibernate/persister/entity/AbstractEntityPersister.java 2006-03-22 17:38:55 UTC (rev 9676)
@@ -2084,7 +2084,7 @@
try {
//do the insert
- PreparedStatement insert = session.getBatcher().prepareStatement( sql, useGetGeneratedKeys(), getKeyColumnNames() );
+ PreparedStatement insert = session.getBatcher().prepareStatement( sql, useGetGeneratedKeys() );
try {
dehydrate( null, fields, notNull, propertyColumnInsertable, 0, insert, session );
Modified: trunk/Hibernate3/src/org/hibernate/util/GetGeneratedKeysHelper.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/util/GetGeneratedKeysHelper.java 2006-03-22 17:34:59 UTC (rev 9675)
+++ trunk/Hibernate3/src/org/hibernate/util/GetGeneratedKeysHelper.java 2006-03-22 17:38:55 UTC (rev 9676)
@@ -19,14 +19,19 @@
private GetGeneratedKeysHelper() {
}
+ private static final Integer RETURN_GENERATED_KEYS;
private static final Method PREPARE_STATEMENT_METHOD;
private static final Method GET_GENERATED_KEYS_METHOD;
static {
try {
+ int returnGeneratedKeysEnumValue = Statement.class
+ .getDeclaredField( "RETURN_GENERATED_KEYS" )
+ .getInt( PreparedStatement.class );
+ RETURN_GENERATED_KEYS = new Integer( returnGeneratedKeysEnumValue );
PREPARE_STATEMENT_METHOD = Connection.class.getMethod(
"prepareStatement",
- new Class[] { String.class, String[].class }
+ new Class[] { String.class, Integer.TYPE }
);
GET_GENERATED_KEYS_METHOD = Statement.class.getDeclaredMethod(
"getGeneratedKeys",
@@ -38,9 +43,8 @@
}
}
- public static PreparedStatement prepareStatement(Connection conn, String sql, String[] pkColumnNames)
- throws SQLException {
- Object[] args = new Object[] {sql, pkColumnNames};
+ public static PreparedStatement prepareStatement(Connection conn, String sql) throws SQLException {
+ Object[] args = new Object[] { sql, RETURN_GENERATED_KEYS } ;
try {
return ( PreparedStatement ) PREPARE_STATEMENT_METHOD.invoke( conn, args );
}
|