Commit baae624c authored by unknown's avatar unknown
Browse files

Merge svojtovich@bk-internal.mysql.com:/home/bk/mysql-5.0

into mysql.com:/home/svoj/devel/mysql/yassl-mysql-5.0

parents 210f576c 146893a7
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -143,3 +143,6 @@ select format(col2,6) from t1 where col1=7;
format(col2,6)
1,234,567,890,123,456.123450
drop table t1;
select round(150, 2);
round(150, 2)
150.00
+8 −0
Original line number Diff line number Diff line
@@ -896,6 +896,14 @@ create table t1( d1 decimal(18) unsigned, d2 decimal(20) unsigned, d3 decimal (2
insert into t1 values(1,-1,-1);
ERROR 22003: Out of range value adjusted for column 'd2' at row 1
drop table t1;
create table t1 (col1 decimal(5,2), col2 numeric(5,2));
insert into t1 values (999.999,999.999);
ERROR 22003: Out of range value adjusted for column 'col1' at row 1
insert into t1 values (-999.999,-999.999);
ERROR 22003: Out of range value adjusted for column 'col1' at row 1
select * from t1;
col1	col2
drop table t1;
set sql_mode='';
set @sav_dpi= @@div_precision_increment;
set @@div_precision_increment=15;
+5 −0
Original line number Diff line number Diff line
@@ -79,3 +79,8 @@ insert into t1 values(7,1234567890123456.12345);
select format(col2,6) from t1 where col1=7;
drop table t1;


#
# Bug #10083 (round doesn't increase decimals)
#
select round(150, 2);
+7 −0
Original line number Diff line number Diff line
@@ -934,6 +934,13 @@ create table t1( d1 decimal(18) unsigned, d2 decimal(20) unsigned, d3 decimal (2
--error 1264
insert into t1 values(1,-1,-1);
drop table t1;
create table t1 (col1 decimal(5,2), col2 numeric(5,2));
--error 1264
insert into t1 values (999.999,999.999);
--error 1264
insert into t1 values (-999.999,-999.999);
select * from t1;
drop table t1;
set sql_mode='';

#
+7 −12
Original line number Diff line number Diff line
@@ -1876,7 +1876,8 @@ void Item_func_round::fix_length_and_dec()
    max_length= float_length(decimals);
    break;
  case INT_RESULT:
    if (truncate || (args[0]->decimal_precision() < DECIMAL_LONGLONG_DIGITS))
    if ((decimals_to_set==0) &&
        (truncate || (args[0]->decimal_precision() < DECIMAL_LONGLONG_DIGITS)))
    {
      /* Here we can keep INT_RESULT */
      hybrid_type= INT_RESULT;
@@ -1890,16 +1891,10 @@ void Item_func_round::fix_length_and_dec()
    hybrid_type= DECIMAL_RESULT;
    int decimals_delta= args[0]->decimals - decimals_to_set;
    int precision= args[0]->decimal_precision();
    if (decimals_delta > 0)
    {
      int length_increase= truncate ? 0:1;
    int length_increase= ((decimals_delta <= 0) || truncate) ? 0:1;

    precision-= decimals_delta - length_increase;
    decimals= decimals_to_set;
    }
    else
      /* Decimals to set is bigger that the original scale */
      /* we keep original decimals value                   */
      decimals= args[0]->decimals;
    max_length= my_decimal_precision_to_length(precision, decimals,
                                               unsigned_flag);
    break;
Loading