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 ka...@apache.org on 2007/04/13 09:21:04 UTC
svn commit: r528374 - in /db/derby/code/trunk/java:
engine/org/apache/derby/iapi/store/access/
engine/org/apache/derby/impl/sql/execute/
engine/org/apache/derby/impl/store/access/conglomerate/
testing/org/apache/derbyTesting/unitTests/store/
Author: kahatlen
Date: Fri Apr 13 00:21:02 2007
New Revision: 528374
URL: http://svn.apache.org/viewvc?view=rev&rev=528374
Log:
DERBY-2493: Use unsynchronized collections in BackingStoreHashtable
Store the duplicates in ArrayLists instead of Vectors.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/iapi/store/access/BackingStoreHashtable.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/HashScanResultSet.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/HashTableResultSet.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/conglomerate/GenericScanController.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/store/T_QualifierTest.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/store/access/BackingStoreHashtable.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/store/access/BackingStoreHashtable.java?view=diff&rev=528374&r1=528373&r2=528374
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/store/access/BackingStoreHashtable.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/store/access/BackingStoreHashtable.java Fri Apr 13 00:21:02 2007
@@ -32,12 +32,13 @@
import org.apache.derby.iapi.services.cache.ClassSize;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Properties;
-import java.util.Vector;
import java.util.NoSuchElementException;
/**
@@ -127,9 +128,10 @@
private boolean keepAfterCommit;
/**
- * The estimated number of bytes used by Vector(0)
+ * The estimated number of bytes used by ArrayList(0)
*/
- private final static int vectorSize = ClassSize.estimateBaseFromCatalog(java.util.Vector.class);
+ private final static int ARRAY_LIST_SIZE =
+ ClassSize.estimateBaseFromCatalog(ArrayList.class);
private DiskHashtable diskHashtable;
@@ -166,7 +168,7 @@
* row in the table of the scan).
*
* @param remove_duplicates Should the HashMap automatically remove
- * duplicates, or should it create the Vector of
+ * duplicates, or should it create the list of
* duplicates?
*
* @param estimated_rowcnt The estimated number of rows in the hash table.
@@ -425,28 +427,28 @@
{
if (!remove_duplicates)
{
- Vector row_vec;
+ List row_vec;
// inserted a duplicate
- if ((duplicate_value instanceof Vector))
+ if (duplicate_value instanceof List)
{
doSpaceAccounting( row, false);
- row_vec = (Vector) duplicate_value;
+ row_vec = (List) duplicate_value;
}
else
{
- // allocate vector to hold duplicates
- row_vec = new Vector(2);
+ // allocate list to hold duplicates
+ row_vec = new ArrayList(2);
// insert original row into vector
- row_vec.addElement(duplicate_value);
+ row_vec.add(duplicate_value);
doSpaceAccounting( row, true);
}
- // insert new row into vector
- row_vec.addElement(row);
+ // insert new row into list
+ row_vec.add(row);
- // store vector of rows back into hash table,
+ // store list of rows back into hash table,
// overwriting the duplicate key that was
// inserted.
hash_table.put(key, row_vec);
@@ -464,7 +466,7 @@
{
max_inmemory_size -= getEstimatedMemUsage(row);
if( firstDuplicate)
- max_inmemory_size -= vectorSize;
+ max_inmemory_size -= ARRAY_LIST_SIZE;
}
} // end of doSpaceAccounting
@@ -515,12 +517,12 @@
return true; // a degenerate case of spilling
// If we are keeping duplicates then move all the duplicates from memory to disk
// This simplifies finding duplicates: they are either all in memory or all on disk.
- if( duplicateValue instanceof Vector)
+ if (duplicateValue instanceof List)
{
- Vector duplicateVec = (Vector) duplicateValue;
+ List duplicateVec = (List) duplicateValue;
for( int i = duplicateVec.size() - 1; i >= 0; i--)
{
- Object[] dupRow = (Object[]) duplicateVec.elementAt(i);
+ Object[] dupRow = (Object[]) duplicateVec.get(i);
diskHashtable.put( key, dupRow);
}
}
@@ -611,12 +613,12 @@
* For every qualifying unique row value an entry is placed into the
* hash table.
* <p>
- * For row values with duplicates, the value of the data is a Vector of
+ * For row values with duplicates, the value of the data is a list of
* rows.
* <p>
* The caller will have to call "instanceof" on the data value
* object if duplicates are expected, to determine if the data value
- * of the hash table entry is a row or is a Vector of rows.
+ * of the hash table entry is a row or is a list of rows.
* <p>
* The BackingStoreHashtable "owns" the objects returned from the get()
* routine. They remain valid until the next access to the
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/HashScanResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/HashScanResultSet.java?view=diff&rev=528374&r1=528373&r2=528374
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/HashScanResultSet.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/HashScanResultSet.java Fri Apr 13 00:21:02 2007
@@ -23,17 +23,10 @@
import org.apache.derby.iapi.services.loader.GeneratedMethod;
-import org.apache.derby.iapi.services.monitor.Monitor;
-
import org.apache.derby.iapi.services.sanity.SanityManager;
import org.apache.derby.iapi.services.io.Storable;
-import org.apache.derby.iapi.services.stream.HeaderPrintWriter;
-import org.apache.derby.iapi.services.stream.InfoStreams;
-
-import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
-
import org.apache.derby.iapi.error.StandardException;
import org.apache.derby.iapi.services.i18n.MessageService;
@@ -46,9 +39,7 @@
import org.apache.derby.iapi.sql.execute.NoPutResultSet;
import org.apache.derby.iapi.sql.Activation;
-import org.apache.derby.iapi.sql.ResultSet;
-import org.apache.derby.iapi.store.access.ConglomerateController;
import org.apache.derby.iapi.store.access.Qualifier;
import org.apache.derby.iapi.store.access.RowUtil;
import org.apache.derby.iapi.store.access.ScanController;
@@ -56,8 +47,6 @@
import org.apache.derby.iapi.store.access.TransactionController;
import org.apache.derby.iapi.types.DataValueDescriptor;
-
-import org.apache.derby.iapi.types.Orderable;
import org.apache.derby.iapi.types.RowLocation;
import org.apache.derby.iapi.store.access.BackingStoreHashtable;
@@ -66,18 +55,17 @@
import org.apache.derby.iapi.services.io.FormatableIntHolder;
import org.apache.derby.iapi.store.access.KeyHasher;
-import java.util.Enumeration;
+import java.util.List;
import java.util.Properties;
-import java.util.Vector;
/**
* Takes a conglomerate and a table filter builds a hash table on the
* specified column of the conglomerate on the 1st open. Look up into the
* hash table is done on the hash key column. The hash table consists of
- * either DataValueDescriptor[]s or Vectors of DataValueDescriptor[]. The store builds
- * the hash table. When a collision occurs, the store builds a Vector with
- * the colliding DataValueDescriptor[]s.
- *
+ * either <code>DataValueDescriptor[]</code>s or <code>List</code>s of
+ * <code>DataValueDescriptor[]</code>. The store builds the hash table. When a
+ * collision occurs, the store builds a <code>List</code> with the colliding
+ * <code>DataValueDescriptor[]</code>s.
*/
public class HashScanResultSet extends NoPutResultSetImpl
implements CursorResultSet
@@ -92,7 +80,7 @@
protected boolean firstNext = true;
private int numFetchedOnNext;
private int entryVectorSize;
- private Vector entryVector;
+ private List entryVector;
// set in constructor and not altered during
// life of object.
@@ -508,12 +496,12 @@
hashEntry = (mh == null) ? null : hashtable.get(mh);
}
- if (hashEntry instanceof Vector)
+ if (hashEntry instanceof List)
{
- entryVector = (Vector) hashEntry;
+ entryVector = (List) hashEntry;
entryVectorSize = entryVector.size();
columns =
- (DataValueDescriptor[]) entryVector.firstElement();
+ (DataValueDescriptor[]) entryVector.get(0);
}
else
{
@@ -524,11 +512,9 @@
}
else if (numFetchedOnNext < entryVectorSize)
{
- /* We walking a Vector and there's
- * more rows left in the vector.
- */
+ // We are walking a list and there are more rows left.
columns = (DataValueDescriptor[])
- entryVector.elementAt(numFetchedOnNext);
+ entryVector.get(numFetchedOnNext);
}
if (columns != null)
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/HashTableResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/HashTableResultSet.java?view=diff&rev=528374&r1=528373&r2=528374
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/HashTableResultSet.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/HashTableResultSet.java Fri Apr 13 00:21:02 2007
@@ -23,28 +23,20 @@
import org.apache.derby.iapi.services.loader.GeneratedMethod;
-import org.apache.derby.iapi.services.monitor.Monitor;
-
import org.apache.derby.iapi.services.sanity.SanityManager;
import org.apache.derby.iapi.services.io.Storable;
-import org.apache.derby.iapi.services.stream.HeaderPrintWriter;
-import org.apache.derby.iapi.services.stream.InfoStreams;
-
import org.apache.derby.iapi.error.StandardException;
-import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
import org.apache.derby.iapi.sql.conn.StatementContext;
-
import org.apache.derby.iapi.sql.execute.CursorResultSet;
import org.apache.derby.iapi.sql.execute.ExecRow;
import org.apache.derby.iapi.sql.execute.NoPutResultSet;
import org.apache.derby.iapi.types.DataValueDescriptor;
import org.apache.derby.iapi.sql.Activation;
-import org.apache.derby.iapi.sql.ResultSet;
import org.apache.derby.iapi.store.access.Qualifier;
import org.apache.derby.iapi.store.access.RowSource;
@@ -59,8 +51,8 @@
import org.apache.derby.catalog.types.ReferencedColumnsDescriptorImpl;
+import java.util.List;
import java.util.Properties;
-import java.util.Vector;
/**
* Builds a hash table on the underlying result set tree.
@@ -96,7 +88,7 @@
private boolean firstNext = true;
private int numFetchedOnNext;
private int entryVectorSize;
- private Vector entryVector;
+ private List entryVector;
private boolean hashTableBuilt;
private boolean firstIntoHashtable = true;
@@ -346,12 +338,12 @@
hashEntry = ht.get(mh);
}
- if (hashEntry instanceof Vector)
+ if (hashEntry instanceof List)
{
- entryVector = (Vector) hashEntry;
+ entryVector = (List) hashEntry;
entryVectorSize = entryVector.size();
columns =
- (DataValueDescriptor[]) entryVector.firstElement();
+ (DataValueDescriptor[]) entryVector.get(0);
}
else
{
@@ -362,11 +354,9 @@
}
else if (numFetchedOnNext < entryVectorSize)
{
- /* We walking a Vector and there's
- * more rows left in the vector.
- */
+ // We are walking a list and there are more rows left.
columns = (DataValueDescriptor[])
- entryVector.elementAt(numFetchedOnNext);
+ entryVector.get(numFetchedOnNext);
}
if (columns != null)
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/conglomerate/GenericScanController.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/conglomerate/GenericScanController.java?view=diff&rev=528374&r1=528373&r2=528374
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/conglomerate/GenericScanController.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/store/access/conglomerate/GenericScanController.java Fri Apr 13 00:21:02 2007
@@ -40,8 +40,6 @@
import org.apache.derby.iapi.store.raw.Page;
import org.apache.derby.iapi.store.raw.RecordHandle;
-import org.apache.derby.iapi.store.access.Qualifier;
-
import org.apache.derby.iapi.types.DataValueDescriptor;
import org.apache.derby.iapi.types.RowLocation;
@@ -1158,10 +1156,10 @@
* Hashtable has a key value of the object stored in
* row[key_column_number], and the value of the data is row. For row
* values with duplicates, the key value is also row[key_column_number],
- * but the value of the data is a Vector of
+ * but the value of the data is a <code>List</code> of
* rows. The caller will have to call "instanceof" on the data value
* object if duplicates are expected, to determine if the data value
- * of the Hashtable entry is a row or is a Vector of rows.
+ * of the Hashtable entry is a row or is a <code>List</code> of rows.
* <p>
* Note, that for this routine to work efficiently the caller must
* ensure that the object in row[key_column_number] implements
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/store/T_QualifierTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/store/T_QualifierTest.java?view=diff&rev=528374&r1=528373&r2=528374
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/store/T_QualifierTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/store/T_QualifierTest.java Fri Apr 13 00:21:02 2007
@@ -27,6 +27,7 @@
import java.util.Properties;
import java.util.HashSet;
+import java.util.List;
import java.io.PrintWriter;
import org.apache.derby.iapi.services.stream.HeaderPrintWriter;
@@ -48,7 +49,6 @@
import org.apache.derby.iapi.store.access.BackingStoreHashtable;
import org.apache.derby.iapi.services.io.FormatableBitSet;
import java.util.Enumeration;
-import java.util.Vector;
public class T_QualifierTest
{
@@ -1042,15 +1042,13 @@
}
numrows++;
}
- else if (obj instanceof Vector)
+ else if (obj instanceof List)
{
-
-
- Vector row_vect = (Vector) obj;
+ List row_vect = (List) obj;
for (int i = 0; i < row_vect.size(); i++)
{
- row = (DataValueDescriptor[] ) row_vect.elementAt(i);
+ row = (DataValueDescriptor[]) row_vect.get(i);
key = ((SQLLongint)(row[2])).getLong();