[teiid-commits] teiid SVN: r1300 - in trunk: common-core/src/main/java/com/metamatrix/common/types/basic and 2 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Tue Sep 1 00:26:33 EDT 2009


Author: shawkins
Date: 2009-09-01 00:26:32 -0400 (Tue, 01 Sep 2009)
New Revision: 1300

Modified:
   trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java
   trunk/common-core/src/main/java/com/metamatrix/common/types/Transform.java
   trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToDoubleTransform.java
   trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToFloatTransform.java
   trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToIntegerTransform.java
   trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToLongTransform.java
   trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToShortTransform.java
   trunk/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java
   trunk/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java
Log:
TEIID-744 more accurately capturing non-invertable converts as lossy

Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java	2009-08-31 22:18:33 UTC (rev 1299)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/DataTypeManager.java	2009-09-01 04:26:32 UTC (rev 1300)
@@ -490,13 +490,13 @@
 		DataTypeManager.addTransform(new NumberToByteTransform(
 				DefaultDataClasses.BIG_DECIMAL));
 		DataTypeManager.addTransform(new NumberToDoubleTransform(
-				DefaultDataClasses.BIG_DECIMAL, true));
+				DefaultDataClasses.BIG_DECIMAL, true, false));
 		DataTypeManager.addTransform(new NumberToFloatTransform(
-				DefaultDataClasses.BIG_DECIMAL, true));
+				DefaultDataClasses.BIG_DECIMAL, true, false));
 		DataTypeManager.addTransform(new NumberToIntegerTransform(
 				DefaultDataClasses.BIG_DECIMAL, true));
 		DataTypeManager.addTransform(new NumberToLongTransform(
-				DefaultDataClasses.BIG_DECIMAL, true));
+				DefaultDataClasses.BIG_DECIMAL, true, false));
 		DataTypeManager.addTransform(new NumberToShortTransform(
 				DefaultDataClasses.BIG_DECIMAL, true));
 		DataTypeManager.addTransform(new AnyToStringTransform(DefaultDataClasses.BIG_DECIMAL));
@@ -507,13 +507,13 @@
 		DataTypeManager.addTransform(new NumberToByteTransform(
 				DefaultDataClasses.BIG_INTEGER));
 		DataTypeManager.addTransform(new NumberToDoubleTransform(
-				DefaultDataClasses.BIG_INTEGER, true));
+				DefaultDataClasses.BIG_INTEGER, true, false));
 		DataTypeManager.addTransform(new NumberToFloatTransform(
-				DefaultDataClasses.BIG_INTEGER, true));
+				DefaultDataClasses.BIG_INTEGER, true, false));
 		DataTypeManager.addTransform(new NumberToIntegerTransform(
 				DefaultDataClasses.BIG_INTEGER, true));
 		DataTypeManager.addTransform(new NumberToLongTransform(
-				DefaultDataClasses.BIG_INTEGER, true));
+				DefaultDataClasses.BIG_INTEGER, true, false));
 		DataTypeManager.addTransform(new NumberToShortTransform(
 				DefaultDataClasses.BIG_INTEGER, true));
 		DataTypeManager.addTransform(new AnyToStringTransform(DefaultDataClasses.BIG_INTEGER));
@@ -540,13 +540,13 @@
 		DataTypeManager.addTransform(new FixedNumberToBigIntegerTransform(DefaultDataClasses.BYTE));
 		DataTypeManager.addTransform(new NumberToBooleanTransform(Byte.valueOf((byte)0)));
 		DataTypeManager.addTransform(new NumberToDoubleTransform(
-				DefaultDataClasses.BYTE, false));
+				DefaultDataClasses.BYTE, false, false));
 		DataTypeManager.addTransform(new NumberToFloatTransform(
-				DefaultDataClasses.BYTE, false));
+				DefaultDataClasses.BYTE, false, false));
 		DataTypeManager.addTransform(new NumberToIntegerTransform(
 				DefaultDataClasses.BYTE, false));
 		DataTypeManager.addTransform(new NumberToLongTransform(
-				DefaultDataClasses.BYTE, false));
+				DefaultDataClasses.BYTE, false, false));
 		DataTypeManager.addTransform(new NumberToShortTransform(
 				DefaultDataClasses.BYTE, false));
 		DataTypeManager.addTransform(new AnyToStringTransform(DefaultDataClasses.BYTE));
@@ -566,11 +566,11 @@
 		DataTypeManager.addTransform(new NumberToByteTransform(
 				DefaultDataClasses.DOUBLE));
 		DataTypeManager.addTransform(new NumberToFloatTransform(
-				DefaultDataClasses.DOUBLE, true));
+				DefaultDataClasses.DOUBLE, true, false));
 		DataTypeManager.addTransform(new NumberToIntegerTransform(
 				DefaultDataClasses.DOUBLE, true));
 		DataTypeManager.addTransform(new NumberToLongTransform(
-				DefaultDataClasses.DOUBLE, false)); //lossy, but not narrowing
+				DefaultDataClasses.DOUBLE, false, true)); //lossy, but not narrowing
 		DataTypeManager.addTransform(new NumberToShortTransform(
 				DefaultDataClasses.DOUBLE, true));
 		DataTypeManager.addTransform(new AnyToStringTransform(DefaultDataClasses.DOUBLE));
@@ -581,11 +581,11 @@
 		DataTypeManager.addTransform(new NumberToByteTransform(
 				DefaultDataClasses.FLOAT));
 		DataTypeManager.addTransform(new NumberToDoubleTransform(
-				DefaultDataClasses.FLOAT, false));
+				DefaultDataClasses.FLOAT, false, false));
 		DataTypeManager.addTransform(new NumberToIntegerTransform(
 				DefaultDataClasses.FLOAT, true));
 		DataTypeManager.addTransform(new NumberToLongTransform(
-				DefaultDataClasses.FLOAT, false)); //lossy, but not narrowing
+				DefaultDataClasses.FLOAT, false, true)); //lossy, but not narrowing
 		DataTypeManager.addTransform(new NumberToShortTransform(
 				DefaultDataClasses.FLOAT, true));
 		DataTypeManager.addTransform(new AnyToStringTransform(DefaultDataClasses.FLOAT));
@@ -596,11 +596,11 @@
 		DataTypeManager.addTransform(new NumberToByteTransform(
 				DefaultDataClasses.INTEGER));
 		DataTypeManager.addTransform(new NumberToDoubleTransform(
-				DefaultDataClasses.INTEGER, false));
+				DefaultDataClasses.INTEGER, false, false));
 		DataTypeManager.addTransform(new NumberToFloatTransform(
-				DefaultDataClasses.INTEGER, false)); //lossy, but not narrowing
+				DefaultDataClasses.INTEGER, false, true)); //lossy, but not narrowing
 		DataTypeManager.addTransform(new NumberToLongTransform(
-				DefaultDataClasses.INTEGER, false));
+				DefaultDataClasses.INTEGER, false, false));
 		DataTypeManager.addTransform(new NumberToShortTransform(
 				DefaultDataClasses.INTEGER, true));
 		DataTypeManager.addTransform(new AnyToStringTransform(DefaultDataClasses.INTEGER));
@@ -611,9 +611,9 @@
 		DataTypeManager.addTransform(new NumberToByteTransform(
 				DefaultDataClasses.LONG));
 		DataTypeManager.addTransform(new NumberToDoubleTransform(
-				DefaultDataClasses.LONG, false)); //lossy, but not narrowing
+				DefaultDataClasses.LONG, false, true)); //lossy, but not narrowing
 		DataTypeManager.addTransform(new NumberToFloatTransform(
-				DefaultDataClasses.LONG, false)); //lossy, but not narrowing
+				DefaultDataClasses.LONG, false, true)); //lossy, but not narrowing
 		DataTypeManager.addTransform(new NumberToIntegerTransform(
 				DefaultDataClasses.LONG, true));
 		DataTypeManager.addTransform(new NumberToShortTransform(
@@ -626,13 +626,13 @@
 		DataTypeManager.addTransform(new NumberToByteTransform(
 				DefaultDataClasses.SHORT));
 		DataTypeManager.addTransform(new NumberToDoubleTransform(
-				DefaultDataClasses.SHORT, false));
+				DefaultDataClasses.SHORT, false, false));
 		DataTypeManager.addTransform(new NumberToFloatTransform(
-				DefaultDataClasses.SHORT, false));
+				DefaultDataClasses.SHORT, false, false));
 		DataTypeManager.addTransform(new NumberToIntegerTransform(
 				DefaultDataClasses.SHORT, false));
 		DataTypeManager.addTransform(new NumberToLongTransform(
-				DefaultDataClasses.SHORT, false));
+				DefaultDataClasses.SHORT, false, false));
 		DataTypeManager.addTransform(new AnyToStringTransform(DefaultDataClasses.SHORT));
 
 		DataTypeManager

Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/Transform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/Transform.java	2009-08-31 22:18:33 UTC (rev 1299)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/Transform.java	2009-09-01 04:26:32 UTC (rev 1300)
@@ -105,6 +105,10 @@
 	public boolean isNarrowing() {
 		return false;
 	}
+	
+	public boolean isLossy() {
+		return isNarrowing();
+	}
 
 	/**
 	 * Override Object.toString() to do getDisplayName() version.

Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToDoubleTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToDoubleTransform.java	2009-08-31 22:18:33 UTC (rev 1299)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToDoubleTransform.java	2009-09-01 04:26:32 UTC (rev 1300)
@@ -30,10 +30,12 @@
 	
 	private Class<?> sourceType;
 	private boolean isNarrowing;
+	private boolean isLossy;
 	
-	public NumberToDoubleTransform(Class<?> sourceType, boolean isNarrowing) {
+	public NumberToDoubleTransform(Class<?> sourceType, boolean isNarrowing, boolean isLossy) {
 		this.sourceType = sourceType;
 		this.isNarrowing = isNarrowing;
+		this.isLossy = isLossy;
 	}
 	
 	@Override
@@ -64,4 +66,14 @@
 		return DataTypeManager.DefaultDataClasses.DOUBLE;
 	}
 	
+	@Override
+	public boolean isNarrowing() {
+		return isNarrowing;
+	}
+	
+	@Override
+	public boolean isLossy() {
+		return isLossy;
+	}
+	
 }

Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToFloatTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToFloatTransform.java	2009-08-31 22:18:33 UTC (rev 1299)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToFloatTransform.java	2009-09-01 04:26:32 UTC (rev 1300)
@@ -30,10 +30,12 @@
 	
 	private Class<?> sourceType;
 	private boolean isNarrowing;
+	private boolean isLossy;
 	
-	public NumberToFloatTransform(Class<?> sourceType, boolean isNarrowing) {
+	public NumberToFloatTransform(Class<?> sourceType, boolean isNarrowing, boolean isLossy) {
 		this.sourceType = sourceType;
 		this.isNarrowing = isNarrowing;
+		this.isLossy = isLossy;
 	}
 	
 	@Override
@@ -64,4 +66,14 @@
 		return DataTypeManager.DefaultDataClasses.FLOAT;
 	}
 	
+	@Override
+	public boolean isNarrowing() {
+		return isNarrowing;
+	}
+	
+	@Override
+	public boolean isLossy() {
+		return isLossy;
+	}
+	
 }

Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToIntegerTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToIntegerTransform.java	2009-08-31 22:18:33 UTC (rev 1299)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToIntegerTransform.java	2009-09-01 04:26:32 UTC (rev 1300)
@@ -64,4 +64,9 @@
 		return DataTypeManager.DefaultDataClasses.INTEGER;
 	}
 	
+	@Override
+	public boolean isNarrowing() {
+		return isNarrowing;
+	}
+	
 }

Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToLongTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToLongTransform.java	2009-08-31 22:18:33 UTC (rev 1299)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToLongTransform.java	2009-09-01 04:26:32 UTC (rev 1300)
@@ -30,10 +30,12 @@
 	
 	private Class<?> sourceType;
 	private boolean isNarrowing;
+	private boolean isLossy;
 	
-	public NumberToLongTransform(Class<?> sourceType, boolean isNarrowing) {
+	public NumberToLongTransform(Class<?> sourceType, boolean isNarrowing, boolean isLossy) {
 		this.sourceType = sourceType;
 		this.isNarrowing = isNarrowing;
+		this.isLossy = isLossy;
 	}
 	
 	@Override
@@ -64,4 +66,14 @@
 		return DataTypeManager.DefaultDataClasses.LONG;
 	}
 	
+	@Override
+	public boolean isNarrowing() {
+		return isNarrowing;
+	}
+	
+	@Override
+	public boolean isLossy() {
+		return isLossy;
+	}
+	
 }

Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToShortTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToShortTransform.java	2009-08-31 22:18:33 UTC (rev 1299)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/NumberToShortTransform.java	2009-09-01 04:26:32 UTC (rev 1300)
@@ -64,4 +64,9 @@
 		return DataTypeManager.DefaultDataClasses.SHORT;
 	}
 	
+	@Override
+	public boolean isNarrowing() {
+		return isNarrowing;
+	}
+	
 }

Modified: trunk/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java	2009-08-31 22:18:33 UTC (rev 1299)
+++ trunk/engine/src/main/java/com/metamatrix/query/rewriter/QueryRewriter.java	2009-09-01 04:26:32 UTC (rev 1300)
@@ -1509,7 +1509,7 @@
         
         Transform transform = DataTypeManager.getTransform(leftExpr.getType(), crit.getRightExpression().getType());
         
-        if (transform.isNarrowing()) {
+        if (transform.isLossy()) {
         	return crit;
         }
                 
@@ -1567,6 +1567,10 @@
             Constant result = null;
             try {
                 result = ResolverUtil.convertConstant(DataTypeManager.getDataTypeName(rightConstant.getType()), leftExprTypeName, rightConstant);
+                Constant other = ResolverUtil.convertConstant(leftExprTypeName, DataTypeManager.getDataTypeName(rightConstant.getType()), result);
+                if (((Comparable)rightConstant.getValue()).compareTo(other.getValue()) != 0) {
+                	result = null;
+                }   
             } catch(QueryResolverException e) {
                 
             }

Modified: trunk/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java	2009-08-31 22:18:33 UTC (rev 1299)
+++ trunk/engine/src/test/java/com/metamatrix/query/rewriter/TestQueryRewriter.java	2009-09-01 04:26:32 UTC (rev 1300)
@@ -1008,7 +1008,7 @@
 		
 		String rewritProc = "CREATE PROCEDURE\n"; //$NON-NLS-1$
 		rewritProc = rewritProc + "BEGIN\n"; //$NON-NLS-1$
-		rewritProc = rewritProc + "SELECT e2 FROM pm1.g1 WHERE sqrt(pm1.g1.e2) = 10.0;\n"; //$NON-NLS-1$
+		rewritProc = rewritProc + "SELECT e2 FROM pm1.g1 WHERE convert(sqrt(pm1.g1.e2), integer) = 10;\n"; //$NON-NLS-1$
 		rewritProc = rewritProc + "END"; //$NON-NLS-1$
 		
 		String procReturned = this.getReWrittenProcedure(procedure, userQuery, 
@@ -1613,7 +1613,7 @@
     }
 
     @Test public void testRewriteCase1954e() {
-        helpTestRewriteCriteria("convert(pm1.g1.e4, integer) = 2", "pm1.g1.e4 = 2.0"); //$NON-NLS-1$ //$NON-NLS-2$
+        helpTestRewriteCriteria("convert(pm1.g1.e4, integer) = 2", "convert(pm1.g1.e4, integer) = 2"); //$NON-NLS-1$ //$NON-NLS-2$
     }
 
     /** Check that this fails, x is not convertable to an int */



More information about the teiid-commits mailing list