This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-dbcp.git


The following commit(s) were added to refs/heads/master by this push:
     new 5e1941c  Performance Enhancement: Call toArray with Zero Array Size 
#20.
5e1941c is described below

commit 5e1941ceb35062e749dbc76ec051e71c3b2a7a1a
Author: Gary Gregory <gardgreg...@gmail.com>
AuthorDate: Wed Jan 13 15:07:58 2021 -0500

    Performance Enhancement: Call toArray with Zero Array Size #20.
    
    This commit is a better version of PR #20 by DaGeRe.
---
 src/changes/changes.xml                                             | 3 +++
 src/main/java/org/apache/commons/dbcp2/BasicDataSource.java         | 6 ++----
 src/main/java/org/apache/commons/dbcp2/DelegatingStatement.java     | 2 +-
 .../java/org/apache/commons/dbcp2/PoolableCallableStatement.java    | 2 +-
 .../java/org/apache/commons/dbcp2/PoolablePreparedStatement.java    | 2 +-
 src/main/java/org/apache/commons/dbcp2/PoolingDriver.java           | 4 +---
 src/main/java/org/apache/commons/dbcp2/Utils.java                   | 3 +++
 7 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 035108b..8ae2731 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -95,6 +95,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action dev="ggregory" type="update" due-to="John Patrick">
         Update Hamcrest 1.3 -> 2.2 #70.
       </action>
+      <action dev="ggregory" type="update" due-to="Gary Gregory, DaGeRe">
+        Performance Enhancement: Call toArray with Zero Array Size #20.
+      </action>
       <!--  FIXES -->
       <action dev="ggregory" type="update" issue="DBCP-569" due-to="Florent 
Guillaume">
          Fix test random failure on 
TestSynchronizationOrder.testInterposedSynchronization #84.
diff --git a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java 
b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
index 62ca365..32109ee 100644
--- a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
+++ b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
@@ -780,8 +780,7 @@ public class BasicDataSource implements DataSource, 
BasicDataSourceMXBean, MBean
      */
     @Override
     public String[] getConnectionInitSqlsAsArray() {
-        final Collection<String> result = getConnectionInitSqls();
-        return result.toArray(new String[result.size()]);
+        return getConnectionInitSqls().toArray(Utils.EMPTY_STRING_ARRAY);
     }
 
     protected GenericObjectPool<PoolableConnection> getConnectionPool() {
@@ -873,8 +872,7 @@ public class BasicDataSource implements DataSource, 
BasicDataSourceMXBean, MBean
      */
     @Override
     public String[] getDisconnectionSqlCodesAsArray() {
-        final Collection<String> result = getDisconnectionSqlCodes();
-        return result.toArray(new String[result.size()]);
+        return getDisconnectionSqlCodes().toArray(Utils.EMPTY_STRING_ARRAY);
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/dbcp2/DelegatingStatement.java 
b/src/main/java/org/apache/commons/dbcp2/DelegatingStatement.java
index a2976ba..b9f574d 100644
--- a/src/main/java/org/apache/commons/dbcp2/DelegatingStatement.java
+++ b/src/main/java/org/apache/commons/dbcp2/DelegatingStatement.java
@@ -140,7 +140,7 @@ public class DelegatingStatement extends AbandonedTrace 
implements Statement {
             final List<AbandonedTrace> resultSetList = getTrace();
             if (resultSetList != null) {
                 final int size = resultSetList.size();
-                final ResultSet[] resultSets = resultSetList.toArray(new 
ResultSet[size]);
+                final ResultSet[] resultSets = 
resultSetList.toArray(Utils.EMPTY_RESULT_SET_ARRAY);
                 for (final ResultSet resultSet : resultSets) {
                     if (resultSet != null) {
                         try {
diff --git 
a/src/main/java/org/apache/commons/dbcp2/PoolableCallableStatement.java 
b/src/main/java/org/apache/commons/dbcp2/PoolableCallableStatement.java
index d9e765d..ad52549 100644
--- a/src/main/java/org/apache/commons/dbcp2/PoolableCallableStatement.java
+++ b/src/main/java/org/apache/commons/dbcp2/PoolableCallableStatement.java
@@ -121,7 +121,7 @@ public class PoolableCallableStatement extends 
DelegatingCallableStatement {
         final List<AbandonedTrace> resultSetList = getTrace();
         if (resultSetList != null) {
             final List<Exception> thrownList = new ArrayList<>();
-            final ResultSet[] resultSets = resultSetList.toArray(new 
ResultSet[resultSetList.size()]);
+            final ResultSet[] resultSets = 
resultSetList.toArray(Utils.EMPTY_RESULT_SET_ARRAY);
             for (final ResultSet resultSet : resultSets) {
                 if (resultSet != null) {
                     try {
diff --git 
a/src/main/java/org/apache/commons/dbcp2/PoolablePreparedStatement.java 
b/src/main/java/org/apache/commons/dbcp2/PoolablePreparedStatement.java
index a2f11a3..93a8ef8 100644
--- a/src/main/java/org/apache/commons/dbcp2/PoolablePreparedStatement.java
+++ b/src/main/java/org/apache/commons/dbcp2/PoolablePreparedStatement.java
@@ -136,7 +136,7 @@ public class PoolablePreparedStatement<K> extends 
DelegatingPreparedStatement {
         final List<AbandonedTrace> resultSetList = getTrace();
         if (resultSetList != null) {
             final List<Exception> thrownList = new ArrayList<>();
-            final ResultSet[] resultSets = resultSetList.toArray(new 
ResultSet[resultSetList.size()]);
+            final ResultSet[] resultSets = 
resultSetList.toArray(Utils.EMPTY_RESULT_SET_ARRAY);
             for (final ResultSet resultSet : resultSets) {
                 if (resultSet != null) {
                     try {
diff --git a/src/main/java/org/apache/commons/dbcp2/PoolingDriver.java 
b/src/main/java/org/apache/commons/dbcp2/PoolingDriver.java
index 4794301..8e88664 100644
--- a/src/main/java/org/apache/commons/dbcp2/PoolingDriver.java
+++ b/src/main/java/org/apache/commons/dbcp2/PoolingDriver.java
@@ -25,7 +25,6 @@ import java.sql.SQLFeatureNotSupportedException;
 import java.util.HashMap;
 import java.util.NoSuchElementException;
 import java.util.Properties;
-import java.util.Set;
 import java.util.logging.Logger;
 
 import org.apache.commons.pool2.ObjectPool;
@@ -134,8 +133,7 @@ public class PoolingDriver implements Driver {
      * @return the pool names.
      */
     public synchronized String[] getPoolNames() {
-        final Set<String> names = pools.keySet();
-        return names.toArray(new String[names.size()]);
+        return pools.keySet().toArray(Utils.EMPTY_STRING_ARRAY);
     }
 
     @Override
diff --git a/src/main/java/org/apache/commons/dbcp2/Utils.java 
b/src/main/java/org/apache/commons/dbcp2/Utils.java
index e417581..beb880f 100644
--- a/src/main/java/org/apache/commons/dbcp2/Utils.java
+++ b/src/main/java/org/apache/commons/dbcp2/Utils.java
@@ -58,6 +58,9 @@ public final class Utils {
      */
     public static final Set<String> DISCONNECTION_SQL_CODES;
 
+    static final ResultSet[] EMPTY_RESULT_SET_ARRAY = new ResultSet[0];
+    static final String[] EMPTY_STRING_ARRAY = new String[0];
+
     static {
         DISCONNECTION_SQL_CODES = new HashSet<>();
         DISCONNECTION_SQL_CODES.add("57P01"); // Admin shutdown

Reply via email to