Update of /cvsroot/monetdb/sql/src/backends/monet4
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv1413/monet4
Modified Files:
Tag: SQL_2-22
sql_server.mx
Log Message:
fixed bug [ 1907063 ] ms_round....
The round function for dbl, bte was missing
Index: sql_server.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet4/sql_server.mx,v
retrieving revision 1.189.2.5
retrieving revision 1.189.2.6
diff -u -d -r1.189.2.5 -r1.189.2.6
--- sql_server.mx 26 Feb 2008 17:53:44 -0000 1.189.2.5
+++ sql_server.mx 6 Mar 2008 21:28:39 -0000 1.189.2.6
@@ -164,10 +164,13 @@
@:mel_round(int)@
@:mel_round(lng)@
[EMAIL PROTECTED]
- .COMMAND dec_round( flt v, flt r ) : flt = flt_dec_round_wrap; "round
off the value v to nearests multiple of r"
[EMAIL PROTECTED] mel_fround
+ .COMMAND dec_round( @1 v, @1 r ) : @1 = @1_dec_round_wrap; "round off
the value v to nearests multiple of r"
- .COMMAND dec_round( dbl v, dbl r ) : dbl = dbl_dec_round_wrap; "round
off the value v to nearests multiple of r"
+ .COMMAND round( @1 v, bte r ) : @1 = @1_round_wrap; "round off the
decimal v(d,s) to r digits behind the dot (if r < 0, before the dot)"
[EMAIL PROTECTED]
+@:mel_fround(flt)@
+@:mel_fround(dbl)@
@= mel_cast
.COMMAND @1( str v ) : @1 = [EMAIL PROTECTED]; "cast to @1 and check for
overflow"
@@ -304,6 +307,7 @@
#include <algebra.h>
#include "sql_storage.h"
#include <store_sequence.h>
+#include <math.h>
@-
The code heavily depends on the (complex) data structures for
@@ -914,13 +918,15 @@
*res = (((*v + rnd)/scales[dff])*scales[dff]);
else
*res = (((*v - rnd)/scales[dff])*scales[dff]);
- } else if (*r <= 0) {
+ } else if (*r <= 0 && -*r + *s > 0) {
int dff = -*r + *s;
lng rnd = scales[dff]>>1;
if (*v > 0)
*res = (((*v + rnd)/scales[dff])*scales[dff]);
else
*res = (((*v - rnd)/scales[dff])*scales[dff]);
+ } else {
+ *res = *v;
}
return GDK_SUCCEED;
}
@@ -997,6 +1003,33 @@
*res = val;
return GDK_SUCCEED;
}
+
+int
[EMAIL PROTECTED]( @1 *res, @1 *v, bte *r )
+{
+ /* shortcut nil */
+ if (*v == @1_nil) {
+ *res = @1_nil;
+ } else if (*r < 0) {
+ int d = -*r;
+ @1 rnd = scales[d]>>1;
+
+ if (*v > 0)
+ *res = (floor(((*v +
rnd)/((@1)(scales[d]))))*scales[d]);
+ else
+ *res = (floor(((*v +
rnd)/((@1)(scales[d]))))*scales[d]);
+ } else if (*r > 0) {
+ int d = *r;
+
+ if (*v > 0)
+ *res = (floor(*v*(@1)scales[d]+.5)/scales[d]);
+ else
+ *res = (floor(*v*(@1)scales[d]+.5)/scales[d]);
+ } else {
+ *res = *v;
+ }
+ return GDK_SUCCEED;
+}
@c
@:fround(flt)@
@:fround(dbl)@
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins