[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