[teiid-commits] teiid SVN: r2163 - in trunk/engine/src: test/java/org/teiid/common/buffer and 1 other directory.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Fri May 28 00:06:57 EDT 2010


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());
+	}
+	
 }



More information about the teiid-commits mailing list