[teiid-commits] teiid SVN: r493 - trunk/engine/src/main/java/com/metamatrix/query/resolver/util.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Tue Feb 24 16:55:33 EST 2009


Author: ghelblin
Date: 2009-02-24 16:55:33 -0500 (Tue, 24 Feb 2009)
New Revision: 493

Modified:
   trunk/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverUtil.java
Log:
TEIID-61 - Fix for exception when CASE resoves to NULL [reviewed by Steve H]

Modified: trunk/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverUtil.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverUtil.java	2009-02-24 21:52:30 UTC (rev 492)
+++ trunk/engine/src/main/java/com/metamatrix/query/resolver/util/ResolverUtil.java	2009-02-24 21:55:33 UTC (rev 493)
@@ -51,6 +51,7 @@
 import com.metamatrix.query.sql.LanguageObject;
 import com.metamatrix.query.sql.lang.Limit;
 import com.metamatrix.query.sql.lang.OrderBy;
+import com.metamatrix.query.sql.symbol.AbstractCaseExpression;
 import com.metamatrix.query.sql.symbol.AggregateSymbol;
 import com.metamatrix.query.sql.symbol.AliasSymbol;
 import com.metamatrix.query.sql.symbol.Constant;
@@ -60,6 +61,7 @@
 import com.metamatrix.query.sql.symbol.Function;
 import com.metamatrix.query.sql.symbol.GroupSymbol;
 import com.metamatrix.query.sql.symbol.Reference;
+import com.metamatrix.query.sql.symbol.ScalarSubquery;
 import com.metamatrix.query.sql.symbol.SelectSymbol;
 import com.metamatrix.query.sql.symbol.SingleElementSymbol;
 import com.metamatrix.query.util.ErrorMessageKeys;
@@ -597,18 +599,33 @@
      */
     public static void resolveNullLiterals(List symbols) {
         for (int i = 0; i < symbols.size(); i++) {
-            SelectSymbol symbol = (SelectSymbol) symbols.get(i);
+            SelectSymbol selectSymbol = (SelectSymbol) symbols.get(i);
+            
+            if (!(selectSymbol instanceof SingleElementSymbol)) {
+                continue;
+            }
+            
+            SingleElementSymbol symbol = (SingleElementSymbol)selectSymbol;
+            
+            if(!DataTypeManager.DefaultDataClasses.NULL.equals(symbol.getType()) && symbol.getType() != null) {
+                continue;
+            }
             if(symbol instanceof AliasSymbol) {
                 symbol = ((AliasSymbol)symbol).getSymbol();
             }
-            
+                        
             Class replacement = DataTypeManager.DefaultDataClasses.STRING;
             
             if(symbol instanceof ExpressionSymbol && !(symbol instanceof AggregateSymbol)) {
                 ExpressionSymbol exprSymbol = (ExpressionSymbol) symbol;
                 Expression expr = exprSymbol.getExpression();
-                if(expr != null && expr instanceof Constant && ((Constant)expr).isNull()) {
+               	
+                if(expr instanceof Constant) {                	
                     exprSymbol.setExpression(new Constant(null, replacement));
+                } else if (expr instanceof AbstractCaseExpression) {
+                    ((AbstractCaseExpression)expr).setType(replacement);
+                } else if (expr instanceof ScalarSubquery) {
+                    ((ScalarSubquery)expr).setType(replacement);                                        
                 } else {
                 	try {
 						ResolverUtil.setTypeIfReference(expr, replacement, symbol);




More information about the teiid-commits mailing list