You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by dj...@apache.org on 2006/01/19 19:56:26 UTC
svn commit: r370574 -
/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java
Author: djd
Date: Thu Jan 19 10:56:25 2006
New Revision: 370574
URL: http://svn.apache.org/viewcvs?rev=370574&view=rev
Log:
DERBY-818 Remove the object allocation and reseting overhead for updateable ResultSet information
when the ResultSet is read-only. Similar changes for the stream single fetch (getXXXStream) logic.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java?rev=370574&r1=370573&r2=370574&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java Thu Jan 19 10:56:25 2006
@@ -72,6 +72,7 @@
import java.io.IOException;
import java.net.URL;
+import java.util.Arrays;
import java.util.Calendar;
/**
@@ -158,6 +159,10 @@
private int fetchDirection;
private int fetchSize;
+ /**
+ * Indicates which columns have already been fetched
+ * as a stream for a row. Created on-demand by a getXXXStream call.
+ */
private boolean[] streamUsedFlags;
/**
@@ -205,11 +210,14 @@
// Fill in the column types
resultDescription = theResults.getResultDescription();
- //initialize arrays related to updateRow implementation
- columnGotUpdated = new boolean[getMetaData().getColumnCount()];
- copyOfDatabaseRow = new DataValueDescriptor[columnGotUpdated.length];
-
- initStreamUseFlags(getMetaData().getColumnCount());
+ // Only incur the cost of allocating and maintaining
+ // updated column information if the columns can be updated.
+ if (concurrencyOfThisResultSet == JDBC20Translation.CONCUR_UPDATABLE)
+ {
+ //initialize arrays related to updateRow implementation
+ columnGotUpdated = new boolean[getMetaData().getColumnCount()];
+ copyOfDatabaseRow = new DataValueDescriptor[columnGotUpdated.length];
+ }
// assign the max rows and maxfiled size limit for this result set
if (stmt != null)
@@ -302,10 +310,12 @@
}
}
- //since we are moving off of the current row, need to initialize state corresponding to updateRow implementation
- for (int i=0; i < columnGotUpdated.length; i++)
- columnGotUpdated[i] = false;
- currentRowHasBeenUpdated = false;
+ if (columnGotUpdated != null)
+ {
+ //since we are moving off of the current row, need to initialize state corresponding to updateRow implementation
+ Arrays.fill(columnGotUpdated, false);
+ currentRowHasBeenUpdated = false;
+ }
return movePosition(NEXT, 0, "next");
}
@@ -447,7 +457,9 @@
rowData = onRow ? currentRow.getRowArray() : null;
- unuseStreams();
+ // Clear the indication of which columns were fetched as streams.
+ if (streamUsedFlags != null)
+ Arrays.fill(streamUsedFlags, false);
return onRow;
} finally {
@@ -545,10 +557,6 @@
currentRow = null;
rowData = null;
rMetaData = null; // let it go, we can make a new one
- //since we are moving off of the current row(by closing the resultset), need to initialize state corresponding to updateRow implementation
- for (int i=0; i < columnGotUpdated.length; i++)
- columnGotUpdated[i] = false;
- currentRowHasBeenUpdated = false;
// we hang on to theResults and messenger
// in case more calls come in on this resultSet
@@ -3977,41 +3985,21 @@
resultDescription.getColumnDescriptor(column).getType().getTypeId().getSQLTypeName(), targetType);
}
-
- private void initStreamUseFlags(int numOfCol){
-
- streamUsedFlags = new boolean[numOfCol];
-
- // Next code is not neccesary because initial value is false, which is default initial value for boolean.
- /*
- clearStreamUsedFlags();
- */
- }
-
-
- void useStream(int columnIndex) throws SQLException {
-
- if(streamUsedFlags[columnIndex - 1]){
- throw newSQLException(SQLState.LANG_STREAM_RETRIEVED_ALREADY);
- }
-
- streamUsedFlags[columnIndex - 1] = true;
-
- }
-
-
- private void unuseStreams(){
-
- for(int i = 0;
- i < streamUsedFlags.length;
- i ++){
-
- streamUsedFlags[i] = false;
-
- }
-
+ /**
+ * Mark a column as already having a stream accessed from it.
+ * If the stream was already accessed, then throw an exception.
+ * @param columnIndex
+ * @throws SQLException
+ */
+ final void useStream(int columnIndex) throws SQLException {
+
+ if (streamUsedFlags == null)
+ streamUsedFlags = new boolean[getMetaData().getColumnCount()];
+
+ else if (streamUsedFlags[columnIndex - 1])
+ throw newSQLException(SQLState.LANG_STREAM_RETRIEVED_ALREADY);
+
+ streamUsedFlags[columnIndex - 1] = true;
}
-
-
}