project 4 skeleton
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
package relop;
|
||||
|
||||
import global.RID;
|
||||
import heap.HeapFile;
|
||||
import heap.HeapScan;
|
||||
|
||||
/**
|
||||
* Wrapper for heap file scan, the most basic access method. This "iterator"
|
||||
* version takes schema into consideration and generates real tuples.
|
||||
*/
|
||||
public class FileScan extends Iterator {
|
||||
|
||||
private HeapFile file = null; // needed for restart(), getFile();
|
||||
private HeapScan scan = null;
|
||||
private RID rid = null;
|
||||
private boolean isOpen;
|
||||
|
||||
/**
|
||||
* Constructs a file scan, given the schema and heap file.
|
||||
*/
|
||||
public FileScan(Schema aSchema, HeapFile aFile) {
|
||||
this.schema = aSchema;
|
||||
this.file = aFile;
|
||||
this.scan = file.openScan();
|
||||
this.rid = new RID();
|
||||
isOpen = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gives a one-line explanation of the iterator, repeats the call on any
|
||||
* child iterators, and increases the indent depth along the way.
|
||||
*/
|
||||
public void explain(int depth) {
|
||||
for(int i = 0; i < depth; i++){
|
||||
System.out.printf(" ");
|
||||
}
|
||||
System.out.printf("FileScan\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* Restarts the iterator, i.e. as if it were just constructed.
|
||||
*/
|
||||
public void restart() {
|
||||
scan.close();
|
||||
scan = file.openScan();
|
||||
//rid = new RID();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the iterator is open; false otherwise.
|
||||
*/
|
||||
public boolean isOpen() {
|
||||
return isOpen;
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes the iterator, releasing any resources (i.e. pinned pages).
|
||||
*/
|
||||
public void close() {
|
||||
scan.close();
|
||||
isOpen = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if there are more tuples, false otherwise.
|
||||
*/
|
||||
public boolean hasNext() {
|
||||
return scan.hasNext();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the next tuple in the iteration.
|
||||
*
|
||||
* @throws IllegalStateException if no more tuples
|
||||
*/
|
||||
public Tuple getNext() {
|
||||
return new Tuple(schema, scan.getNext(rid));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the RID of the last tuple returned.
|
||||
*/
|
||||
public RID getLastRID() {
|
||||
return rid;
|
||||
}
|
||||
|
||||
// getter; added so HashJoin doesn't have to copy the file;
|
||||
public HeapFile getFile(){
|
||||
return file;
|
||||
}
|
||||
|
||||
} // public class FileScan extends Iterator
|
||||
Reference in New Issue
Block a user