From 93417f99e370124cf2e4dfc5a8988b14ae061eaf Mon Sep 17 00:00:00 2001 From: Catalina Wei Date: Thu, 29 May 2008 03:51:34 +0000 Subject: [PATCH] OPENJPA-617 Removed hardcoding platform string. also relocated 2 jdbc trace messages. git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@661200 13f79535-47bb-0310-9956-ffa450edef68 --- .../BatchingPreparedStatementManagerImpl.java | 10 ++----- .../jdbc/schema/DataSourceFactory.java | 4 --- .../apache/openjpa/jdbc/sql/DBDictionary.java | 29 +++++++++++++++++-- .../openjpa/jdbc/sql/OracleDictionary.java | 12 ++++++++ .../openjpa/jdbc/kernel/localizer.properties | 1 - .../openjpa/jdbc/schema/localizer.properties | 2 -- .../openjpa/jdbc/sql/localizer.properties | 5 +++- 7 files changed, 45 insertions(+), 18 deletions(-) diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/BatchingPreparedStatementManagerImpl.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/BatchingPreparedStatementManagerImpl.java index eecd8ce2d..adf87cdbd 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/BatchingPreparedStatementManagerImpl.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/BatchingPreparedStatementManagerImpl.java @@ -238,13 +238,7 @@ public class BatchingPreparedStatementManagerImpl extends // DB2/ZOS 1 / 0 1 / 0 -2 / SQLException // Oracle -2 / -2 -2 / -2 -2 / SQLException int cnt = 0; - int updateSuccessCnt = 0; - if (ps != null && _dict.platform.indexOf("Oracle") > -1) - updateSuccessCnt = ps.getUpdateCount(); - if (_log.isTraceEnabled() && - _dict.platform.indexOf("Oracle") > -1) - _log.trace(_loc.get("batch_update_success_count", - updateSuccessCnt)); + int updateSuccessCnt = _dict.getBatchUpdateCount(ps); Object failed = null; List batchedRows = getBatchedRows(); for (int i = 0; i < count.length; i++) { @@ -262,7 +256,7 @@ public class BatchingPreparedStatementManagerImpl extends row.getSQL(_dict)).getMessage()); break; case Statement.SUCCESS_NO_INFO: // -2 - if (_dict.platform.indexOf("Oracle") > -1 && + if (_dict.reportsSuccessNoInfoOnBatchUpdates && updateSuccessCnt != count.length) { // Oracle batching specifics: // treat update/delete of SUCCESS_NO_INFO as failed case diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DataSourceFactory.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DataSourceFactory.java index 340fd7c0d..d8e2b664e 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DataSourceFactory.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DataSourceFactory.java @@ -235,10 +235,6 @@ public class DataSourceFactory { conn = ds.getConnection(conf.getConnection2UserName(), conf .getConnection2Password()); - if (log.isTraceEnabled()) - log.trace(_loc.get("connection-defaults", new Object[]{ - conn.getAutoCommit(), conn.getHoldability(), - conn.getTransactionIsolation()})); return ds; } catch (Exception e) { throw new StoreException(e).setFatal(true); diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java index 07b5ed4c9..a5e09e94a 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java @@ -236,6 +236,7 @@ public class DBDictionary public boolean requiresCastForComparisons = false; public boolean supportsModOperator = false; public boolean supportsXMLColumn = false; + public boolean reportsSuccessNoInfoOnBatchUpdates = false; // functions public String castFunction = "CAST({0} AS {1})"; @@ -373,10 +374,25 @@ public class DBDictionary public void connectedConfiguration(Connection conn) throws SQLException { if (!connected) { + DatabaseMetaData metaData = null; try { - if (log.isTraceEnabled()) + if (log.isTraceEnabled()) { + metaData = conn.getMetaData(); + boolean isJDBC3 = false; log.trace(DBDictionaryFactory.toString - (conn.getMetaData())); + (metaData)); + try { + // JDBC3-only method, so it might throw a + // AbstractMethodError + isJDBC3 = metaData.getJDBCMajorVersion() >= 3; + } catch (Throwable t) { + // ignore if not JDBC3 + } + if (isJDBC3) + log.trace(_loc.get("connection-defaults", new Object[]{ + conn.getAutoCommit(), conn.getHoldability(), + conn.getTransactionIsolation()})); + } } catch (Exception e) { log.trace(e.toString(), e); } @@ -4411,4 +4427,13 @@ public class DBDictionary public boolean needsToCreateIndex(Index idx, Table table) { return true; } + + /** + * Return batched statements update succes count + * @param ps A PreparedStatement + * @return return update count + */ + public int getBatchUpdateCount(PreparedStatement ps) throws SQLException { + return 0; + } } diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java index f3e569c5b..4f727c72e 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java @@ -165,6 +165,7 @@ public class OracleDictionary substringFunctionName = "SUBSTR"; super.setBatchLimit(defaultBatchLimit); selectWordSet.add("WITH"); + reportsSuccessNoInfoOnBatchUpdates = true; } public void endConfiguration() { @@ -1104,4 +1105,15 @@ public class OracleDictionary throws SQLException { row.setNull(col); } + + public int getBatchUpdateCount(PreparedStatement ps) throws SQLException { + int updateSuccessCnt = 0; + if (batchLimit > 0 && ps != null) { + updateSuccessCnt = ps.getUpdateCount(); + if (log.isTraceEnabled()) + log.trace(_loc.get("batch_update_success_count", + updateSuccessCnt)); + } + return updateSuccessCnt; + } } diff --git a/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties b/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties index 6604f9d17..5c918cd85 100644 --- a/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties +++ b/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties @@ -115,4 +115,3 @@ batch_update_info: ExecuteBatch command returns update count {0} for \ statement {1}. cache-hit: SQL Cache hit with key: {0} in {1} cache-missed: SQL Cache missed with key: {0} in {1} -batch_update_success_count: ExecuteBatch command returns update success count {0} \ No newline at end of file diff --git a/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/schema/localizer.properties b/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/schema/localizer.properties index 451f3e405..135fb33df 100644 --- a/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/schema/localizer.properties +++ b/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/schema/localizer.properties @@ -148,6 +148,4 @@ no-custom-ds: use a custom DataSource delete-table-contents: An error occurred while attempting to delete all \ records from all mapped tables. set-auto-commit: DataSource connection setAutoCommit to "{0}" -connection-defaults: Initial connection autoCommit: {0}, holdability: {1}, \ - TransactionIsolation: {2} diff --git a/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/localizer.properties b/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/localizer.properties index f31ea79e1..a6d8dfd03 100644 --- a/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/localizer.properties +++ b/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/localizer.properties @@ -171,4 +171,7 @@ db-not-supported: The database product "{0}", version "{1}" is not officially su stream-exception: Unexpected error recovering the row to stream the LOB. batch_unlimit: The batch limit was changed from unlimit (-1) to {0}. function-not-supported: The database dictionary in use ("{0}") \ - does not support "{1}" function. \ No newline at end of file + does not support "{1}" function. +batch_update_success_count: ExecuteBatch command returns update success count {0} +connection-defaults: Initial connection autoCommit: {0}, holdability: {1}, \ + TransactionIsolation: {2}