Changeset: e6fa48510109 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e6fa48510109
Modified Files:
sql/backends/monet5/sql.mx
sql/server/sql_atom.c
sql/test/BugTracker-2011/Tests/default-interval.Bug-2877.stable.out
sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
sql/test/bugs/Tests/order_disjunctive_bug.SF-1338309.sql
Branch: Dec2011
Log Message:
fixed bug in handling default interval values
approved output of func-iter
added order by parts to get stable output
diffs (116 lines):
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -518,6 +518,10 @@ command sql.round( v:@1, d:int, s:int, r
address @1_round_wrap
comment "round off the decimal v(d,s) to r digits behind the dot (if r < 0,
before the dot)";
+command calc.second_interval( sc:int, v:@1, ek:int, sk:int ) :lng
+address @1_dec2second_interval
+comment "cast @1 decimal to a second_interval";
+
@
@mal
@:mal_round(bte)@
@@ -1289,6 +1293,7 @@ sql5_export str str_2dec_@1( @1 *res, st
sql5_export str str_2num_@1( @1 *res, str *v, int *len );
sql5_export str batstr_2dec_@1( int *res, int *val, int *d, int *sc );
sql5_export str batstr_2num_@1( int *res, int *v, int *len );
+sql5_export str @1_dec2second_interval( lng *res, int *sc, @1 *dec, int *ek,
int *sk );
@
@h
@:round_export(bte)@
@@ -4141,6 +4146,28 @@ batstr_2num_@1( int *res, int *bid, int
BBPunfix(b->batCacheid);
return msg;
}
+
+str
+@1_dec2second_interval( lng *res, int *sc, @1 *dec, int *ek, int *sk )
+{
+ lng value = *dec;
+
+ (void)ek;
+ (void)sk;
+ if (*sc < 3) {
+ int d = 3 - *sc;
+ value *= scales[d];
+ } else if (*sc > 3 ) {
+ int d = *sc - 3;
+ lng rnd = scales[d]>>1;
+
+ value += rnd;
+ value /= scales[d];
+ }
+ *res = value;
+ return MAL_SUCCEED;
+}
+
@
@c
diff --git a/sql/server/sql_atom.c b/sql/server/sql_atom.c
--- a/sql/server/sql_atom.c
+++ b/sql/server/sql_atom.c
@@ -381,7 +381,13 @@ atom2sql(atom *a)
case 13: /* second */
break;
}
- sprintf(buf, LLFMT, v);
+ if (a->tpe.digits < 4) {
+ sprintf(buf, LLFMT, v);
+ } else {
+ lng sec = v/1000;
+ lng msec = v%1000;
+ sprintf(buf, LLFMT "." LLFMT, sec, msec);
+ }
break;
}
case EC_NUM:
diff --git
a/sql/test/BugTracker-2011/Tests/default-interval.Bug-2877.stable.out
b/sql/test/BugTracker-2011/Tests/default-interval.Bug-2877.stable.out
--- a/sql/test/BugTracker-2011/Tests/default-interval.Bug-2877.stable.out
+++ b/sql/test/BugTracker-2011/Tests/default-interval.Bug-2877.stable.out
@@ -57,7 +57,7 @@ Ready.
% i, c1, c2 # name
% int, sec_interval, sec_interval # type
% 1, 0, 0 # length
-[ 1, 3600, 3600 ]
+[ 1, 3600.000, 3600.000 ]
#rollback;
# 12:40:50 >
diff --git
a/sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
b/sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
--- a/sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
+++ b/sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
@@ -36,7 +36,7 @@ Ready.
% 66 # length
function user.s3_1{autoCommit=true}():void;
X_23 := nil:bat[:oid,:dbl];
-barrier X_61 := language.dataflow();
+barrier X_55 := language.dataflow();
X_2 := sql.mvc();
X_10:bat[:oid,:dbl] := sql.bind(X_2,"sys","tab_2826","d",0);
X_8:bat[:oid,:dbl] := sql.bind(X_2,"sys","tab_2826","d",2);
@@ -53,7 +53,7 @@ barrier X_61 := language.dataflow();
X_21 := algebra.markT(X_19,0@0:oid);
X_22 := bat.reverse(X_21);
X_23 := algebra.leftjoin(X_22,X_14);
-exit X_61;
+exit X_55;
X_24 := sql.resultSet(1,1,X_23);
sql.rsColumn(X_24,"sys.tab_2826","d","double",53,0,X_23);
X_30 := io.stdout();
diff --git a/sql/test/bugs/Tests/order_disjunctive_bug.SF-1338309.sql
b/sql/test/bugs/Tests/order_disjunctive_bug.SF-1338309.sql
--- a/sql/test/bugs/Tests/order_disjunctive_bug.SF-1338309.sql
+++ b/sql/test/bugs/Tests/order_disjunctive_bug.SF-1338309.sql
@@ -7,8 +7,8 @@ insert into urlparts values (3857);
insert into urlparts values (3868);
SELECT * FROM urlparts WHERE urlid=218 OR urlid=219 OR
-urlid=329 OR urlid=3857 OR urlid=3868;
+urlid=329 OR urlid=3857 OR urlid=3868 order by urlid;
SELECT * FROM urlparts WHERE urlid=3868 OR urlid=3857
-OR urlid=329 OR urlid=219 OR urlid=218;
+OR urlid=329 OR urlid=219 OR urlid=218 order by urlid;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list