001: /*
002:
003: Derby - Class org.apache.derby.impl.store.access.BackingStoreHashTableFromScan
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to you under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.impl.store.access;
023:
024: import org.apache.derby.iapi.services.sanity.SanityManager;
025:
026: import org.apache.derby.iapi.error.StandardException;
027:
028: import org.apache.derby.iapi.store.access.conglomerate.ScanManager;
029:
030: import org.apache.derby.iapi.store.access.Qualifier;
031: import org.apache.derby.iapi.store.access.RowSource;
032: import org.apache.derby.iapi.store.access.TransactionController;
033:
034: import org.apache.derby.iapi.types.DataValueDescriptor;
035:
036: import org.apache.derby.iapi.store.access.BackingStoreHashtable;
037: import org.apache.derby.iapi.services.io.FormatableBitSet;
038:
039: import java.util.Properties;
040:
041: /**
042:
043: Extend BackingStoreHashtable with the ability to maintain the underlying
044: openScan() until the hashtable has been closed. This is necessary for
045: long row access. Access to long row delays actual objectification until
046: the columns are accessed, but depends on the underlying table to be still
047: open when the column is accessed.
048:
049: <P>
050: Transactions are obtained from an AccessFactory.
051: @see BackingStoreHashtable
052:
053: **/
054:
055: class BackingStoreHashTableFromScan extends BackingStoreHashtable {
056:
057: /**************************************************************************
058: * Fields of the class
059: **************************************************************************
060: */
061: private ScanManager open_scan;
062:
063: /**************************************************************************
064: * Constructors for This class:
065: **************************************************************************
066: */
067: public BackingStoreHashTableFromScan(TransactionController tc,
068: long conglomId, int open_mode, int lock_level,
069: int isolation_level, FormatableBitSet scanColumnList,
070: DataValueDescriptor[] startKeyValue,
071: int startSearchOperator, Qualifier qualifier[][],
072: DataValueDescriptor[] stopKeyValue, int stopSearchOperator,
073: long max_rowcnt, int[] key_column_numbers,
074: boolean remove_duplicates, long estimated_rowcnt,
075: long max_inmemory_rowcnt, int initialCapacity,
076: float loadFactor, boolean collect_runtimestats,
077: boolean skipNullKeyColumns) throws StandardException {
078:
079: super (tc, (RowSource) null, key_column_numbers,
080: remove_duplicates, estimated_rowcnt,
081: max_inmemory_rowcnt, initialCapacity, loadFactor,
082: skipNullKeyColumns, false /* Do not keep the hash table after a commit. */);
083:
084: open_scan = (ScanManager) tc.openScan(conglomId, false,
085: open_mode, lock_level, isolation_level, scanColumnList,
086: startKeyValue, startSearchOperator, qualifier,
087: stopKeyValue, stopSearchOperator);
088:
089: open_scan.fetchSet(max_rowcnt, key_column_numbers, this );
090:
091: if (collect_runtimestats) {
092: Properties prop = new Properties();
093: open_scan.getScanInfo().getAllScanInfo(prop);
094: this .setAuxillaryRuntimeStats(prop);
095: prop = null;
096: }
097: }
098:
099: /**************************************************************************
100: * Private/Protected methods of This class:
101: **************************************************************************
102: */
103:
104: /**************************************************************************
105: * Public Methods of This class:
106: **************************************************************************
107: */
108:
109: /**
110: * Close the BackingStoreHashtable.
111: * <p>
112: * Perform any necessary cleanup after finishing with the hashtable. Will
113: * deallocate/dereference objects as necessary. If the table has gone
114: * to disk this will drop any on disk files used to support the hash table.
115: * <p>
116: *
117: * @exception StandardException Standard exception policy.
118: **/
119: public void close() throws StandardException {
120: open_scan.close();
121:
122: super .close();
123:
124: return;
125: }
126:
127: /**************************************************************************
128: * Public Methods of XXXX class:
129: **************************************************************************
130: */
131: }
|