code: @Override
  	public void beforeFirst(SearchRange searchRange) {
  		close();
  		// support the equality query only
  		if (!searchRange.isSingleValue())
  			throw new UnsupportedOperationException();
  
  		this.searchKey = searchRange.asSearchKey();
  		int bucket = searchKey.hashCode() % NUM_BUCKETS;
  		String tblname = ii.indexName() + bucket;
  		TableInfo ti = new TableInfo(tblname, schema(keyType));
  
  		// the underlying record file should not perform logging
  		this.rf = ti.open(tx, false);
  
  		// initialize the file header if needed
  		if (rf.fileSize() == 0)
  			RecordFile.formatFileHeader(ti.fileName(), tx);
  		rf.beforeFirst();
  	}
docs: Positions the index before the first index record having the specified
  search key. The method hashes the search key to determine the bucket, and
  then opens a {@link RecordFile} on the file corresponding to the bucket.
  The record file for the previous bucket (if any) is closed.
  
  @see Index#beforeFirst(SearchRange)