You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/05/24 06:23:18 UTC

svn commit: r409068 - /incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/jdbc/JDBCResultIterator.java

Author: aadamchik
Date: Tue May 23 21:23:18 2006
New Revision: 409068

URL: http://svn.apache.org/viewvc?rev=409068&view=rev
Log:
CAY-525 - saving a few CPU cycles on big result processing by caching the column labels and JDBC types.

Modified:
    incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/jdbc/JDBCResultIterator.java

Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/jdbc/JDBCResultIterator.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/jdbc/JDBCResultIterator.java?rev=409068&r1=409067&r2=409068&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/jdbc/JDBCResultIterator.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/jdbc/JDBCResultIterator.java Tue May 23 21:23:18 2006
@@ -105,6 +105,9 @@
     protected boolean nextRow;
     protected int fetchedSoFar;
     protected int fetchLimit;
+    
+    private String[] labels;
+    private int[] types;
 
     /**
      * Creates new JDBCResultIterator that reads from provided ResultSet.
@@ -122,6 +125,19 @@
         this.mapCapacity = (int) Math.ceil((descriptor.getWidth()) / 0.75);
 
         checkNextRow();
+        
+        if(nextRow) {
+            // extract column parameters to speed up processing...
+            ColumnDescriptor[] columns = descriptor.getColumns();
+            int width = columns.length;
+            labels = new String[width];
+            types = new int[width];
+            
+            for(int i = 0; i < width; i++) {
+                labels[i] = columns[i].getLabel();
+                types[i] = columns[i].getJdbcType();
+            }
+        }
     }
 
     /**
@@ -302,18 +318,17 @@
         try {
             DataRow dataRow = new DataRow(mapCapacity);
             ExtendedType[] converters = rowDescriptor.getConverters();
-            ColumnDescriptor[] columns = rowDescriptor.getColumns();
-            int resultWidth = rowDescriptor.getWidth();
+
+            int resultWidth = labels.length;
 
             // process result row columns,
             for (int i = 0; i < resultWidth; i++) {
                 // note: jdbc column indexes start from 1, not 0 unlike everywhere else
-                Object val = converters[i].materializeObject(resultSet, i + 1, columns[i]
-                        .getJdbcType());
-                dataRow.put(columns[i].getLabel(), val);
+                Object val = converters[i].materializeObject(resultSet, i + 1, types[i]);
+                dataRow.put(labels[i], val);
             }
-            
-            if(postProcessor != null) {
+
+            if (postProcessor != null) {
                 postProcessor.postprocessRow(resultSet, dataRow);
             }
 
@@ -337,7 +352,6 @@
         try {
             DataRow idRow = new DataRow(2);
             ExtendedType[] converters = rowDescriptor.getConverters();
-            ColumnDescriptor[] columns = rowDescriptor.getColumns();
             int len = pkIndices.length;
 
             for (int i = 0; i < len; i++) {
@@ -349,11 +363,11 @@
                 Object val = converters[index].materializeObject(
                         resultSet,
                         index + 1,
-                        columns[index].getJdbcType());
-                idRow.put(columns[index].getLabel(), val);
+                        types[index]);
+                idRow.put(labels[index], val);
             }
-            
-            if(postProcessor != null) {
+
+            if (postProcessor != null) {
                 postProcessor.postprocessRow(resultSet, idRow);
             }