Skip to content

Commit

Permalink
TEIID-5566 fix to ensure makedep is honored after altering the join tree
Browse files Browse the repository at this point in the history
  • Loading branch information
shawkins committed Dec 7, 2018
1 parent 5fe0d42 commit 9f3b1b2
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 2 deletions.
Expand Up @@ -134,7 +134,12 @@ private boolean planLeftOuterJoinAssociativity(PlanNode plan,
joins.remove(childJoin);
if (childJoin == left) {
//a (b c)
//TODO: this case can probably be eliminated as it will be handled
//in BeforePlanning or during general join planning
newChild.addFirstChild(childJoin.getLastChild());
//promote the hints to the new parent
//so that makedep b can be honored
RulePlaceAccess.copyProperties(newChild.getFirstChild(), newChild);
newChild.addLastChild(other);
newChild.setProperty(Info.JOIN_CRITERIA, joinCriteria);
newParent.addFirstChild(childJoin.getFirstChild());
Expand Down Expand Up @@ -291,6 +296,9 @@ private boolean planLeftOuterJoinAssociativityBeforePlanning(PlanNode plan,
joins.remove(childJoin);
//a (b c)
newChild.addFirstChild(childJoin.getLastChild());
//promote the hints to the new parent
//so that makedep b can be honored
RulePlaceAccess.copyProperties(newChild.getFirstChild(), newChild);
newChild.addLastChild(other);
newChild.setProperty(Info.JOIN_CRITERIA, joinCriteria);
newParent.addFirstChild(childJoin.getFirstChild());
Expand Down
Expand Up @@ -1225,7 +1225,7 @@ private void helpTestNullDependent(String expressionSQL,
"SELECT g_0.e1 AS c_0 FROM pm2.g2 AS g_0 ORDER BY c_0",
"SELECT g_0.e1 AS c_0, g_0.e2 AS c_1, g_0.e3 AS c_2 FROM pm1.g1 AS g_0 ORDER BY c_0",
"SELECT g_0.e2 AS c_0 FROM pm2.g3 AS g_0 ORDER BY c_0"}, new DefaultCapabilitiesFinder(caps), ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
}
}

@Test public void testLeftOuterAssocitivtyRightLinear() throws Exception {
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
Expand All @@ -1235,7 +1235,17 @@ private void helpTestNullDependent(String expressionSQL,
new String[] {
"SELECT g_1.e2 AS c_0, g_0.e3 AS c_1 FROM pm1.g1 AS g_0 LEFT OUTER JOIN pm1.g2 AS g_1 ON g_0.e1 = g_1.e1 ORDER BY c_0",
"SELECT g_0.e2 AS c_0 FROM pm2.g3 AS g_0 ORDER BY c_0"}, new DefaultCapabilitiesFinder(caps), ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
}
}

@Test public void testLeftOuterAssocitivtyRightLinearMakeDep() throws Exception {
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
TestOptimizer.helpPlan("SELECT pm1.g1.e3 from pm1.g1 left outer join (pm1.g2 left outer join /*+ MAKEDEP */ pm2.g3 on pm1.g2.e2 = pm2.g3.e2) on pm1.g1.e1 = pm1.g2.e1", //$NON-NLS-1$
RealMetadataFactory.example1Cached(),
new String[] {
"SELECT g_0.e2 AS c_0 FROM pm2.g3 AS g_0 WHERE g_0.e2 IN (<dependent values>) ORDER BY c_0",
"SELECT g_1.e2 AS c_0, g_0.e3 AS c_1 FROM pm1.g1 AS g_0 LEFT OUTER JOIN pm1.g2 AS g_1 ON g_0.e1 = g_1.e1 ORDER BY c_0"}, new DefaultCapabilitiesFinder(caps), ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
}

@Test public void testLeftOuterAssocitivtyRightLinearSwap() throws Exception {
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
Expand All @@ -1247,6 +1257,16 @@ private void helpTestNullDependent(String expressionSQL,
"SELECT g_1.e2 AS c_0, g_0.e3 AS c_1 FROM pm1.g1 AS g_0 LEFT OUTER JOIN pm1.g3 AS g_1 ON g_0.e1 = g_1.e1 ORDER BY c_0"}, new DefaultCapabilitiesFinder(caps), ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
}

@Test public void testLeftOuterAssocitivtyRightLinearSwapMakeDep() throws Exception {
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
TestOptimizer.helpPlan("SELECT pm1.g1.e3 from pm1.g1 left outer join (/*+ MAKEDEP */ pm2.g2 left outer join pm1.g3 on pm2.g2.e2 = pm1.g3.e2) on pm1.g1.e1 = pm1.g3.e1", //$NON-NLS-1$
RealMetadataFactory.example1Cached(),
new String[] {
"SELECT g_0.e2 AS c_0 FROM pm2.g2 AS g_0 WHERE g_0.e2 IN (<dependent values>) ORDER BY c_0",
"SELECT g_1.e2 AS c_0, g_0.e3 AS c_1 FROM pm1.g1 AS g_0 LEFT OUTER JOIN pm1.g3 AS g_1 ON g_0.e1 = g_1.e1 ORDER BY c_0"}, new DefaultCapabilitiesFinder(caps), ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
}

@Test public void testMergeJoinOrderNotPushed() throws TeiidComponentException, TeiidProcessingException {
String sql = "select bqt1.smalla.intkey, bqt2.smalla.intkey "
+ "from bqt1.smalla inner join bqt2.smalla on (bqt2.smalla.stringkey = bqt1.smalla.stringkey)"; //$NON-NLS-1$
Expand Down Expand Up @@ -1601,5 +1621,30 @@ private void helpTestNullDependent(String expressionSQL,
"SELECT g_0.e1 AS c_0 FROM pm1.g3 AS g_0 ORDER BY c_0",
"SELECT g_0.e1 AS c_0, g_0.e3 AS c_1 FROM pm1.g1 AS g_0 ORDER BY c_0"}, new DefaultCapabilitiesFinder(caps), ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
}

@Test public void testLeftOuterAssocitivtyWithMakedep() throws Exception {
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
TestOptimizer.helpPlan("SELECT pm1.g1.e3 from (pm1.g1 "
+ "left outer join /*+ MAKEDEP */ pm2.g2 on pm1.g1.e1 = pm2.g2.e1) "
+ "left outer join pm1.g2 on pm1.g1.e1 = pm1.g2.e1", //$NON-NLS-1$
RealMetadataFactory.example1Cached(),
new String[] {
"SELECT g_0.e1 AS c_0 FROM pm2.g2 AS g_0 WHERE g_0.e1 IN (<dependent values>) ORDER BY c_0",
"SELECT g_0.e1 AS c_0, g_0.e3 AS c_1 FROM pm1.g1 AS g_0 LEFT OUTER JOIN pm1.g2 AS g_1 ON g_0.e1 = g_1.e1 ORDER BY c_0"}, new DefaultCapabilitiesFinder(caps), ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
}

@Test public void testLeftOuterAssocitivtyWithMakedep1() throws Exception {
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, false);
TestOptimizer.helpPlan("SELECT pm1.g1.e3 from (pm1.g1 "
+ "left outer join /*+ MAKEDEP */ pm2.g2 on pm1.g1.e1 = pm2.g2.e1) "
+ "left outer join pm1.g2 on pm2.g2.e1 = pm1.g2.e1", //$NON-NLS-1$
RealMetadataFactory.example1Cached(),
new String[] {
"SELECT g_0.e1 AS c_0 FROM pm2.g2 AS g_0 WHERE g_0.e1 IN (<dependent values>) ORDER BY c_0",
"SELECT g_0.e1 AS c_0 FROM pm1.g2 AS g_0 ORDER BY c_0",
"SELECT g_0.e1 AS c_0, g_0.e3 AS c_1 FROM pm1.g1 AS g_0 ORDER BY c_0"}, new DefaultCapabilitiesFinder(caps), ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
}

}

0 comments on commit 9f3b1b2

Please sign in to comment.