[teiid-commits] teiid SVN: r609 - in trunk: documentation/reference/src/main/docbook/en-US/content and 2 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Fri Mar 20 14:09:40 EDT 2009


Author: shawkins
Date: 2009-03-20 14:09:39 -0400 (Fri, 20 Mar 2009)
New Revision: 609

Modified:
   trunk/connector-api/src/main/java/org/teiid/connector/api/SourceSystemFunctions.java
   trunk/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml
   trunk/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java
   trunk/engine/src/test/java/com/metamatrix/query/function/TestFunction.java
Log:
TEIID-433 fixing the doc and implementation of round

Modified: trunk/connector-api/src/main/java/org/teiid/connector/api/SourceSystemFunctions.java
===================================================================
--- trunk/connector-api/src/main/java/org/teiid/connector/api/SourceSystemFunctions.java	2009-03-20 12:45:27 UTC (rev 608)
+++ trunk/connector-api/src/main/java/org/teiid/connector/api/SourceSystemFunctions.java	2009-03-20 18:09:39 UTC (rev 609)
@@ -31,114 +31,114 @@
 public class SourceSystemFunctions {
 	
 	//arithmetic
-	public static final String MULTIPLY_OP = "*";
-	public static final String ADD_OP = "+";
-	public static final String SUBTRACT_OP = "-";
-	public static final String DIVIDE_OP = "/";
+	public static final String MULTIPLY_OP = "*"; //$NON-NLS-1$
+	public static final String ADD_OP = "+"; //$NON-NLS-1$
+	public static final String SUBTRACT_OP = "-"; //$NON-NLS-1$
+	public static final String DIVIDE_OP = "/"; //$NON-NLS-1$
 	
 	//String
-	public static final String ASCII = "ascii";
-	public static final String CHAR = "char";
-	public static final String CONCAT = "concat";
+	public static final String ASCII = "ascii"; //$NON-NLS-1$
+	public static final String CHAR = "char"; //$NON-NLS-1$
+	public static final String CONCAT = "concat"; //$NON-NLS-1$
 	//public static final String DIFFERENCE = "difference";
-	public static final String INITCAP = "initcap";
-	public static final String INSERT = "insert";
-	public static final String LCASE = "lcase";
-	public static final String LPAD = "lpad";
-	public static final String LEFT = "left";
-	public static final String LENGTH = "length";
-	public static final String LOCATE = "locate";
-	public static final String LTRIM = "ltrim";
-	public static final String REPEAT = "repeat";
-	public static final String REPLACE = "replace";
-	public static final String RIGHT = "right";
-	public static final String RPAD = "rpad";
-	public static final String RTRIM = "rtrim";
+	public static final String INITCAP = "initcap"; //$NON-NLS-1$
+	public static final String INSERT = "insert"; //$NON-NLS-1$
+	public static final String LCASE = "lcase"; //$NON-NLS-1$
+	public static final String LPAD = "lpad"; //$NON-NLS-1$
+	public static final String LEFT = "left"; //$NON-NLS-1$
+	public static final String LENGTH = "length"; //$NON-NLS-1$
+	public static final String LOCATE = "locate"; //$NON-NLS-1$
+	public static final String LTRIM = "ltrim"; //$NON-NLS-1$
+	public static final String REPEAT = "repeat"; //$NON-NLS-1$
+	public static final String REPLACE = "replace"; //$NON-NLS-1$
+	public static final String RIGHT = "right"; //$NON-NLS-1$
+	public static final String RPAD = "rpad"; //$NON-NLS-1$
+	public static final String RTRIM = "rtrim"; //$NON-NLS-1$
 	//public static final String SOUNDEX = "soundex";
-	public static final String SUBSTRING = "substring";
-	public static final String UCASE = "ucase";
+	public static final String SUBSTRING = "substring"; //$NON-NLS-1$
+	public static final String UCASE = "ucase"; //$NON-NLS-1$
 	
 	//numeric
-	public static final String ABS = "abs";
-	public static final String ACOS = "acos";
-	public static final String ASIN = "asin";
-	public static final String ATAN = "atan";
-	public static final String ATAN2 = "atan2";
-	public static final String CEILING = "ceiling";
-	public static final String COS = "cos";
-	public static final String COT = "cot";
-	public static final String DEGREES = "degrees";
-	public static final String EXP = "exp";
-	public static final String FLOOR = "floor";
-	public static final String FORMATINTEGER = "formatinteger";
-	public static final String FORMATLONG = "formatlong";
-	public static final String FORMATDOUBLE = "formatdouble";
-	public static final String FORMATFLOAT = "formatfloat";
-	public static final String FORMATBIGINTEGER = "formatbiginteger";
-	public static final String FORMATBIGDECIMAL = "formatbigdecimal";
-	public static final String LOG = "log";
-	public static final String LOG10 = "log10";
-	public static final String MOD = "mod";
-	public static final String PARSEINTEGER = "parseinteger";
-	public static final String PARSELONG = "parselong";
-	public static final String PARSEDOUBLE = "parsedouble";
-	public static final String PARSEFLOAT = "parsefloat";
-	public static final String PARSEBIGINTEGER = "parsebiginteger";
-	public static final String PARSEBIGDECIMAL = "parsebigdecimal";
-	public static final String PI = "pi";
-	public static final String POWER = "power";
-	public static final String RADIANS = "radians";
-	public static final String RAND = "rand";
-	public static final String ROUND = "round";
-	public static final String SIGN = "sign";
-	public static final String SIN = "sin";
-	public static final String SQRT = "sqrt";
-	public static final String TAN = "tan";
-	public static final String TRANSLATE = "translate";
-	public static final String TRUNCATE = "truncate";
+	public static final String ABS = "abs"; //$NON-NLS-1$
+	public static final String ACOS = "acos"; //$NON-NLS-1$
+	public static final String ASIN = "asin"; //$NON-NLS-1$
+	public static final String ATAN = "atan"; //$NON-NLS-1$
+	public static final String ATAN2 = "atan2"; //$NON-NLS-1$
+	public static final String CEILING = "ceiling"; //$NON-NLS-1$
+	public static final String COS = "cos"; //$NON-NLS-1$
+	public static final String COT = "cot"; //$NON-NLS-1$
+	public static final String DEGREES = "degrees"; //$NON-NLS-1$
+	public static final String EXP = "exp"; //$NON-NLS-1$
+	public static final String FLOOR = "floor"; //$NON-NLS-1$
+	public static final String FORMATINTEGER = "formatinteger"; //$NON-NLS-1$
+	public static final String FORMATLONG = "formatlong"; //$NON-NLS-1$
+	public static final String FORMATDOUBLE = "formatdouble"; //$NON-NLS-1$
+	public static final String FORMATFLOAT = "formatfloat"; //$NON-NLS-1$
+	public static final String FORMATBIGINTEGER = "formatbiginteger"; //$NON-NLS-1$
+	public static final String FORMATBIGDECIMAL = "formatbigdecimal"; //$NON-NLS-1$
+	public static final String LOG = "log"; //$NON-NLS-1$
+	public static final String LOG10 = "log10"; //$NON-NLS-1$
+	public static final String MOD = "mod"; //$NON-NLS-1$
+	public static final String PARSEINTEGER = "parseinteger"; //$NON-NLS-1$
+	public static final String PARSELONG = "parselong"; //$NON-NLS-1$
+	public static final String PARSEDOUBLE = "parsedouble"; //$NON-NLS-1$
+	public static final String PARSEFLOAT = "parsefloat"; //$NON-NLS-1$
+	public static final String PARSEBIGINTEGER = "parsebiginteger"; //$NON-NLS-1$
+	public static final String PARSEBIGDECIMAL = "parsebigdecimal"; //$NON-NLS-1$
+	public static final String PI = "pi"; //$NON-NLS-1$
+	public static final String POWER = "power"; //$NON-NLS-1$
+	public static final String RADIANS = "radians"; //$NON-NLS-1$
+	public static final String RAND = "rand"; //$NON-NLS-1$
+	public static final String ROUND = "round"; //$NON-NLS-1$
+	public static final String SIGN = "sign"; //$NON-NLS-1$
+	public static final String SIN = "sin"; //$NON-NLS-1$
+	public static final String SQRT = "sqrt"; //$NON-NLS-1$
+	public static final String TAN = "tan"; //$NON-NLS-1$
+	public static final String TRANSLATE = "translate"; //$NON-NLS-1$
+	public static final String TRUNCATE = "truncate"; //$NON-NLS-1$
 	
 	//bit
-	public static final String BITAND = "bitand";
-	public static final String BITOR = "bitor";
-	public static final String BITNOT = "bitnot";
-	public static final String BITXOR = "bitxor";
+	public static final String BITAND = "bitand"; //$NON-NLS-1$
+	public static final String BITOR = "bitor"; //$NON-NLS-1$
+	public static final String BITNOT = "bitnot"; //$NON-NLS-1$
+	public static final String BITXOR = "bitxor"; //$NON-NLS-1$
 	
 	//date functions
-	public static final String CURDATE = "curdate";
-	public static final String CURTIME = "curtime";
-	public static final String DAYNAME = "dayname";
-	public static final String DAYOFMONTH = "dayofmonth";
-	public static final String DAYOFWEEK = "dayofweek";
-	public static final String DAYOFYEAR = "dayofyear";
-	public static final String FORMATDATE = "formatdate";
-	public static final String FORMATTIME = "formattime";
-	public static final String FORMATTIMESTAMP = "formattimestamp";
-	public static final String HOUR = "hour";
-	public static final String MINUTE = "minute";
-	public static final String MODIFYTIMEZONE = "modifytimezone";
-	public static final String MONTH = "month";
-	public static final String MONTHNAME = "monthname";
-	public static final String NOW = "now";
-	public static final String PARSEDATE = "parsedate";
-	public static final String PARSETIME = "parsetime";
-	public static final String PARSETIMESTAMP = "parsetimestamp";
-	public static final String QUARTER = "quarter";
-	public static final String SECOND = "second";
-	public static final String TIMESTAMPADD = "timestampadd";
-	public static final String TIMESTAMPCREATE = "timestampcreate";
-	public static final String TIMESTAMPDIFF = "timestampdiff";
-	public static final String WEEK = "week";
-	public static final String YEAR = "year";
+	public static final String CURDATE = "curdate"; //$NON-NLS-1$
+	public static final String CURTIME = "curtime"; //$NON-NLS-1$
+	public static final String DAYNAME = "dayname"; //$NON-NLS-1$
+	public static final String DAYOFMONTH = "dayofmonth"; //$NON-NLS-1$
+	public static final String DAYOFWEEK = "dayofweek"; //$NON-NLS-1$
+	public static final String DAYOFYEAR = "dayofyear"; //$NON-NLS-1$
+	public static final String FORMATDATE = "formatdate"; //$NON-NLS-1$
+	public static final String FORMATTIME = "formattime"; //$NON-NLS-1$
+	public static final String FORMATTIMESTAMP = "formattimestamp"; //$NON-NLS-1$
+	public static final String HOUR = "hour"; //$NON-NLS-1$
+	public static final String MINUTE = "minute"; //$NON-NLS-1$
+	public static final String MODIFYTIMEZONE = "modifytimezone"; //$NON-NLS-1$
+	public static final String MONTH = "month"; //$NON-NLS-1$
+	public static final String MONTHNAME = "monthname"; //$NON-NLS-1$
+	public static final String NOW = "now"; //$NON-NLS-1$
+	public static final String PARSEDATE = "parsedate"; //$NON-NLS-1$
+	public static final String PARSETIME = "parsetime"; //$NON-NLS-1$
+	public static final String PARSETIMESTAMP = "parsetimestamp"; //$NON-NLS-1$
+	public static final String QUARTER = "quarter"; //$NON-NLS-1$
+	public static final String SECOND = "second"; //$NON-NLS-1$
+	public static final String TIMESTAMPADD = "timestampadd"; //$NON-NLS-1$
+	public static final String TIMESTAMPCREATE = "timestampcreate"; //$NON-NLS-1$
+	public static final String TIMESTAMPDIFF = "timestampdiff"; //$NON-NLS-1$
+	public static final String WEEK = "week"; //$NON-NLS-1$
+	public static final String YEAR = "year"; //$NON-NLS-1$
 	
 	//system functions
-	public static final String IFNULL = "ifnull";
-	public static final String COALESCE = "coalesce";
-	public static final String NULLIF = "nullif";
+	public static final String IFNULL = "ifnull"; //$NON-NLS-1$
+	public static final String COALESCE = "coalesce"; //$NON-NLS-1$
+	public static final String NULLIF = "nullif"; //$NON-NLS-1$
 	
 	//conversion functions
-	public static final String CONVERT = "convert";
+	public static final String CONVERT = "convert"; //$NON-NLS-1$
 	
 	//xml
-	public static final String XPATHVALUE = "xpathvalue";
+	public static final String XPATHVALUE = "xpathvalue"; //$NON-NLS-1$
 
 }

Modified: trunk/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml	2009-03-20 12:45:27 UTC (rev 608)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml	2009-03-20 18:09:39 UTC (rev 609)
@@ -396,10 +396,10 @@
 						</entry>
 						<entry>
 							<para>Round x to y places; negative values of y indicate
-								places to the right of the decimal point</para>
+								places to the left of the decimal point</para>
 						</entry>
 						<entry>
-							<para>x in {integer, float, double} y is integer, return is same
+							<para>x in {integer, float, double, bigdecimal} y is integer, return is same
 								type as x</para>
 						</entry>
 					</row>

Modified: trunk/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java	2009-03-20 12:45:27 UTC (rev 608)
+++ trunk/engine/src/main/java/com/metamatrix/query/function/FunctionMethods.java	2009-03-20 18:09:39 UTC (rev 609)
@@ -295,49 +295,28 @@
 		throw new FunctionExecutionException(ErrorMessageKeys.FUNCTION_0007, QueryPlugin.Util.getString(ErrorMessageKeys.FUNCTION_0007, new Object[]{"power", x.getClass().getName(), y.getClass().getName()})); //$NON-NLS-1$
 	}
 
-    // ================== Function = power =====================
-
-    public static  Object round(Object number, Object places) throws FunctionExecutionException {
-        // Null inputs generate null output
-        if(number == null || places == null) {
-            return null;
+    public static int round(int number, int places) {
+        if(places < 0){
+        	return round(new BigDecimal(number), places).intValue();
         }
-
-        // Places will always be an Integer
-        int intValuePlaces = ((Integer)places).intValue();
-        double placeMultiplier = Math.pow(10,intValuePlaces);
-
-        if(number instanceof Integer) {
-            Integer integerNumber = (Integer)number;
-            if(intValuePlaces <= 0){
-                return new Integer((int)((Math.round((integerNumber.intValue()*placeMultiplier)))/placeMultiplier));
-            }
-            return number;
-        } else if(number instanceof Float) {
-            Float floatNumber = (Float)number;
-            return new Float((float)((Math.round((floatNumber.floatValue()*placeMultiplier)))/placeMultiplier));
-        } else if(number instanceof Double) {
-            Double doubleNumber = (Double)number;
-            return new Double((Math.round((doubleNumber.doubleValue()*placeMultiplier)))/placeMultiplier);
-        } else if(number instanceof BigDecimal) {
-            BigDecimal bigDecimalNumber = (BigDecimal)number;
-            int scale = bigDecimalNumber.scale();
-            bigDecimalNumber = bigDecimalNumber.multiply(new BigDecimal("" + placeMultiplier)); //$NON-NLS-1$
-            bigDecimalNumber = bigDecimalNumber.setScale(0,BigDecimal.ROUND_HALF_UP);
-
-            BigDecimal bigDecimalMultiplier = new BigDecimal("" + placeMultiplier); //$NON-NLS-1$
-            if(intValuePlaces > 0){
-                bigDecimalNumber = bigDecimalNumber.setScale(scale,BigDecimal.ROUND_HALF_UP);
-                bigDecimalNumber = bigDecimalNumber.divide(bigDecimalMultiplier,BigDecimal.ROUND_HALF_UP);
-            }else{
-                bigDecimalNumber = bigDecimalNumber.divide(bigDecimalMultiplier,BigDecimal.ROUND_HALF_UP);
-                bigDecimalNumber = bigDecimalNumber.setScale(scale,BigDecimal.ROUND_HALF_UP);
-            }
-            return bigDecimalNumber;
-        } else {
-            Object[] params = new Object[] { "round", number.getClass().getName(), places.getClass().getName() }; //$NON-NLS-1$
-            throw new FunctionExecutionException(ErrorMessageKeys.FUNCTION_0065, QueryPlugin.Util.getString(ErrorMessageKeys.FUNCTION_0065, params));
+        return number;
+    }
+    
+    public static float round(float number, int places) {
+    	return round(new BigDecimal(number), places).floatValue();
+    }
+    
+    public static double round(double number, int places) {
+    	return round(new BigDecimal(number), places).doubleValue();
+    }
+    
+    public static BigDecimal round(BigDecimal bigDecimalNumber, int places) {
+        int scale = bigDecimalNumber.scale();
+        if (scale <= places) {
+        	return bigDecimalNumber;
         }
+        bigDecimalNumber = bigDecimalNumber.setScale(places,BigDecimal.ROUND_HALF_UP);
+        return bigDecimalNumber.setScale(scale,BigDecimal.ROUND_HALF_UP);
     }
 
 	// ================== Function = sign =====================

Modified: trunk/engine/src/test/java/com/metamatrix/query/function/TestFunction.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/function/TestFunction.java	2009-03-20 12:45:27 UTC (rev 608)
+++ trunk/engine/src/test/java/com/metamatrix/query/function/TestFunction.java	2009-03-20 18:09:39 UTC (rev 609)
@@ -144,19 +144,26 @@
         assertEquals("Didn't get expected result from locate", expectedLocation, actualLocation); //$NON-NLS-1$
     }
 
-    public static void helpTestRound(Object number, Integer places, Object expected) throws FunctionExecutionException {
+    public static void helpTestRound(Integer number, Integer places, Object expected) throws FunctionExecutionException {
         Object actual = FunctionMethods.round(number, places);
         assertEquals("round(" + number + "," + places + ") failed.", expected, actual); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
     }
+    
+    public static void helpTestRound(Float number, Integer places, Object expected) throws FunctionExecutionException {
+        Object actual = FunctionMethods.round(number, places);
+        assertEquals("round(" + number + "," + places + ") failed.", expected, actual); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+    }
 
-    public static void helpTestRoundFail(Object number, Integer places) {
-        try {
-            Object actual = FunctionMethods.round(number, places);
-            fail("Expected exception, but got = " + actual); //$NON-NLS-1$
-        } catch (FunctionExecutionException e) {
-        } 
+    public static void helpTestRound(Double number, Integer places, Object expected) throws FunctionExecutionException {
+        Object actual = FunctionMethods.round(number, places);
+        assertEquals("round(" + number + "," + places + ") failed.", expected, actual); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
     }
 
+    public static void helpTestRound(BigDecimal number, Integer places, Object expected) throws FunctionExecutionException {
+        Object actual = FunctionMethods.round(number, places);
+        assertEquals("round(" + number + "," + places + ") failed.", expected, actual); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+    }
+
     public static void helpTestHour1(String timeStr, int expected) throws FunctionExecutionException {
         Time t = Time.valueOf(timeStr);
         Object actual = FunctionMethods.hour(t);
@@ -739,6 +746,10 @@
     public void testRoundFloat9() throws FunctionExecutionException {
         helpTestRound(new Float(123.456F), new Integer(-4), new Float(0F));
     }
+    
+    public void testRoundFloat10() throws FunctionExecutionException {
+        helpTestRound(new Float(123.456F), new Integer(4000), new Float(123.456F));
+    }
 
     public void testRoundDouble1() throws FunctionExecutionException {
         helpTestRound(new Double(123.456), new Integer(4), new Double(123.456));
@@ -775,7 +786,11 @@
     public void testRoundDouble9() throws FunctionExecutionException {
         helpTestRound(new Double(123.456), new Integer(-4), new Double(0));
     }
-
+    
+    public void testRoundDouble10() throws FunctionExecutionException {
+        helpTestRound(new Double(-3.5), new Integer(0), new Double(-4));
+    }
+    
     public void testRoundBigDecimal1() throws FunctionExecutionException {
         helpTestRound(new BigDecimal("123.456"), new Integer(4), new BigDecimal("123.456")); //$NON-NLS-1$ //$NON-NLS-2$
     }
@@ -811,19 +826,7 @@
     public void testRoundBigDecimal9() throws FunctionExecutionException {
         helpTestRound(new BigDecimal("123.456"), new Integer(-4), new BigDecimal("0.000")); //$NON-NLS-1$ //$NON-NLS-2$
     }
-
-    public void testRoundFail1() {
-        helpTestRoundFail("123.456", new Integer(-4)); //$NON-NLS-1$
-    }
-
-    public void testRoundNull1() throws FunctionExecutionException {
-        helpTestRound(null, new Integer(0), null);
-    }
-
-    public void testRoundNull2() throws FunctionExecutionException {
-        helpTestRound(new Integer(0), null, null);
-    }
-
+    
     public void testHour1() throws FunctionExecutionException {
         helpTestHour1("00:00:00", 0); //$NON-NLS-1$
     }




More information about the teiid-commits mailing list