Skip to content

Commit

Permalink
TEIID-4335: No buffer when close is called (fixing the npe)
Browse files Browse the repository at this point in the history
  • Loading branch information
shawkins authored and johnathonlee committed Jul 15, 2016
1 parent 3058d6b commit 3ebfe7a
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 1 deletion.
2 changes: 2 additions & 0 deletions build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html
Expand Up @@ -338,6 +338,8 @@ <h4>from ${project.version}</h4>
</li>
<li>[<a href='https://issues.jboss.org/browse/TEIID-4324'>TEIID-4324</a>] - TEIID30019 Unexpected exception for request ... java.lang.AssertionError: Batch not found in storage (correcting clean up logic)
</li>
<li>[<a href='https://issues.jboss.org/browse/TEIID-4335'>TEIID-4335</a>] - No buffer when close is called (fixing the npe)
</li>
</ul>

<h4>from 8.7.7.6_2</h4>
Expand Down
Expand Up @@ -196,7 +196,8 @@ void close(boolean removeBuffer) {
}
processor.requestCanceled();
processor.closeProcessing();
if (removeBuffer) {
//check that the collector has it's own buffer
if (removeBuffer && collector.getTupleBuffer() != null) {
collector.getTupleBuffer().remove();
}
processor = null;
Expand Down
Expand Up @@ -25,10 +25,15 @@
import static org.junit.Assert.*;
import static org.teiid.query.optimizer.TestOptimizer.*;

import java.util.Arrays;
import java.util.List;

import org.junit.Test;
import org.teiid.common.buffer.TupleSource;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TransformationMetadata;
import org.teiid.query.optimizer.TestOptimizer.AntiSemiJoin;
import org.teiid.query.optimizer.TestOptimizer.ComparisonMode;
import org.teiid.query.optimizer.TestOptimizer.SemiJoin;
Expand All @@ -38,8 +43,10 @@
import org.teiid.query.optimizer.capabilities.SourceCapabilities.Capability;
import org.teiid.query.processor.HardcodedDataManager;
import org.teiid.query.processor.ProcessorPlan;
import org.teiid.query.processor.RegisterRequestParameter;
import org.teiid.query.processor.TestProcessor;
import org.teiid.query.rewriter.TestQueryRewriter;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.unittest.RealMetadataFactory;
import org.teiid.query.util.CommandContext;
import org.teiid.query.util.Options;
Expand Down Expand Up @@ -1210,5 +1217,57 @@ void checkJoinCounts(ProcessorPlan plan, int semi, int antiSemi) {

TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}

@Test public void testSubqueryProducingBuffer() throws Exception {
TransformationMetadata tm = RealMetadataFactory.example1Cached();

String sql = "SELECT e1, (select e2 from pm2.g1 where e1 = pm1.g1.e1 order by e2 limit 1) from pm1.g1 limit 1";

BasicSourceCapabilities bsc = getTypicalCapabilities();
bsc.setCapabilitySupport(Capability.QUERY_ORDERBY, false);

ProcessorPlan plan = TestOptimizer.helpPlan(sql, //$NON-NLS-1$
tm, null, new DefaultCapabilitiesFinder(bsc),
new String[] {
"SELECT g_0.e1 FROM pm1.g1 AS g_0"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$

HardcodedDataManager hdm = new HardcodedDataManager(tm) {

@Override
public TupleSource registerRequest(CommandContext context,
Command command, String modelName,
RegisterRequestParameter parameterObject)
throws TeiidComponentException {
if (command.toString().equals("SELECT g_0.e2 FROM pm2.g1 AS g_0 WHERE g_0.e1 = 'a'")) {
return new TupleSource() {

@Override
public List<?> nextTuple() throws TeiidComponentException,
TeiidProcessingException {
throw new TeiidProcessingException("something's wrong");
}

@Override
public void closeSource() {

}
};
}
return super.registerRequest(context, command, modelName, parameterObject);
}

};
hdm.addData("SELECT g_0.e1 FROM g1 AS g_0", Arrays.asList("a"));
hdm.setBlockOnce(true);

CommandContext cc = TestProcessor.createCommandContext();
cc.setMetadata(tm);
try {
TestProcessor.helpProcess(plan, cc, hdm, new List[] {Arrays.asList(2)} );
fail();
} catch (TeiidProcessingException e) {
assert(e.getMessage().contains("something's wrong"));
}
}

}

0 comments on commit 3ebfe7a

Please sign in to comment.