Loading mysql-test/r/type_newdecimal.result +15 −0 Original line number Diff line number Diff line Loading @@ -1534,6 +1534,21 @@ select (1.20396873 * 0.89550000 * 0.68000000 * 1.08721696 * 0.99500000 * (1.20396873 * 0.89550000 * 0.68000000 * 1.08721696 * 0.99500000 * 1.01500000 * 1.01500000 * 0.99500000) 0.812988073953673124592306939480 create table t1 as select 5.05 / 0.014; Warnings: Note 1265 Data truncated for column '5.05 / 0.014' at row 1 show warnings; Level Code Message Note 1265 Data truncated for column '5.05 / 0.014' at row 1 show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `5.05 / 0.014` decimal(10,6) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 select * from t1; 5.05 / 0.014 360.714286 DROP TABLE t1; End of 5.0 tests select cast(143.481 as decimal(4,1)); cast(143.481 as decimal(4,1)) Loading mysql-test/t/type_newdecimal.test +10 −0 Original line number Diff line number Diff line Loading @@ -1235,6 +1235,16 @@ DROP TABLE t1; select (1.20396873 * 0.89550000 * 0.68000000 * 1.08721696 * 0.99500000 * 1.01500000 * 1.01500000 * 0.99500000); # # Bug #31616 div_precision_increment description looks wrong # create table t1 as select 5.05 / 0.014; show warnings; show create table t1; select * from t1; DROP TABLE t1; --echo End of 5.0 tests # Loading sql/item_func.cc +4 −2 Original line number Diff line number Diff line Loading @@ -1301,8 +1301,10 @@ my_decimal *Item_func_div::decimal_op(my_decimal *decimal_value) void Item_func_div::result_precision() { uint arg_prec= args[0]->decimal_precision() + prec_increment; uint precision=min(arg_prec, DECIMAL_MAX_PRECISION); uint precision=min(args[0]->decimal_precision() + args[1]->decimals + prec_increment, DECIMAL_MAX_PRECISION); /* Integer operations keep unsigned_flag if one of arguments is unsigned */ if (result_type() == INT_RESULT) unsigned_flag= args[0]->unsigned_flag | args[1]->unsigned_flag; Loading Loading
mysql-test/r/type_newdecimal.result +15 −0 Original line number Diff line number Diff line Loading @@ -1534,6 +1534,21 @@ select (1.20396873 * 0.89550000 * 0.68000000 * 1.08721696 * 0.99500000 * (1.20396873 * 0.89550000 * 0.68000000 * 1.08721696 * 0.99500000 * 1.01500000 * 1.01500000 * 0.99500000) 0.812988073953673124592306939480 create table t1 as select 5.05 / 0.014; Warnings: Note 1265 Data truncated for column '5.05 / 0.014' at row 1 show warnings; Level Code Message Note 1265 Data truncated for column '5.05 / 0.014' at row 1 show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `5.05 / 0.014` decimal(10,6) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 select * from t1; 5.05 / 0.014 360.714286 DROP TABLE t1; End of 5.0 tests select cast(143.481 as decimal(4,1)); cast(143.481 as decimal(4,1)) Loading
mysql-test/t/type_newdecimal.test +10 −0 Original line number Diff line number Diff line Loading @@ -1235,6 +1235,16 @@ DROP TABLE t1; select (1.20396873 * 0.89550000 * 0.68000000 * 1.08721696 * 0.99500000 * 1.01500000 * 1.01500000 * 0.99500000); # # Bug #31616 div_precision_increment description looks wrong # create table t1 as select 5.05 / 0.014; show warnings; show create table t1; select * from t1; DROP TABLE t1; --echo End of 5.0 tests # Loading
sql/item_func.cc +4 −2 Original line number Diff line number Diff line Loading @@ -1301,8 +1301,10 @@ my_decimal *Item_func_div::decimal_op(my_decimal *decimal_value) void Item_func_div::result_precision() { uint arg_prec= args[0]->decimal_precision() + prec_increment; uint precision=min(arg_prec, DECIMAL_MAX_PRECISION); uint precision=min(args[0]->decimal_precision() + args[1]->decimals + prec_increment, DECIMAL_MAX_PRECISION); /* Integer operations keep unsigned_flag if one of arguments is unsigned */ if (result_type() == INT_RESULT) unsigned_flag= args[0]->unsigned_flag | args[1]->unsigned_flag; Loading