private String getNextRecordFromHash() throws IOException {
		if (this.results.isEmpty())
			return null;
		
		RandomAccessFile randomAccessFile = heapFile.randomAccessFile;
		byte[] buff = null;
		outer:
			while (!this.results.isEmpty()) {
				Long top = this.results.remove(0);
				randomAccessFile.seek(top);
				buff = new byte[this.header.getSizeOfRecord()];
				randomAccessFile.read(buff);
				
				int offset = 0;
				int attributeNumber = 1;
				for (Attribute attribute: schema) {
					int size = attribute.getSize();
					char type = attribute.getType();
					int attributeCode = Utilities.getIntDatatypeCode(type, size);

					for (Condition condition : selectionList) {
						if (condition.column != attributeNumber || condition.isHashCondition) 
							continue;
						byte[] byteFormat = getAsByteArray(type, condition, size);
						int result = types[attributeCode].compare(buff, offset, byteFormat, 0, size);

						if (!satisfyCondition(result, condition.operation)) {
							continue outer;
						}
					}
					offset += size;
					attributeNumber++;
				}
				/* We have a valid record. Return it */
				if (this.projectionList.isEmpty())
					return project(buff, null);
				else 
					return project(buff, this.projectionList);
			}
		return null;
	}