[teiid-commits] teiid SVN: r3391 - in branches/7.4.x/engine/src: main/java/org/teiid/query/optimizer/relational/rules and 1 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Wed Aug 17 16:24:17 EDT 2011


Author: shawkins
Date: 2011-08-17 16:24:17 -0400 (Wed, 17 Aug 2011)
New Revision: 3391

Modified:
   branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/plantree/NodeEditor.java
   branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java
   branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestTextTable.java
Log:
TEIID-1717 fix for NPE with Texttable join

Modified: branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/plantree/NodeEditor.java
===================================================================
--- branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/plantree/NodeEditor.java	2011-08-17 15:24:59 UTC (rev 3390)
+++ branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/plantree/NodeEditor.java	2011-08-17 20:24:17 UTC (rev 3391)
@@ -54,6 +54,9 @@
     }
 
 	public static final PlanNode findNodePreOrder(PlanNode root, int types, int stopTypes) {
+		if (root == null) {
+			return null;
+		}
 		if((types & root.getType()) == root.getType()) {
 			return root;
 		} else if((stopTypes & root.getType()) == root.getType()) {

Modified: branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java
===================================================================
--- branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java	2011-08-17 15:24:59 UTC (rev 3390)
+++ branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java	2011-08-17 20:24:17 UTC (rev 3391)
@@ -227,7 +227,7 @@
         PlanNode sortNode = createSortNode(new ArrayList<SingleElementSymbol>(orderSymbols), outputSymbols);
         
         boolean distinct = false;
-        if (sourceNode.getType() == NodeConstants.Types.SOURCE && outputSymbols.size() == expressions.size() && outputSymbols.containsAll(expressions)) {
+        if (sourceNode.getFirstChild() != null && sourceNode.getType() == NodeConstants.Types.SOURCE && outputSymbols.size() == expressions.size() && outputSymbols.containsAll(expressions)) {
         	PlanNode setOp = NodeEditor.findNodePreOrder(sourceNode.getFirstChild(), NodeConstants.Types.SET_OP, NodeConstants.Types.SOURCE);
         	if (setOp != null) {
         		if (setOp.hasBooleanProperty(NodeConstants.Info.USE_ALL)) {

Modified: branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestTextTable.java
===================================================================
--- branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestTextTable.java	2011-08-17 15:24:59 UTC (rev 3390)
+++ branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestTextTable.java	2011-08-17 20:24:17 UTC (rev 3391)
@@ -278,6 +278,21 @@
         helpProcess(plan, createCommandContext(), dataManager, expected);
     } 
 	
+	@Test public void testTextTableJoin1() throws Exception {
+		String sql = "select e1, e2 from texttable('a' COLUMNS col string) x, pm1.g1 where col = e1";
+    	
+        List[] expected = new List[] {
+        		Arrays.asList("a", 0),
+        		Arrays.asList("a", 3),
+        		Arrays.asList("a", 0),
+        };    
+
+        FakeDataManager dataManager = new FakeDataManager();
+        sampleData1(dataManager);
+        RelationalPlan plan = (RelationalPlan)helpGetPlan(helpParse(sql), RealMetadataFactory.example1Cached());
+        helpProcess(plan, createCommandContext(), dataManager, expected);
+    } 
+	
 	public static void process(String sql, List[] expectedResults) throws Exception {    
     	FakeDataManager dataManager = new FakeDataManager();
         sampleData1(dataManager);



More information about the teiid-commits mailing list