package org.reldb.rel.v0.storage.temporary; import java.util.Iterator; import org.reldb.rel.v0.storage.RelDatabase; import org.reldb.rel.v0.values.TupleIterator; import org.reldb.rel.v0.values.ValueTuple; public class TempTableImplementation implements TempTable { // TODO - this should either be tunable or dynamic private static final long storageMemoryLimit = 100; private TempTable storageImplementation; private long storageCount = 0; private RelDatabase database; public TempTableImplementation(RelDatabase db) { database = db; storageImplementation = new TempTableMemory(); } /* (non-Javadoc) * @see org.reldb.rel.v0.storage.TempStorageTuplesInterface#close() */ @Override public void close() { storageImplementation.close(); } @Override public void put(ValueTuple dataTuple) { storageImplementation.put(dataTuple); storageCount++; if (storageCount == storageMemoryLimit) { TempTable target = new TempTableDisk(database); Iterator<ValueTuple> source = ((TempTableMemory)storageImplementation).iterator(); while (source.hasNext()) target.put(source.next()); storageImplementation.close(); storageImplementation = target; } } // Get a TupleIterator on values /* (non-Javadoc) * @see org.reldb.rel.v0.storage.TempStorageTuplesInterface#keys() */ @Override public TupleIterator values() { return storageImplementation.values(); } }