protected void finalize() { if (!SysProperties.runFinalize) { return; } close(); }
public Value[] next() throws SQLException { return sort != null ? nextSorted() : nextUnsorted(); }
private Value[] nextSorted() throws SQLException { int next = -1; for (int i = 0; i < tapes.size(); i++) { ResultDiskTape tape = getTape(i); if (tape.buffer.size() == 0 && tape.pos < tape.end) { file.seek(tape.pos); for (int j = 0; tape.pos < tape.end && j < READ_AHEAD; j++) { readRow(tape); } } if (tape.buffer.size() > 0) { if (next == -1) { next = i; } else if (compareTapes(tape, getTape(next)) < 0) { next = i; } } } ResultDiskTape t = getTape(next); Value[] row = (Value[]) t.buffer.get(0); t.buffer.remove(0); return row; }
public void addRow(Value[] values) throws SQLException { if (distinct) { if (distinctRows != null) { ValueArray array = ValueArray.get(values); distinctRows.put(array, values); rowCount = distinctRows.size(); if (rowCount > SysProperties.MAX_MEMORY_ROWS_DISTINCT && session.getDatabase().isPersistent()) { disk = new ResultTempTable(session, sort, values.length); disk.addRows(distinctRows.values()); distinctRows = null; } } else { rowCount = disk.addRow(values); } return; } rows.add(values); rowCount++; if (rows.size() > maxMemoryRows && session.getDatabase().isPersistent()) { if (disk == null) { disk = new ResultDiskBuffer(session, sort, values.length); } addRowsToDisk(); } }
public void reset() { if (sort != null) { for (int i = 0; i < tapes.size(); i++) { ResultDiskTape tape = getTape(i); tape.pos = tape.start; tape.buffer = new ObjectArray(); } } else { mainTape.pos = FileStore.HEADER_LENGTH; } }
private Value[] nextUnsorted() throws SQLException { file.seek(mainTape.pos); if (mainTape.buffer.size() == 0) { for (int j = 0; mainTape.pos < mainTape.end && j < READ_AHEAD; j++) { readRow(mainTape); } } Value[] row = (Value[]) mainTape.buffer.get(0); mainTape.buffer.remove(0); return row; }
disk = new ResultDiskBuffer(session, sort, list.length);