Loading mysql-test/r/type_newdecimal.result +23 −0 Original line number Diff line number Diff line Loading @@ -955,3 +955,26 @@ t1 CREATE TABLE `t1` ( `sl` decimal(5,5) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; create table t1 ( f1 decimal unsigned not null default 17.49, f2 decimal unsigned not null default 17.68, f3 decimal unsigned not null default 99.2, f4 decimal unsigned not null default 99.7, f5 decimal unsigned not null default 104.49, f6 decimal unsigned not null default 199.91, f7 decimal unsigned not null default 999.9, f8 decimal unsigned not null default 9999.99); Warnings: Note 1265 Data truncated for column 'f1' at row 1 Note 1265 Data truncated for column 'f2' at row 1 Note 1265 Data truncated for column 'f3' at row 1 Note 1265 Data truncated for column 'f4' at row 1 Note 1265 Data truncated for column 'f5' at row 1 Note 1265 Data truncated for column 'f6' at row 1 Note 1265 Data truncated for column 'f7' at row 1 Note 1265 Data truncated for column 'f8' at row 1 insert into t1 (f1) values (1); select * from t1; f1 f2 f3 f4 f5 f6 f7 f8 1 18 99 100 104 200 1000 10000 drop table t1; mysql-test/t/type_newdecimal.test +17 −0 Original line number Diff line number Diff line Loading @@ -998,3 +998,20 @@ create table t1 (sl decimal(0,30)); create table t1 (sl decimal(5, 5)); show create table t1; drop table t1; # # Bug 11557 (DEFAULT values rounded improperly # create table t1 ( f1 decimal unsigned not null default 17.49, f2 decimal unsigned not null default 17.68, f3 decimal unsigned not null default 99.2, f4 decimal unsigned not null default 99.7, f5 decimal unsigned not null default 104.49, f6 decimal unsigned not null default 199.91, f7 decimal unsigned not null default 999.9, f8 decimal unsigned not null default 9999.99); insert into t1 (f1) values (1); select * from t1; drop table t1; strings/decimal.c +7 −8 Original line number Diff line number Diff line Loading @@ -1443,6 +1443,7 @@ decimal_round(decimal_t *from, decimal_t *to, int scale, intg1=ROUND_UP(from->intg + (((intg0 + frac0)>0) && (from->buf[0] == DIG_MAX))); dec1 *buf0=from->buf, *buf1=to->buf, x, y, carry=0; int first_dig; sanity(to); Loading Loading @@ -1578,14 +1579,6 @@ decimal_round(decimal_t *from, decimal_t *to, int scale, *buf1=1; to->intg++; } else { /* Here we check 999.9 -> 1000 case when we need to increase intg */ int first_dig= to->intg % DIG_PER_DEC1; /* first_dig==0 should be handled above in the 'if' */ if (first_dig && (*buf1 >= powers10[first_dig])) to->intg++; } } else { Loading @@ -1606,6 +1599,12 @@ decimal_round(decimal_t *from, decimal_t *to, int scale, } } } /* Here we check 999.9 -> 1000 case when we need to increase intg */ first_dig= to->intg % DIG_PER_DEC1; if (first_dig && (*buf1 >= powers10[first_dig])) to->intg++; if (scale<0) scale=0; Loading Loading
mysql-test/r/type_newdecimal.result +23 −0 Original line number Diff line number Diff line Loading @@ -955,3 +955,26 @@ t1 CREATE TABLE `t1` ( `sl` decimal(5,5) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; create table t1 ( f1 decimal unsigned not null default 17.49, f2 decimal unsigned not null default 17.68, f3 decimal unsigned not null default 99.2, f4 decimal unsigned not null default 99.7, f5 decimal unsigned not null default 104.49, f6 decimal unsigned not null default 199.91, f7 decimal unsigned not null default 999.9, f8 decimal unsigned not null default 9999.99); Warnings: Note 1265 Data truncated for column 'f1' at row 1 Note 1265 Data truncated for column 'f2' at row 1 Note 1265 Data truncated for column 'f3' at row 1 Note 1265 Data truncated for column 'f4' at row 1 Note 1265 Data truncated for column 'f5' at row 1 Note 1265 Data truncated for column 'f6' at row 1 Note 1265 Data truncated for column 'f7' at row 1 Note 1265 Data truncated for column 'f8' at row 1 insert into t1 (f1) values (1); select * from t1; f1 f2 f3 f4 f5 f6 f7 f8 1 18 99 100 104 200 1000 10000 drop table t1;
mysql-test/t/type_newdecimal.test +17 −0 Original line number Diff line number Diff line Loading @@ -998,3 +998,20 @@ create table t1 (sl decimal(0,30)); create table t1 (sl decimal(5, 5)); show create table t1; drop table t1; # # Bug 11557 (DEFAULT values rounded improperly # create table t1 ( f1 decimal unsigned not null default 17.49, f2 decimal unsigned not null default 17.68, f3 decimal unsigned not null default 99.2, f4 decimal unsigned not null default 99.7, f5 decimal unsigned not null default 104.49, f6 decimal unsigned not null default 199.91, f7 decimal unsigned not null default 999.9, f8 decimal unsigned not null default 9999.99); insert into t1 (f1) values (1); select * from t1; drop table t1;
strings/decimal.c +7 −8 Original line number Diff line number Diff line Loading @@ -1443,6 +1443,7 @@ decimal_round(decimal_t *from, decimal_t *to, int scale, intg1=ROUND_UP(from->intg + (((intg0 + frac0)>0) && (from->buf[0] == DIG_MAX))); dec1 *buf0=from->buf, *buf1=to->buf, x, y, carry=0; int first_dig; sanity(to); Loading Loading @@ -1578,14 +1579,6 @@ decimal_round(decimal_t *from, decimal_t *to, int scale, *buf1=1; to->intg++; } else { /* Here we check 999.9 -> 1000 case when we need to increase intg */ int first_dig= to->intg % DIG_PER_DEC1; /* first_dig==0 should be handled above in the 'if' */ if (first_dig && (*buf1 >= powers10[first_dig])) to->intg++; } } else { Loading @@ -1606,6 +1599,12 @@ decimal_round(decimal_t *from, decimal_t *to, int scale, } } } /* Here we check 999.9 -> 1000 case when we need to increase intg */ first_dig= to->intg % DIG_PER_DEC1; if (first_dig && (*buf1 >= powers10[first_dig])) to->intg++; if (scale<0) scale=0; Loading