Author: shawkins
Date: 2011-07-25 13:39:32 -0400 (Mon, 25 Jul 2011)
New Revision: 3333
Modified:
branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java
branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestProcessor.java
Log:
TEIID-1681 fix for pushing limits too far with procedure executions
Modified:
branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java
===================================================================
---
branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java 2011-07-25
15:46:41 UTC (rev 3332)
+++
branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java 2011-07-25
17:39:32 UTC (rev 3333)
@@ -51,6 +51,7 @@
import org.teiid.query.sql.symbol.Constant;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.Function;
+import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.SearchedCaseExpression;
import org.teiid.query.sql.visitor.EvaluatableVisitor;
import org.teiid.query.util.CommandContext;
@@ -168,6 +169,13 @@
}
case NodeConstants.Types.SOURCE:
{
+ GroupSymbol virtualGroup = child.getGroups().iterator().next();
+ if (virtualGroup.isProcedure()) {
+ return false;
+ }
+ if (FrameUtil.isProcedure(child.getFirstChild())) {
+ return false;
+ }
return true;
}
default:
Modified:
branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestProcessor.java
===================================================================
---
branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestProcessor.java 2011-07-25
15:46:41 UTC (rev 3332)
+++
branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestProcessor.java 2011-07-25
17:39:32 UTC (rev 3333)
@@ -7549,5 +7549,15 @@
helpProcess(plan, dataManager, new List[] {Arrays.asList(1, 1)});
}
+ @Test public void testUnorderedLimitWithProc() throws Exception {
+ String sql = "select e1 from (exec pm1.sq1()) x limit 1";
+
+ FakeDataManager dataManager = new FakeDataManager();
+ sampleData1(dataManager);
+ ProcessorPlan plan = helpGetPlan(sql, RealMetadataFactory.example1Cached(),
TestOptimizer.getGenericFinder());
+
+ helpProcess(plan, dataManager, new List[] {Arrays.asList("a")});
+ }
+
private static final boolean DEBUG = false;
}
Show replies by date