[teiid-commits] teiid SVN: r1443 - in branches/6.2.x/engine/src: test/java/com/metamatrix/query/rewriter and 1 other directory.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Mon Sep 21 17:29:36 EDT 2009


Author: shawkins
Date: 2009-09-21 17:29:36 -0400 (Mon, 21 Sep 2009)
New Revision: 1443

Modified:
   branches/6.2.x/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java
   branches/6.2.x/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java
Log:
TEIID-744 adding a check for explicit conversion in set query rewrite to ensure that widening does not happen as part of inversion.

Modified: branches/6.2.x/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java
===================================================================
--- branches/6.2.x/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java	2009-09-21 20:50:45 UTC (rev 1442)
+++ branches/6.2.x/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java	2009-09-21 21:29:36 UTC (rev 1443)
@@ -1537,7 +1537,7 @@
      * @throws QueryValidatorException
      * @since 4.2
      */
-    private Criteria simplifyConvertFunction(SetCriteria crit) throws QueryValidatorException {
+	private Criteria simplifyConvertFunction(SetCriteria crit) throws QueryValidatorException {
         Function leftFunction = (Function) crit.getExpression();
         Expression leftExpr = leftFunction.getArgs()[0];
         String leftExprTypeName = DataTypeManager.getDataTypeName(leftExpr.getType());
@@ -1564,11 +1564,13 @@
                 }   
             }
             
-            if (result != null) {
+            if (result == null) {
+            	removedSome = true;
+            	i.remove();
+            } else if (DataTypeManager.isImplicitConversion(leftExprTypeName, DataTypeManager.getDataTypeName(rightConstant.getType()))) {
             	newValues.add(result);
             } else {
-            	removedSome = true;
-            	i.remove();
+            	convertedAll = false;
             }
         }
         

Modified: branches/6.2.x/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java
===================================================================
--- branches/6.2.x/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java	2009-09-21 20:50:45 UTC (rev 1442)
+++ branches/6.2.x/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java	2009-09-21 21:29:36 UTC (rev 1443)
@@ -2276,10 +2276,21 @@
     	helpTestRewriteCriteria(original, expected);
     }
     
-    @Test public void testRewriteLong() {
+    /**
+     * Test ensures that '22.0' is a valid long via bigdecimal
+     */
+    @Test public void testRewriteBigDecimal() {
     	String original = "convert(BQT1.SmallA.LongNum, bigdecimal) = '22.0'"; //$NON-NLS-1$
     	CompareCriteria crit = new CompareCriteria(new ElementSymbol("BQT1.SmallA.LongNum"), CompareCriteria.EQ, new Constant(new Long(22))); //$NON-NLS-1$
     	helpTestRewriteCriteria(original, crit, FakeMetadataFactory.exampleBQTCached()); 
     }
+
+    /**
+     * Test ensures that we will not attempt to invert the widening conversion
+     */
+    @Test public void testRewriteWideningIn() {
+    	String original = "convert(BQT1.SmallA.TimestampValue, time) in ({t'10:00:00'}, {t'11:00:00'})"; //$NON-NLS-1$
+    	helpTestRewriteCriteria(original, parseCriteria("convert(BQT1.SmallA.TimestampValue, time) in ({t'10:00:00'}, {t'11:00:00'})", FakeMetadataFactory.exampleBQTCached()), FakeMetadataFactory.exampleBQTCached()); //$NON-NLS-1$ 
+    }
     
 }



More information about the teiid-commits mailing list