[teiid-commits] teiid SVN: r1548 - in trunk/engine/src: main/resources/com/metamatrix/query and 1 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Wed Nov 11 16:17:34 EST 2009


Author: shawkins
Date: 2009-11-11 16:17:34 -0500 (Wed, 11 Nov 2009)
New Revision: 1548

Modified:
   trunk/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java
   trunk/engine/src/main/resources/com/metamatrix/query/i18n.properties
   trunk/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java
Log:
TEIID-879 adding validation of min/max

Modified: trunk/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java	2009-11-10 19:46:56 UTC (rev 1547)
+++ trunk/engine/src/main/java/com/metamatrix/query/validator/AggregateValidationVisitor.java	2009-11-11 21:17:34 UTC (rev 1548)
@@ -25,6 +25,7 @@
 import java.util.Collection;
 import java.util.Set;
 
+import com.metamatrix.common.types.DataTypeManager;
 import com.metamatrix.query.QueryPlugin;
 import com.metamatrix.query.sql.LanguageObject;
 import com.metamatrix.query.sql.ReservedWords;
@@ -38,7 +39,6 @@
 import com.metamatrix.query.sql.symbol.SearchedCaseExpression;
 import com.metamatrix.query.sql.visitor.AggregateSymbolCollectorVisitor;
 import com.metamatrix.query.sql.visitor.ElementCollectorVisitor;
-import com.metamatrix.query.sql.visitor.SQLStringVisitor;
 import com.metamatrix.query.util.ErrorMessageKeys;
 
 
@@ -71,11 +71,12 @@
         
         // Verify data type of aggregate expression
         String aggregateFunction = obj.getAggregateFunction();
-        if(aggregateFunction.equals(ReservedWords.SUM) || aggregateFunction.equals(ReservedWords.AVG)) {
-            if(obj.getType() == null) {
-                handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0041, new Object[] {aggregateFunction, SQLStringVisitor.getSQLString(obj)}), obj);
-            }
-        } 
+        if((aggregateFunction.equals(ReservedWords.SUM) || aggregateFunction.equals(ReservedWords.AVG)) && obj.getType() == null) {
+            handleValidationError(QueryPlugin.Util.getString(ErrorMessageKeys.VALIDATOR_0041, new Object[] {aggregateFunction, obj}), obj);
+        }
+        if((aggregateFunction.equals(ReservedWords.MIN) || aggregateFunction.equals(ReservedWords.MAX)) && DataTypeManager.isNonComparable(DataTypeManager.getDataTypeName(aggExp.getType()))) {
+    		handleValidationError(QueryPlugin.Util.getString("AggregateValidationVisitor.non_comparable", new Object[] {aggregateFunction, obj}), obj); //$NON-NLS-1$
+        }
         validateBelow = false;
     }
     

Modified: trunk/engine/src/main/resources/com/metamatrix/query/i18n.properties
===================================================================
--- trunk/engine/src/main/resources/com/metamatrix/query/i18n.properties	2009-11-10 19:46:56 UTC (rev 1547)
+++ trunk/engine/src/main/resources/com/metamatrix/query/i18n.properties	2009-11-11 21:17:34 UTC (rev 1548)
@@ -297,6 +297,7 @@
 ERR.015.012.0039 = Nested aggregate expressions are not allowed: {0}
 ERR.015.012.0040 = Aggregate expression has unknown data type: {0}
 ERR.015.012.0041 = The aggregate function {0} cannot be used with non-numeric expressions: {1}
+AggregateValidationVisitor.non_comparable = The aggregate function {0} cannot be used with non-comparable expressions: {1}
 ERR.015.012.0042 = Cross join may not have criteria: {0}
 ERR.015.012.0043 = Join must have criteria declared in the ON clause: {0}
 ERR.015.012.0045 = Elements in this join criteria are not from a group involved in the join: {0}

Modified: trunk/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java	2009-11-10 19:46:56 UTC (rev 1547)
+++ trunk/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java	2009-11-11 21:17:34 UTC (rev 1548)
@@ -492,6 +492,11 @@
                      new String[] {"StringKey"}, FakeMetadataFactory.exampleBQTCached() ); //$NON-NLS-1$
     }
     
+    public void testInvalidAggregate8() {
+        helpValidate("SELECT max(ObjectValue) FROM BQT1.SmallA GROUP BY StringKey", //$NON-NLS-1$
+                     new String[] {"MAX(ObjectValue)"}, FakeMetadataFactory.exampleBQTCached() ); //$NON-NLS-1$
+    }
+    
     public void testInvalidAggregateIssue190644() {
         helpValidate("SELECT e3 + 1 from pm1.g1 GROUP BY e2 + 1 HAVING e2 + 1 = 5", new String[] {"e3"}, FakeMetadataFactory.example1Cached()); //$NON-NLS-1$ //$NON-NLS-2$
     }



More information about the teiid-commits mailing list