[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