Skip to content

Commit

Permalink
TEIID-4144: Mismanagement of output columns in ruleimplementjoinstrat…
Browse files Browse the repository at this point in the history
…egy (adding the project node to the source)
  • Loading branch information
shawkins authored and johnathonlee committed Apr 18, 2016
1 parent e8f189b commit 2bd8819
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
Expand Up @@ -233,6 +233,8 @@ static boolean insertSort(PlanNode childNode, List<Expression> expressions, Plan

outputSymbols.addAll(expressions);

//TODO: generally we're compensating for expressions used in predicates
//and end up pulling redundant values
boolean needsCorrection = outputSymbols.size() > oldSize;

PlanNode sortNode = createSortNode(new ArrayList<Expression>(orderSymbols), outputSymbols);
Expand Down Expand Up @@ -280,7 +282,7 @@ static boolean insertSort(PlanNode childNode, List<Expression> expressions, Plan
PlanNode projectNode = NodeFactory.getNewNode(NodeConstants.Types.PROJECT);
projectNode.setProperty(NodeConstants.Info.PROJECT_COLS, new ArrayList<Expression>(outputSymbols));
projectNode.setProperty(NodeConstants.Info.OUTPUT_COLS, new ArrayList<Expression>(outputSymbols));
childNode.addAsParent(projectNode);
sourceNode.addAsParent(projectNode);
correctOutputElements(joinNode, expressions, projectNode.getParent());
}
return false;
Expand Down
Expand Up @@ -1099,4 +1099,21 @@ private void helpTestNullDependent(String expressionSQL,

TestProcessor.helpProcess(plan, hdm, new List<?>[] {});
}

@Test public void testOutputColumnsWithMergeJoinAndNonPushedSelect1() throws TeiidComponentException, TeiidProcessingException {
String sql = "select bqt1.smalla.intkey, bqt2.smalla.intkey "
+ "from bqt1.smalla inner join bqt2.smalla on (bqt2.smalla.intkey = case when bqt1.smalla.intkey = 1 then 2 else 3 end) where right(bqt1.smalla.stringkey, 1) = 'a'"; //$NON-NLS-1$
BasicSourceCapabilities bsc = TestOptimizer.getTypicalCapabilities();
bsc.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
bsc.setCapabilitySupport(Capability.QUERY_ORDERBY, false);
// Plan query
ProcessorPlan plan = TestOptimizer.helpPlan(sql, RealMetadataFactory.exampleBQTCached(),
new String[] {"SELECT g_0.IntKey FROM BQT2.SmallA AS g_0", "SELECT g_0.StringKey, g_0.IntKey FROM BQT1.SmallA AS g_0"}, new DefaultCapabilitiesFinder(bsc), ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$

HardcodedDataManager hdm = new HardcodedDataManager();
hdm.addData("SELECT g_0.StringKey, g_0.IntKey FROM BQT1.SmallA AS g_0", Arrays.asList("aa", 1));
hdm.addData("SELECT g_0.IntKey FROM BQT2.SmallA AS g_0", Arrays.asList(1));

TestProcessor.helpProcess(plan, hdm, new List<?>[] {});
}
}

0 comments on commit 2bd8819

Please sign in to comment.