/** @throws ReadDriverException TODO */ public void order() throws ReadDriverException { int rowCount = (int) dataSource.getRowCount(); columnCache = new Value[rowCount][fieldIndexes.length]; for (int field = 0; field < fieldIndexes.length; field++) { for (int i = 0; i < rowCount; i++) { columnCache[i][field] = dataSource.getFieldValue(i, fieldIndexes[field]); } } TreeSet set = new TreeSet(new SortComparator()); for (int i = 0; i < dataSource.getRowCount(); i++) { set.add(new Integer(i)); } orderIndexes = new long[(int) dataSource.getRowCount()]; int index = 0; Iterator it = set.iterator(); while (it.hasNext()) { Integer integer = (Integer) it.next(); orderIndexes[index] = integer.intValue(); index++; } }
/** @see com.hardcode.gdbms.engine.data.driver.ReadAccess#getFieldValue(long, int) */ public Value getFieldValue(long rowIndex, int fieldId) throws ReadDriverException { return dataSource.getFieldValue(orderIndexes[(int) rowIndex], fieldId); }