package org.teiid.test.bufferservice; import java.sql.SQLException; import java.util.Arrays; import java.util.List; import javax.sql.rowset.serial.SerialClob; import javax.sql.rowset.serial.SerialException; import org.teiid.common.buffer.BufferManager; import org.teiid.common.buffer.BufferManager.TupleSourceType; import org.teiid.common.buffer.TupleBatch; import org.teiid.common.buffer.TupleBuffer; import org.teiid.common.buffer.TupleBuffer.TupleBufferTupleSource; import org.teiid.common.buffer.impl.BufferFrontedFileStoreCache; import org.teiid.common.buffer.impl.BufferManagerImpl; import org.teiid.common.buffer.impl.MemoryStorageManager; import org.teiid.common.buffer.impl.SplittableStorageManager; import org.teiid.core.TeiidComponentException; import org.teiid.core.TeiidProcessingException; import org.teiid.core.types.ClobType; import org.teiid.core.types.DataTypeManager; import org.teiid.query.sql.symbol.ElementSymbol; public class TupleBufferTest { public static void main(String[] args) throws Exception { testInit(); testForwardOnly(); testReverseIteration(); testTruncate(); testTruncatePartial(); testLobHandling(); } static void testLobHandling() throws SerialException, SQLException, TeiidComponentException { ElementSymbol x = new ElementSymbol("x"); x.setType(DataTypeManager.DefaultDataClasses.CLOB); List<ElementSymbol> schema = Arrays.asList(x); BufferManagerImpl bm = new BufferManagerImpl(); MemoryStorageManager storageManager = new MemoryStorageManager(); SplittableStorageManager ssm = new SplittableStorageManager(storageManager); ssm.setMaxFileSizeDirect(MemoryStorageManager.MAX_FILE_SIZE); BufferFrontedFileStoreCache fsc = new BufferFrontedFileStoreCache(); fsc.setBufferManager(bm); fsc.setDirect(false); fsc.setMaxStorageObjectSize(1<<20); fsc.setMemoryBufferSpace(1<<21); fsc.setStorageManager(ssm); fsc.initialize(); bm.setCache(fsc); bm.initialize(); TupleBuffer tb = bm.createTupleBuffer(schema, "x", TupleSourceType.PROCESSOR); tb.setInlineLobs(false); ClobType c = new ClobType(new SerialClob(new char[0])); TupleBatch batch = new TupleBatch(1, new List[] {Arrays.asList(c)}); tb.addTupleBatch(batch, false); System.out.println(tb.getLobReference(c.getReferenceStreamId())); } static void testTruncatePartial() throws TeiidComponentException, TeiidProcessingException { ElementSymbol x = new ElementSymbol("x"); x.setType(DataTypeManager.DefaultDataClasses.INTEGER); List<ElementSymbol> schema = Arrays.asList(x); BufferManagerImpl bm = new BufferManagerImpl(); MemoryStorageManager storageManager = new MemoryStorageManager(); SplittableStorageManager ssm = new SplittableStorageManager(storageManager); ssm.setMaxFileSizeDirect(MemoryStorageManager.MAX_FILE_SIZE); BufferFrontedFileStoreCache fsc = new BufferFrontedFileStoreCache(); fsc.setBufferManager(bm); fsc.setDirect(false); fsc.setMaxStorageObjectSize(1<<20); fsc.setMemoryBufferSpace(1<<21); fsc.setStorageManager(ssm); fsc.initialize(); bm.setCache(fsc); bm.initialize(); TupleBuffer tb = bm.createTupleBuffer(schema, "x", TupleSourceType.PROCESSOR); tb.setBatchSize(64); for (int i = 0; i < 65; i++) { tb.addTuple(Arrays.asList(1)); } TupleBufferTupleSource tupleSource = tb.createIndexedTupleSource(); tupleSource.setReverse(true); while(tupleSource.hasNext()) { int index = tupleSource.getCurrentIndex(); List<?> source = tupleSource.nextTuple(); System.out.println(index + ": " + source); } TupleBatch batch = tb.getBatch(1); System.out.println(batch); System.out.println(batch.getTuples()); System.out.println(batch.getEndRow()); System.out.println(batch.getTerminationFlag()); System.out.println(); System.out.println(tb.getManagedRowCount()); System.out.println(tb.getRowCount()); tb.truncateTo(3); System.out.println(tb.getManagedRowCount()); System.out.println(tb.getRowCount()); System.out.println(); batch = tb.getBatch(3); System.out.println(batch); System.out.println(batch.getTuples()); System.out.println(batch.getEndRow()); System.out.println(batch.getTerminationFlag()); tupleSource = tb.createIndexedTupleSource(); tupleSource.setReverse(true); while(tupleSource.hasNext()) { int index = tupleSource.getCurrentIndex(); List<?> source = tupleSource.nextTuple(); System.out.println(index + ": " + source); } } static void testTruncate() throws TeiidComponentException, TeiidProcessingException { ElementSymbol x = new ElementSymbol("x"); x.setType(DataTypeManager.DefaultDataClasses.INTEGER); List<ElementSymbol> schema = Arrays.asList(x); BufferManagerImpl bm = new BufferManagerImpl(); MemoryStorageManager storageManager = new MemoryStorageManager(); SplittableStorageManager ssm = new SplittableStorageManager(storageManager); ssm.setMaxFileSizeDirect(MemoryStorageManager.MAX_FILE_SIZE); BufferFrontedFileStoreCache fsc = new BufferFrontedFileStoreCache(); fsc.setBufferManager(bm); fsc.setDirect(false); fsc.setMaxStorageObjectSize(1<<20); fsc.setMemoryBufferSpace(1<<21); fsc.setStorageManager(ssm); fsc.initialize(); bm.setCache(fsc); bm.initialize(); TupleBuffer tb = bm.createTupleBuffer(schema, "x", TupleSourceType.PROCESSOR); tb.setBatchSize(2); for (int i = 0; i < 5; i++) { tb.addTuple(Arrays.asList(1)); } TupleBufferTupleSource tupleSource = tb.createIndexedTupleSource(); tupleSource.setReverse(true); while(tupleSource.hasNext()) { int index = tupleSource.getCurrentIndex(); List<?> source = tupleSource.nextTuple(); System.out.println(index + ": " + source); } TupleBatch batch = tb.getBatch(1); System.out.println(batch); System.out.println(batch.getTuples()); System.out.println(batch.getEndRow()); System.out.println(batch.getTerminationFlag()); System.out.println(); tb.close(); System.out.println(tb.getManagedRowCount()); tb.truncateTo(3); System.out.println(tb.getManagedRowCount()); System.out.println(tb.getRowCount()); batch = tb.getBatch(3); System.out.println(batch); System.out.println(batch.getTerminationFlag()); tb.truncateTo(2); System.out.println(tb.getManagedRowCount()); System.out.println(tb.getRowCount()); batch = tb.getBatch(3); System.out.println(batch); System.out.println(batch.getTerminationFlag()); tupleSource = tb.createIndexedTupleSource(); tupleSource.setReverse(true); while(tupleSource.hasNext()) { int index = tupleSource.getCurrentIndex(); List<?> source = tupleSource.nextTuple(); System.out.println(index + ": " + source); } } static void testReverseIteration() throws TeiidComponentException, TeiidProcessingException { ElementSymbol x = new ElementSymbol("x"); x.setType(DataTypeManager.DefaultDataClasses.INTEGER); List<ElementSymbol> schema = Arrays.asList(x); BufferManager bm = new BufferManagerImpl(); TupleBuffer tb = bm.createTupleBuffer(schema, "x", TupleSourceType.PROCESSOR); tb.addTuple(Arrays.asList(1, 2, 3)); tb.addTuple(Arrays.asList(2, 3, 4)); TupleBufferTupleSource tupleSource = tb.createIndexedTupleSource(); tupleSource.setReverse(true); while(tupleSource.hasNext()) { int index = tupleSource.getCurrentIndex(); List<?> source = tupleSource.nextTuple(); System.out.println(index + ": " + source); } tupleSource.closeSource(); } static void testInit() throws TeiidComponentException { ElementSymbol x = new ElementSymbol("x"); x.setType(DataTypeManager.DefaultDataClasses.INTEGER); List<ElementSymbol> schema = Arrays.asList(x); TupleBuffer tupleBuffer = new TupleBuffer(null, "1", schema, null,100); tupleBuffer.setInlineLobs(false); tupleBuffer.setForwardOnly(true); tupleBuffer.addTuple(Arrays.asList(1, 2, 3)); tupleBuffer.addTuple(Arrays.asList(1, 2, 3)); System.out.println(tupleBuffer.getBatch(1).getTuples()); } static void testForwardOnly() throws TeiidComponentException { ElementSymbol x = new ElementSymbol("x"); x.setType(DataTypeManager.DefaultDataClasses.INTEGER); List<ElementSymbol> schema = Arrays.asList(x); BufferManagerImpl bm = new BufferManagerImpl(); TupleBuffer tb = bm.createTupleBuffer(schema, "x", TupleSourceType.PROCESSOR); tb.setForwardOnly(true); tb.addTuple(Arrays.asList(1, 2, 3)); TupleBatch batch = tb.getBatch(1); System.out.println(batch.getTerminationFlag()); System.out.println(batch.getBeginRow()); System.out.println(batch.getTuples()); tb.addTuple(Arrays.asList(1, 2, 3, 4, 5, 6)); batch = tb.getBatch(2); System.out.println(batch.getTerminationFlag()); System.out.println(batch.getBeginRow()); System.out.println(batch.getTuples()); tb.addTuple(Arrays.asList(1, 2, 3)); batch = tb.getBatch(3); System.out.println(batch.getTerminationFlag()); System.out.println(batch.getBeginRow()); System.out.println(batch.getTuples()); } }