Author: shawkins
Date: 2010-05-28 00:06:56 -0400 (Fri, 28 May 2010)
New Revision: 2163
Modified:
trunk/engine/src/main/java/org/teiid/common/buffer/TupleBuffer.java
trunk/engine/src/test/java/org/teiid/common/buffer/TestTupleBuffer.java
Log:
TEIID-913 ensuring that even if the batch contents are not added that lob references are
still captured
Modified: trunk/engine/src/main/java/org/teiid/common/buffer/TupleBuffer.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/common/buffer/TupleBuffer.java 2010-05-28
04:03:59 UTC (rev 2162)
+++ trunk/engine/src/main/java/org/teiid/common/buffer/TupleBuffer.java 2010-05-28
04:06:56 UTC (rev 2163)
@@ -194,6 +194,10 @@
}
}
+ public boolean isLobs() {
+ return lobs;
+ }
+
public void addTuple(List<?> tuple) throws TeiidComponentException {
if (lobs) {
correctLobReferences(new List[] {tuple});
@@ -219,6 +223,9 @@
for (List<?> tuple : batch.getAllTuples()) {
addTuple(tuple);
}
+ } else {
+ //add the lob references only, since they may still be referenced later
+ correctLobReferences(batch.getAllTuples());
}
}
Modified: trunk/engine/src/test/java/org/teiid/common/buffer/TestTupleBuffer.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/common/buffer/TestTupleBuffer.java 2010-05-28
04:03:59 UTC (rev 2162)
+++ trunk/engine/src/test/java/org/teiid/common/buffer/TestTupleBuffer.java 2010-05-28
04:06:56 UTC (rev 2163)
@@ -27,46 +27,47 @@
import java.util.Arrays;
import java.util.List;
+import javax.sql.rowset.serial.SerialClob;
+
import org.junit.Test;
-import org.teiid.common.buffer.BatchManager;
-import org.teiid.common.buffer.TupleBatch;
-import org.teiid.common.buffer.TupleBuffer;
import org.teiid.core.TeiidComponentException;
+import org.teiid.core.types.ClobType;
import org.teiid.core.types.DataTypeManager;
import org.teiid.query.sql.symbol.ElementSymbol;
public class TestTupleBuffer {
+ private final class FakeBatchManager implements BatchManager {
+ @Override
+ public void remove() {
+
+ }
+
+ @Override
+ public ManagedBatch createManagedBatch(final TupleBatch batch)
+ throws TeiidComponentException {
+ return new ManagedBatch() {
+
+ @Override
+ public void remove() {
+
+ }
+
+ @Override
+ public TupleBatch getBatch(boolean cache, String[] types)
+ throws TeiidComponentException {
+ return batch;
+ }
+ };
+ }
+ }
+
@Test public void testForwardOnly() throws Exception {
ElementSymbol x = new ElementSymbol("x"); //$NON-NLS-1$
x.setType(DataTypeManager.DefaultDataClasses.INTEGER);
List<ElementSymbol> schema = Arrays.asList(x);
- TupleBuffer tb = new TupleBuffer(new BatchManager() {
-
- @Override
- public void remove() {
-
- }
-
- @Override
- public ManagedBatch createManagedBatch(final TupleBatch batch)
- throws TeiidComponentException {
- return new ManagedBatch() {
-
- @Override
- public void remove() {
-
- }
-
- @Override
- public TupleBatch getBatch(boolean cache, String[] types)
- throws TeiidComponentException {
- return batch;
- }
- };
- }
- }, "x", schema, 32); //$NON-NLS-1$
+ TupleBuffer tb = new TupleBuffer(new FakeBatchManager(), "x", schema, 32);
//$NON-NLS-1$
tb.setForwardOnly(true);
tb.addTuple(Arrays.asList(1));
TupleBatch batch = tb.getBatch(1);
@@ -85,4 +86,15 @@
assertEquals(2, batch.getBeginRow());
}
+ @Test public void testLobHandling() throws Exception {
+ ElementSymbol x = new ElementSymbol("x"); //$NON-NLS-1$
+ x.setType(DataTypeManager.DefaultDataClasses.CLOB);
+ List<ElementSymbol> schema = Arrays.asList(x);
+ TupleBuffer tb = new TupleBuffer(new FakeBatchManager(), "x", schema, 32);
//$NON-NLS-1$
+ ClobType c = new ClobType(new SerialClob(new char[0]));
+ TupleBatch batch = new TupleBatch(0, new List[] {Arrays.asList(c)});
+ tb.addTupleBatch(batch, false);
+ assertNotNull(c.getReferenceStreamId());
+ }
+
}
Show replies by date