[teiid-commits] teiid SVN: r3582 - in branches/7.4.x/engine/src: test/java/org/teiid/query/processor and 1 other directory.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Tue Oct 25 14:22:50 EDT 2011
Author: shawkins
Date: 2011-10-25 14:22:50 -0400 (Tue, 25 Oct 2011)
New Revision: 3582
Modified:
branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java
branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestDependentJoins.java
Log:
TEIID-1791 correct the dependent join indexing logic
Modified: branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java
===================================================================
--- branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java 2011-10-25 16:43:31 UTC (rev 3581)
+++ branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java 2011-10-25 18:22:50 UTC (rev 3582)
@@ -298,8 +298,8 @@
List<SetState> source = sources.get(i);
- if (i == currentIndex++) {
-
+ if (i == currentIndex) {
+ currentIndex++;
int doneCount = 0;
while (doneCount < source.size()) {
Modified: branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestDependentJoins.java
===================================================================
--- branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestDependentJoins.java 2011-10-25 16:43:31 UTC (rev 3581)
+++ branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestDependentJoins.java 2011-10-25 18:22:50 UTC (rev 3582)
@@ -638,6 +638,44 @@
helpTestLargeSetInDepAccessMultiJoinCriteria(1, 10, 2, 2);
}
+ @Test public void testLargeSetMultipleDependentSources() throws Exception {
+ String sql = "SELECT pm1.g1.e1 FROM pm1.g1, pm2.g1 makedep, /*+ makeind */ pm1.g2 where pm1.g1.e1=pm2.g1.e1 AND pm1.g2.e2=pm2.g1.e2 order by e1"; //$NON-NLS-1$
+
+ // Plan query
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities depcaps = new BasicSourceCapabilities();
+ depcaps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, 1);
+ depcaps.setSourceProperty(Capability.MAX_DEPENDENT_PREDICATES, 3);
+
+ BasicSourceCapabilities caps = new BasicSourceCapabilities();
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+ capFinder.addCapabilities("pm2", depcaps); //$NON-NLS-1$
+
+ List[] expected = new List[] {
+ Arrays.asList("a"), //$NON-NLS-1$
+ Arrays.asList("a"), //$NON-NLS-1$
+ };
+
+ Command command = TestProcessor.helpParse(sql);
+ ProcessorPlan plan = TestProcessor.helpGetPlan(command, RealMetadataFactory.example1Cached(), capFinder);
+ TestOptimizer.checkAtomicQueries(new String[] {
+ "SELECT pm1.g2.e2 FROM pm1.g2",
+ "SELECT pm2.g1.e1, pm2.g1.e2 FROM pm2.g1 WHERE (pm2.g1.e1 IN (<dependent values>)) AND (pm2.g1.e2 IN (<dependent values>))",
+ "SELECT pm1.g1.e1 FROM pm1.g1"
+ }, plan);
+
+ HardcodedDataManager dataManager = new HardcodedDataManager();
+ dataManager.addData("SELECT pm1.g1.e1 FROM pm1.g1", new List<?>[] {Arrays.asList("a")});
+ dataManager.addData("SELECT pm1.g2.e2 FROM pm1.g2", new List<?>[] {Arrays.asList(1), Arrays.asList(2), Arrays.asList(3)});
+ dataManager.addData("SELECT pm2.g1.e1, pm2.g1.e2 FROM pm2.g1 WHERE (pm2.g1.e1 = 'a') AND ((pm2.g1.e2 = 1) OR (pm2.g1.e2 = 2))", new List<?>[] {Arrays.asList("a", 1)});
+ dataManager.addData("SELECT pm2.g1.e1, pm2.g1.e2 FROM pm2.g1 WHERE (pm2.g1.e1 = 'a') AND (pm2.g1.e2 = 3)", new List<?>[] {Arrays.asList("a", 3)});
+ CommandContext cc = TestProcessor.createCommandContext();
+ TestProcessor.helpProcess(plan, cc, dataManager, expected);
+ }
+
/**
* concurrentOpen will be minimum of 2 to gather the pm1 results.
*/
@@ -648,10 +686,6 @@
FakeDataManager dataManager = new FakeDataManager();
TestProcessor.sampleData1(dataManager);
- // Slightly modify metadata to set max set size to just a few rows - this
- // will allow us to test the dependent overflow case
- QueryMetadataInterface fakeMetadata = RealMetadataFactory.example1Cached();
-
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities depcaps = new BasicSourceCapabilities();
@@ -679,7 +713,7 @@
};
Command command = TestProcessor.helpParse(sql);
- ProcessorPlan plan = TestProcessor.helpGetPlan(command, fakeMetadata, capFinder);
+ ProcessorPlan plan = TestProcessor.helpGetPlan(command, RealMetadataFactory.example1Cached(), capFinder);
TestOptimizer.checkAtomicQueries(new String[] {
"SELECT pm1.g2.e4 FROM pm1.g2",
"SELECT pm2.g1.e1, pm2.g1.e2, pm2.g1.e4 FROM pm2.g1 WHERE (pm2.g1.e1 IN (<dependent values>)) AND (pm2.g1.e2 IN (<dependent values>)) AND (pm2.g1.e4 IN (<dependent values>))",
More information about the teiid-commits
mailing list