[teiid-commits] teiid SVN: r2966 - in trunk/engine/src: test/java/org/teiid/dqp/internal/process and 1 other directories.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Fri Mar 4 12:34:03 EST 2011
Author: shawkins
Date: 2011-03-04 12:34:03 -0500 (Fri, 04 Mar 2011)
New Revision: 2966
Modified:
trunk/engine/src/main/java/org/teiid/query/processor/relational/AccessNode.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java
trunk/engine/src/test/java/org/teiid/dqp/service/AutoGenDataService.java
Log:
TEIID-1473 adding engine compensation for non-pushed limits
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/AccessNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/AccessNode.java 2011-03-04 17:12:16 UTC (rev 2965)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/AccessNode.java 2011-03-04 17:34:03 UTC (rev 2966)
@@ -196,9 +196,8 @@
int limit = -1;
if (getParent() instanceof LimitNode) {
LimitNode parent = (LimitNode)getParent();
- limit = parent.getLimit() + parent.getOffset();
- if (limit < parent.getLimit()) {
- limit = -1; //guard against overflow
+ if (parent.getLimit() > 0) {
+ limit = parent.getLimit() + parent.getOffset();
}
}
tupleSource = getDataManager().registerRequest(getContext(), atomicCommand, modelName, connectorBindingId, getID(), limit);
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java 2011-03-04 17:12:16 UTC (rev 2965)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java 2011-03-04 17:34:03 UTC (rev 2966)
@@ -44,21 +44,26 @@
import org.teiid.dqp.internal.process.AbstractWorkItem.ThreadState;
import org.teiid.dqp.service.AutoGenDataService;
import org.teiid.dqp.service.FakeBufferService;
+import org.teiid.query.optimizer.TestOptimizer;
+import org.teiid.query.optimizer.capabilities.BasicSourceCapabilities;
+import org.teiid.query.optimizer.capabilities.SourceCapabilities.Capability;
import org.teiid.query.unittest.FakeMetadataFactory;
public class TestDQPCore {
private DQPCore core;
+ private AutoGenDataService agds;
@Before public void setUp() throws Exception {
+ agds = new AutoGenDataService();
DQPWorkContext context = FakeMetadataFactory.buildWorkContext(FakeMetadataFactory.exampleBQT());
context.getVDB().getModel("BQT3").setVisible(false); //$NON-NLS-1$
context.getVDB().getModel("VQT").setVisible(false); //$NON-NLS-1$
ConnectorManagerRepository repo = Mockito.mock(ConnectorManagerRepository.class);
context.getVDB().addAttchment(ConnectorManagerRepository.class, repo);
- Mockito.stub(repo.getConnectorManager(Mockito.anyString())).toReturn(new AutoGenDataService());
+ Mockito.stub(repo.getConnectorManager(Mockito.anyString())).toReturn(agds);
core = new DQPCore();
core.setBufferService(new FakeBufferService());
@@ -167,6 +172,23 @@
helpExecute(sql, "a"); //$NON-NLS-1$
}
+ @Test public void testLimitCompensation() throws Exception {
+ String sql = "SELECT * FROM VQT.SmallA_2589g LIMIT 1, 1"; //$NON-NLS-1$
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.ROW_LIMIT, true);
+ agds.setCaps(caps);
+ ResultsMessage rm = helpExecute(sql, "a"); //$NON-NLS-1$
+ //we test for > 0 here because the autogen service doesn't obey the limit
+ assertTrue(rm.getResults().length > 0);
+ }
+
+ @Test public void testLimitCompensation1() throws Exception {
+ String sql = "SELECT * FROM VQT.SmallA_2589g LIMIT 1, 1"; //$NON-NLS-1$
+ ResultsMessage rm = helpExecute(sql, "a"); //$NON-NLS-1$
+ assertEquals(1, rm.getResults().length);
+ }
+
+
/**
* Tests whether an exception result is sent when an exception occurs
* @since 4.3
Modified: trunk/engine/src/test/java/org/teiid/dqp/service/AutoGenDataService.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/service/AutoGenDataService.java 2011-03-04 17:12:16 UTC (rev 2965)
+++ trunk/engine/src/test/java/org/teiid/dqp/service/AutoGenDataService.java 2011-03-04 17:34:03 UTC (rev 2966)
@@ -58,6 +58,10 @@
super("FakeConnector","FakeConnector"); //$NON-NLS-1$ //$NON-NLS-2$
caps = TestOptimizer.getTypicalCapabilities();
}
+
+ public void setCaps(SourceCapabilities caps) {
+ this.caps = caps;
+ }
public void setRows(int rows) {
this.rows = rows;
More information about the teiid-commits
mailing list