Skip to content

Commit

Permalink
TEIID-5409 fixing the regression that revered the direction of the join
Browse files Browse the repository at this point in the history
  • Loading branch information
shawkins committed Jul 6, 2018
1 parent a06a4ac commit 53e6b8b
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 6 deletions.
Expand Up @@ -396,7 +396,7 @@ private void groupJoinsForPushing(QueryMetadataInterface metadata, CapabilitiesF
accessNodes.remove(k < i ? k : k - 1);

//build a new join node
PlanNode joinNode = createJoinNode(accessNode1, accessNode2, joinCriteria, joinType);
PlanNode joinNode = createJoinNode(accessNode2, accessNode1, joinCriteria, joinType);
PlanNode newAccess = RuleRaiseAccess.raiseAccessOverJoin(joinNode, joinNode.getFirstChild(), entry.getKey(), capFinder, metadata, false);
for (PlanNode critNode : joinCriteriaNodes) {
critNode.removeFromParent();
Expand Down Expand Up @@ -430,13 +430,21 @@ private void groupJoinsForPushing(QueryMetadataInterface metadata, CapabilitiesF
}
}

/**
* create a join node with accessNode1 as the left child and accessNode2 as the right
* @param accessNode1
* @param accessNode2
* @param joinCriteria
* @param joinType
* @return
*/
private PlanNode createJoinNode(PlanNode accessNode1, PlanNode accessNode2,
List<Criteria> joinCriteria, JoinType joinType) {
PlanNode joinNode = createJoinNode();
joinNode.getGroups().addAll(accessNode1.getGroups());
joinNode.getGroups().addAll(accessNode2.getGroups());
joinNode.addFirstChild(accessNode2);
joinNode.addLastChild(accessNode1);
joinNode.addFirstChild(accessNode1);
joinNode.addLastChild(accessNode2);
joinNode.setProperty(NodeConstants.Info.JOIN_TYPE, joinType);
joinNode.setProperty(NodeConstants.Info.JOIN_CRITERIA, joinCriteria);
return joinNode;
Expand Down
Expand Up @@ -503,7 +503,7 @@ public class TestJoinOptimization {

// Plan query
ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.exampleBQTCached(), null, capFinder,
new String[] {"SELECT g_2.IntKey, g_3.IntKey FROM (BQT1.MediumA AS g_0 CROSS JOIN BQT1.MediumB AS g_1) INNER JOIN (BQT1.SmallA AS g_2 LEFT OUTER JOIN BQT1.SmallB AS g_3 ON g_2.StringKey = g_3.StringKey) ON ((g_3.IntKey + g_0.IntKey) + g_1.IntKey) = 1"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
new String[] {"SELECT g_3.IntKey, g_2.IntKey FROM (BQT1.MediumA AS g_0 CROSS JOIN BQT1.MediumB AS g_1) INNER JOIN (BQT1.SmallB AS g_2 LEFT OUTER JOIN BQT1.SmallA AS g_3 ON g_3.StringKey = g_2.StringKey) ON ((g_2.IntKey + g_0.IntKey) + g_1.IntKey) = 1"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$

TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
Expand Down Expand Up @@ -1497,7 +1497,7 @@ private void helpTestNullDependent(String expressionSQL,
DefaultCapabilitiesFinder capFinder = new DefaultCapabilitiesFinder(bsc);

ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.example1Cached(), new String[] {"SELECT g_0.e2 AS c_0, g_0.e1 AS c_1, g_0.e3 AS c_2, g_0.e4 AS c_3 FROM pm2.g3 AS g_0 ORDER BY c_0",
"SELECT g_1.e1 AS c_0, g_1.e2 AS c_1, g_0.e1 AS c_2, g_0.e3 AS c_3, g_1.e3 AS c_4, g_1.e4 AS c_5 FROM pm1.g4 AS g_0 LEFT OUTER JOIN pm1.g2 AS g_1 ON g_1.e4 = g_0.e4 ORDER BY c_0",
"SELECT g_0.e1 AS c_0, g_0.e2 AS c_1, g_1.e1 AS c_2, g_1.e3 AS c_3, g_0.e3 AS c_4, g_0.e4 AS c_5 FROM pm1.g2 AS g_0 LEFT OUTER JOIN pm1.g4 AS g_1 ON g_0.e4 = g_1.e4 ORDER BY c_0",
"SELECT g_0.e1 AS c_0, g_0.e2 AS c_1, g_0.e3 AS c_2, g_0.e4 AS c_3 FROM pm2.g1 AS g_0 ORDER BY c_0"}, capFinder, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$

TestOptimizer.checkNodeTypes(plan, new int[] {
Expand Down
Expand Up @@ -5265,7 +5265,7 @@ private void helpTestCase2589(String sql, String expected) throws Exception {
ProcessorPlan plan = helpPlan(sql,
metadata,
null, capFinder,
new String[] {"SELECT g_3.IntKey FROM (BQT1.SmallA AS g_0 CROSS JOIN BQT1.SmallA AS g_1) CROSS JOIN (BQT1.MediumB AS g_2 LEFT OUTER JOIN BQT1.MediumA AS g_3 ON g_3.IntKey = g_2.IntKey)"}, //$NON-NLS-1$
new String[] {"SELECT g_2.IntKey FROM (BQT1.SmallA AS g_0 CROSS JOIN BQT1.SmallA AS g_1) CROSS JOIN (BQT1.MediumA AS g_2 LEFT OUTER JOIN BQT1.MediumB AS g_3 ON g_2.IntKey = g_3.IntKey)"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING );

checkNodeTypes(plan, FULL_PUSHDOWN);
Expand Down

0 comments on commit 53e6b8b

Please sign in to comment.