| java.lang.Object org.apache.derby.iapi.store.access.BackingStoreHashtable
All known Subclasses: org.apache.derby.impl.store.access.BackingStoreHashTableFromScan,
BackingStoreHashtable | public class BackingStoreHashtable (Code) | | A BackingStoreHashtable is a utility class which will store a set of rows into
an in memory hash table, or overflow the hash table to a tempory on disk
structure.
All rows must contain the same number of columns, and the column at position
N of all the rows must have the same format id. If the BackingStoreHashtable needs to be
overflowed to disk, then an arbitrary row will be chosen and used as a template
for creating the underlying overflow container.
The hash table will be built logically as follows (actual implementation
may differ). The important points are that the hash value is the standard
java hash value on the row[key_column_numbers[0], if key_column_numbers.length is 1,
or row[key_column_numbers[0, 1, ...]] if key_column_numbers.length > 1,
and that duplicate detection is done by the standard java duplicate detection provided by
java.util.Hashtable.
import java.util.Hashtable;
hash_table = new Hashtable();
Object[] row;
boolean needsToClone = rowSource.needsToClone();
while((row = rowSource.getNextRowFromRowSource()) != null)
{
if (needsToClone)
row = clone_row_from_row(row);
Object key = KeyHasher.buildHashKey(row, key_column_numbers);
if ((duplicate_value =
hash_table.put(key, row)) != null)
{
Vector row_vec;
// inserted a duplicate
if ((duplicate_value instanceof vector))
{
row_vec = (Vector) duplicate_value;
}
else
{
// allocate vector to hold duplicates
row_vec = new Vector(2);
// insert original row into vector
row_vec.addElement(duplicate_value);
// put the vector as the data rather than the row
hash_table.put(key, row_vec);
}
// insert new row into vector
row_vec.addElement(row);
}
}
|
Constructor Summary | |
public | BackingStoreHashtable(TransactionController tc, RowSource row_source, int[] key_column_numbers, boolean remove_duplicates, long estimated_rowcnt, long max_inmemory_rowcnt, int initialCapacity, float loadFactor, boolean skipNullKeyColumns, boolean keepAfterCommit) Create the BackingStoreHashtable from a row source.
This routine drains the RowSource. |
Method Summary | |
static Object[] | cloneRow(Object[] old_row) Return a cloned copy of the row. | public void | close() Close the BackingStoreHashtable.
Perform any necessary cleanup after finishing with the hashtable. | public Enumeration | elements() Return an Enumeration that can be used to scan entire table. | public Object | get(Object key) get data associated with given key.
There are 2 different types of objects returned from this routine.
In both cases, the key value is either the object stored in
row[key_column_numbers[0]], if key_column_numbers.length is 1,
otherwise it is a KeyHasher containing
the objects stored in row[key_column_numbers[0, 1, ...]].
For every qualifying unique row value an entry is placed into the
Hashtable.
For row values with duplicates, the value of the data is a Vector 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.
The BackingStoreHashtable "owns" the objects returned from the get()
routine. | public void | getAllRuntimeStats(Properties prop) Return runtime stats to caller by adding them to prop. | public boolean | put(boolean needsToClone, Object[] row) Put a row into the hash table.
The in memory hash table will need to keep a reference to the row
after the put call has returned. | public Object | remove(Object key) remove a row from the hash table. | public void | setAuxillaryRuntimeStats(Properties prop) Set the auxillary runtime stats.
getRuntimeStats() will return both the auxillary stats and any
BackingStoreHashtable() specific stats. | static DataValueDescriptor[] | shallowCloneRow(DataValueDescriptor[] old_row) | public int | size() Return number of unique rows in the hash table. |
BackingStoreHashtable | public BackingStoreHashtable(TransactionController tc, RowSource row_source, int[] key_column_numbers, boolean remove_duplicates, long estimated_rowcnt, long max_inmemory_rowcnt, int initialCapacity, float loadFactor, boolean skipNullKeyColumns, boolean keepAfterCommit) throws StandardException(Code) | | Create the BackingStoreHashtable from a row source.
This routine drains the RowSource. The performance characteristics
depends on the number of rows inserted and the parameters to the
constructor.
If the number of rows is <= "max_inmemory_rowcnt", then the rows are
inserted into a java.util.Hashtable. In this case no
TransactionController is necessary, a "null" tc is valid.
If the number of rows is > "max_inmemory_rowcnt", then the rows will
be all placed in some sort of Access temporary file on disk. This
case requires a valid TransactionController.
Parameters: tc - An open TransactionController to be used if thehash table needs to overflow to disk. Parameters: row_source - RowSource to read rows from. Parameters: key_column_numbers - The column numbers of the columns in thescan result row to be the key to the Hashtable."0" is the first column in the scan resultrow (which may be different than the firstrow in the table of the scan). Parameters: remove_duplicates - Should the Hashtable automatically removeduplicates, or should it create the Vector ofduplicates? Parameters: estimated_rowcnt - The estimated number of rows in the hash table.Pass in -1 if there is no estimate. Parameters: max_inmemory_rowcnt - The maximum number of rows to insert into the inmemory Hash table before overflowing to disk.Pass in -1 if there is no maximum. Parameters: initialCapacity - If not "-1" used to initialize the java Hashtable. Parameters: loadFactor - If not "-1" used to initialize the java Hashtable. Parameters: skipNullKeyColumns - Skip rows with a null key column, if true. Parameters: keepAfterCommit - If true the hash table is kept after a commit,if false the hash table is dropped on the next commit. exception: StandardException - Standard exception policy. |
close | public void close() throws StandardException(Code) | | Close the BackingStoreHashtable.
Perform any necessary cleanup after finishing with the hashtable. Will
deallocate/dereference objects as necessary. If the table has gone
to disk this will drop any on disk files used to support the hash table.
exception: StandardException - Standard exception policy. |
elements | public Enumeration elements() throws StandardException(Code) | | Return an Enumeration that can be used to scan entire table.
RESOLVE - is it worth it to support this routine when we have a
disk overflow hash table?
The Enumeration. exception: StandardException - Standard exception policy. |
get | public Object get(Object key) throws StandardException(Code) | | get data associated with given key.
There are 2 different types of objects returned from this routine.
In both cases, the key value is either the object stored in
row[key_column_numbers[0]], if key_column_numbers.length is 1,
otherwise it is a KeyHasher containing
the objects stored in row[key_column_numbers[0, 1, ...]].
For every qualifying unique row value an entry is placed into the
Hashtable.
For row values with duplicates, the value of the data is a Vector 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.
The BackingStoreHashtable "owns" the objects returned from the get()
routine. They remain valid until the next access to the
BackingStoreHashtable. If the client needs to keep references to these
objects, it should clone copies of the objects. A valid
BackingStoreHashtable can place all rows into a disk based conglomerate,
declare a row buffer and then reuse that row buffer for every get()
call.
The value to which the key is mapped in this hashtable; null if the key is not mapped to any value in this hashtable. Parameters: key - The key to hash on. exception: StandardException - Standard exception policy. |
getAllRuntimeStats | public void getAllRuntimeStats(Properties prop) throws StandardException(Code) | | Return runtime stats to caller by adding them to prop.
Parameters: prop - The set of properties to append to. exception: StandardException - Standard exception policy. |
put | public boolean put(boolean needsToClone, Object[] row) throws StandardException(Code) | | Put a row into the hash table.
The in memory hash table will need to keep a reference to the row
after the put call has returned. If "needsToClone" is true then the
hash table will make a copy of the row and put that, else if
"needsToClone" is false then the hash table will keep a reference to
the row passed in and no copy will be made.
If rouine returns false, then no reference is kept to the duplicate
row which was rejected (thus allowing caller to reuse the object).
Parameters: needsToClone - does this routine have to make a copy of the row,in order to keep a reference to it after return? Parameters: row - The row to insert into the table. true if row was inserted into the hash table. Returnsfalse if the BackingStoreHashtable is eliminating duplicates, and the row being inserted is a duplicate,or if we are skipping rows with 1 or more null key columnsand we find a null key column. exception: StandardException - Standard exception policy. |
remove | public Object remove(Object key) throws StandardException(Code) | | remove a row from the hash table.
a remove of a duplicate removes the entire duplicate list.
Parameters: key - The key of the row to remove. exception: StandardException - Standard exception policy. |
setAuxillaryRuntimeStats | public void setAuxillaryRuntimeStats(Properties prop) throws StandardException(Code) | | Set the auxillary runtime stats.
getRuntimeStats() will return both the auxillary stats and any
BackingStoreHashtable() specific stats. Note that each call to
setAuxillaryRuntimeStats() overwrites the Property set that was
set previously.
Parameters: prop - The set of properties to append from. exception: StandardException - Standard exception policy. |
size | public int size() throws StandardException(Code) | | Return number of unique rows in the hash table.
The number of unique rows in the hash table. exception: StandardException - Standard exception policy. |
|
|