01: /*
02:
03: Derby - Class org.apache.derby.impl.store.access.sort.SortBufferScan
04:
05: Licensed to the Apache Software Foundation (ASF) under one or more
06: contributor license agreements. See the NOTICE file distributed with
07: this work for additional information regarding copyright ownership.
08: The ASF licenses this file to you under the Apache License, Version 2.0
09: (the "License"); you may not use this file except in compliance with
10: the License. You may obtain a copy of the License at
11:
12: http://www.apache.org/licenses/LICENSE-2.0
13:
14: Unless required by applicable law or agreed to in writing, software
15: distributed under the License is distributed on an "AS IS" BASIS,
16: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17: See the License for the specific language governing permissions and
18: limitations under the License.
19:
20: */
21:
22: package org.apache.derby.impl.store.access.sort;
23:
24: import org.apache.derby.iapi.services.sanity.SanityManager;
25:
26: import org.apache.derby.iapi.error.StandardException;
27: import org.apache.derby.iapi.store.access.ScanController;
28: import org.apache.derby.iapi.store.access.conglomerate.TransactionManager;
29:
30: /**
31:
32: A sort scan that just reads rows out of a sorter.
33:
34: **/
35:
36: public class SortBufferScan extends SortScan {
37: /**
38: The sorter we're returning rows from.
39: **/
40: protected SortBuffer sortBuffer;
41:
42: /*
43: * Constructors.
44: */
45:
46: SortBufferScan(MergeSort sort, TransactionManager tran,
47: SortBuffer sortBuffer, boolean hold) {
48: super (sort, tran, hold);
49:
50: if (SanityManager.DEBUG)
51: SanityManager.ASSERT(sortBuffer != null);
52:
53: this .sortBuffer = sortBuffer;
54: }
55:
56: /*
57: * Methods of MergeSortScan
58: */
59:
60: /**
61: Move to the next position in the scan.
62: @see ScanController#next
63: **/
64: public boolean next() throws StandardException {
65: if (SanityManager.DEBUG) {
66: SanityManager.ASSERT(sortBuffer != null,
67: "next() called on scan after scan was closed.");
68: }
69:
70: super .current = sortBuffer.removeFirst();
71: return (super .current != null);
72: }
73:
74: /**
75: Close the scan.
76: **/
77: public boolean closeForEndTransaction(boolean closeHeldScan) {
78: if (closeHeldScan || !hold) {
79: close();
80: return (true);
81: } else {
82: return (false);
83: }
84:
85: }
86:
87: /**
88: Close the scan.
89: @see ScanController#close
90: **/
91: public void close() {
92: if (super.sort != null) {
93: sort.doneScanning(this, sortBuffer);
94: sortBuffer = null;
95: }
96: super.close();
97: }
98:
99: }
|